2014-04-11 20 views
0

我很新的PowerShell,所以尋找一些幫助。我試圖運行遠程PowerShell腳本來檢查使用Citrix Commandlets的健康狀況或VDI環境。 (我正在執行Microsoft Orchestrator .Net Activity上的腳本)。所以,我有以下代碼: #2012 VDI桌面檢查返回並引用遠程PowerShell變量結果

$vdims = "MyCitrixPowershellSDKServer" 
function vdidesktopcheck 
{ 

       asnp Citrix* 
       $result = Get-BrokerDesktop -InMaintenanceMode $True -DesktopGroupName Unidesk 
    $result 
} 


$output = invoke-command -computer $vdims -scriptblock ${function:vdidesktopcheck} 
$machinename = $output.machinename 
$machinename 
$state = $output.RegistrationState 
$state 

所以,當我使用Orchestrator可以暴露變量$計算機名,$狀態 - 我從involked獲取-BrokerDesktop查詢「最後」的結果。但是,Get-Brokerdesktop查詢可能會返回多個機器,因此我希望能夠引用與查詢輸出相匹配的每臺機器。這就是基本要求 - 我希望能夠做的是進一步改進基本的Get-BrokerDesktop查詢,以便能夠計算機器輸出上的數量大於3(即,MaintMode中有3臺以上的機器是不可接受的),還有請檢查MachineName屬性是否與特定值不相等,即環境中可能會處於維護模式的3個測試機器名稱。

希望這是有道理的,如果不是的話,我會嘗試和闡述。任何幫助非常感謝!

回答

0

Orchestrator的一個限制是您只能通過數據總線傳遞字符串,並且需要傳遞一組對象。您需要將對象數組序列化爲一個字符串。一種方法是將數組轉換爲json,然後在返回獲取對象數組時使用convertfrom-json。

沒有SCORCH服務器,方便測試,所以這根本沒有經過測試。

$vdims = "MyCitrixPowershellSDKServer" 
function vdidesktopcheck 
{ 

      asnp Citrix* 
      $result = Get-BrokerDesktop -InMaintenanceMode $True -DesktopGroupName Unidesk 
    $result 
} 


$output = invoke-command -computer $vdims -scriptblock ${function:vdidesktopcheck} | 
     select machinename,RegistrationState | ConvertTo-Json 

$Output