2017-02-02 3 views
0

Lorsque vous tentez d'obtenir l'état du serveur Citrix XenApp 6.5 en utilisant le code suivant, un jeu de résultats est renvoyé lorsqu'il est exécuté localement dans PowerShell sur un collecteur de données de zone:Invoke-Command avec ScriptBlock Fonctionne sur le serveur local - À distance Resultset est vide

Le même scriptbloc est ensuite exécuté dans PowerShell avec un nom d'ordinateur défini sur un ZDC et des informations d'identification fournies. Aucune exception ne sont jetés et le vide est ResultSet:

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

Exécution d'une capture de paquets Wireshark est pas très utile, car la charge utile du trafic WinRM est crypté.

Des idées sur la raison pour laquelle la commande dans le scriptblock fonctionnerait localement, mais retourner un resultset vide sans lancer des exceptions?

Merci! ds

Répondre

0

Lorsque vous en utilisant la commande Invoke sur un serveur distant, et vous devez appeler une variable de la machine locale, vous devez ajouter params au scriptblock et argumentslist

Ainsi, votre code doit comme

$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