bugfix> powershell > 投稿

これは私を混乱させるか、ここ数日間混乱させてきました。 paramを ConvertTo-SecureString に渡すことができません 、スクリプト定義変数のみ。

スクリプトを実行するとき、いくつかのパラメーターを渡します。必要なタスクの1つは、PSSessionを介してリモートマシンに接続することです。

./myscript.ps1 -VMPass "12345@!" -VMuser abc

私のスクリプトには、次のものがあり、 New-PSSession に渡されます :

[CmdletBinding()] 
Param(
    $VMuser,
    $VMPass
)
$PWord = ConvertTo-SecureString -AsPlainText -String "$VMPass" -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $VMuser, $PWord
$NewVMSession = (New-PSSession -ComputerName $NewVMAddress -Credential $cred -ErrorAction Stop)

これを実行すると、次のエラーが表示されます。

New-PSSession:[WIN-V2BK0KCPC7H]リモートサーバーWIN-V2BK0KCPC7Hへの接続
次のエラーメッセージで失敗しました:アクセスが拒否されました。詳細については、
about_Remote_Troubleshootingヘルプトピックを参照してください。
C:\ Users \ ChildsC \ Documents \ Git \ BAIC \ Controller.ps1:85文字:26
+ ... MSession =(New-PSSession -ComputerName $NewVMAddress -Credential $vm ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~   + CategoryInfo:OpenError:(System.Manageme .... RemoteRunspace:RemoteRunspace)[New-PSSession]、PSRemotingTransportException   + FullyQualifiedErrorId:AccessDenied、PSSessionOpenFailed

ただし、 $VMPass = "12345@!" を明示的に定義する場合 スクリプト内で、または Get-Credential を呼び出す場合正常に動作します。

そのため、paramが渡される方法に小さな問題があります。

回答 2 件
  • 認証の試行が有効であることを確認するには、ドメイン資格情報のユーザー名を DomainName\UserName としてフォーマットすることを忘れないでください 。適切な -Authentication を提供する必要がある場合もあります   New-PSSession のパラメーター値  コマンドレット。

    利用可能な認証オプションがいくつかあります。それらについては、MSDN(https://msdn.microsoft.com/en-us/library/aa384295(v=vs.85))で一般的なWinRM認証について詳しく読むことができます。 aspx

    スクリプトの構文に誤りがあると信じる当面の理由はありませんが、上記が役に立たない場合はおそらくそれを見ることができます。

  • 返事が遅くなってごめん。

    後で、変数を介して渡すのではなく、スクリプトでパスワードを明示的に呼び出そうとしたときに、断続的な接続の問題に直面していました。

    上記と同じスクリプトを使用して、既にドメインにあるマシンに接続する場合、正常に動作します。この問題は、マシンがドメインに接続されていない場合にのみ発生するようです。

    OSテンプレートのセットアップについて考えていましたが、OUが多すぎるため、テンプレートを使用してドメインにVMをセットアップすることはできません。

    私の回避策は、ファイアウォールを無効にすることです。 VMをドメインに接続するスクリプトがあり、追加したらファイアウォールを再度有効にできます。

    私はこれに特に満足しているわけではありませんが、今のところ機能し、一貫している唯一のものです。ここで詳しく説明するように、特定のポートをいくつか開いてみました。 https://blogs.technet.microsoft.com/christwe/2012/06/20/what-port-does-powershell-remoting-use/

    しかし、私は再び一貫した結果を得ていませんでした。しかし、ファイアウォールは問題であることがわかっているので、後で戻ってどのポートを開くべきかを判断できます。私は誰かが何かを持っている場合、これを行う方法についてのアイデアを受け入れています:)。

    これを回答済みとしてマークします。

    御時間ありがとうございます。

あなたの答え