Invoke-Command с ScriptBlock работает на локальном сервере - удаленный набор результатов пуст

При попытке получить статус сервера Citrix XenApp 6.5 с помощью следующего кода возвращается набор результатов при локальном запуске в PowerShell на сборщике данных зоны:

$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 с именем компьютера, заданным как ZDC, и предоставленными учетными данными. Никакие исключения не выбрасываются, и набор результатов пуст:

$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: 

Запуск захвата сетевых пакетов Wireshark не очень полезен, поскольку полезная нагрузка трафика WinRM зашифрована.

Любые идеи относительно того, почему команда в блоке сценария будет работать локально, но возвращать пустой набор результатов без создания исключений?

Спасибо! дс


person DStackley    schedule 02.02.2017    source источник


Ответы (1)


Когда вы используете команду вызова на удаленном сервере и вам нужно вызвать переменную с локального компьютера, вам нужно добавить параметры в блок сценария и список аргументов.

Итак, ваш код должен выглядеть так

$serverStatus = Invoke-Command -Session $ZDCSession -ScriptBlock {param($serverName) Get-XAServer | select ServerName,@{n="InMaintenanceMode";e={ if($_.LogOnMode -like "Prohibit*"){$true}elseif($_.LogOnMode -eq "AllowLogons"){$false} }} | where {$_.ServerName -eq $serverName} | Select InMaintenanceMode} –argumentlist $serverName
person mattnicola    schedule 08.02.2017