別のコンピューターにリモートで PowerShell を使用してソフトウェア (.exe) をインストールしようとしています。私が今持っています:
Invoke-Command -Authentication Credssp -Credential $cred -ComputerName "TargetComputer01" -ScriptBlock {Start-Process -FilePath $args[0] -ArgumentList ('/log "{0}" /quiet /norestart' -f $args[1]) -Wait -PassThru -Verb RunAs} -ArgumentList @($Installer, $LogPath)
これは機能せず、エラーもログ ファイルもインストールされたソフトウェアもありません。そのため、なぜ機能しないのかわかりません。インストーラーが共有にあるため、Credssp を使用します。インストーラーを TargetComputer01 のどこかに配置すると、セッションで動作します。以下を参照してください。
Invoke-Command -Session $session -ScriptBlock {Start-Process -FilePath $args[0] -ArgumentList ('/log "{0}" /quiet /norestart' -f $args[1]) -Wait -PassThru -Verb RunAs} -ArgumentList @($Installer, $LogPath)
Credsspを使用した最初のコマンドが機能しない理由は何ですか??
はい、これらのコマンドで Credssp も有効にしました。私のスクリプトは TargetComputer01 (Windows Server 2012) では正常に実行されましたが、TargetComputer02 (Windows Server 2008 R2) では正常に実行されなかったようです。PowerShell のバージョンは同じで、他のすべての構成も同じです (ファイアウォールの設定など)。
ただし、PSSession で動作させる方法を見つけました。次のコードを参照してください。
$cred = Get-Credential -UserName "domain\username" -Message "Enter your credentials"
$session = New-PSSession -ComputerName "TargetComputer02" -Credential $cred -Authentication Credssp
Invoke-Command -Session $session -ScriptBlock {
param
(
$Installer, $LogPath
)
Start-Process -FilePath $Installer -ArgumentList ('/log "{0}" /quiet /norestart' -f $LogPath) -Wait -PassThru -Verb RunAs
} -ArgumentList @($Installer, $LogPath)
セッションなしで Credssp を使用する他の Invoke-Command が Windows Server 2008 R2 で機能しない理由はわかりませんが、上記のコードは両方のオペレーティング システムで機能します。:)