0
次のコードを使用してCitrix XenApp 6.5サーバーの状態を取得しようとすると、ゾーンデータコレクタでPowerShellをローカルで実行すると結果セットが返されます。ScriptBlockを使用したInvoke-Commandはローカルサーバー上で動作 - リモートResultsetは空です
$serverName = "SOMECITRIXSERVER"
$Invoke-Command -ScriptBlock {Add-PSSnapin Citrix.XenApp.Commands}
$serverStatus = Get-XAServer | select ServerName,@{n="InMaintenanceMode";e={ if($_.LogOnMode -like "Prohibit*"){$true}elseif($_.LogOnMode -eq "AllowLogons"){$false} }} | where {$_.ServerName -eq $serverName} | Select InMaintenanceMode}
Write-Output "Status: $serverStatus.InMaintenanceMode"
Status: false
同じスクリプトブロックが、PowerShellで実行され、computernameがZDCに設定され、資格情報が提供されます。いかなる例外がスローされませんし、結果セットが空であるされています。WinRMのトラフィックペイロードが暗号化されているので、Wiresharkのネットワークパケットキャプチャを実行
$zoneDataCollector = "SOMEZDCHOST"
$serverName = "SOMECITRIXSERVER"
$key = (somekeyvaluehere)
$passwordZDC = cat CredentialFile.txt | convertto-securestring -key $key
$credZDC = new-object -typename System.Management.Automation.PSCredential -argumentlist $usernameZDC, $passwordZDC
$ZDCSession = New-PSSession -ComputerName $zoneDataCollector -Credential $credZDC
$Invoke-Command -Session $ZDCSession -ScriptBlock {Add-PSSnapin Citrix.XenApp.Commands}
$serverStatus = Invoke-Command -Session $ZDCSession -ScriptBlock {Get-XAServer | select ServerName,@{n="InMaintenanceMode";e={ if($_.LogOnMode -like "Prohibit*"){$true}elseif($_.LogOnMode -eq "AllowLogons"){$false} }} | where {$_.ServerName -eq $serverName} | Select InMaintenanceMode}
Write-Output "Status: $serverStatus.InMaintenanceMode"
Status:
は非常に有用ではありません。
スクリプトブロック内のコマンドがローカルで動作するのはなぜですか?例外をスローせずに空の結果セットを返す理由はありますか?
ありがとうございます! DS
リモートサーバー上で、Invoke-Commandコマンドを使用して、あなたは、あなたがスクリプトブロックにのparamsを追加し、argumentslistする必要があり、ローカルマシンから変数を呼び出す必要が