返回并引用远程powershell变量结果

时间:2014-04-11 07:00:20

标签: powershell

我对powershell很新,所以寻求一些帮助。我正在尝试使用Citrix Commandlets运行远程PowerShell脚本来检查健康状况或VDI环境。 (我正在Microsoft orchestrator .Net Activity上实现该脚本)。所以我有以下代码:     #2012 VDI桌面检查

$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公开变量$ machinename,$ state时 - 我得到了偏离的Get-BrokerDesktop查询的'last'结果。但是,Get-Brokerdesktop查询可能会返回多台计算机,因此我希望能够引用与查询输出匹配的每台计算机。这是基本要求 - 我希望能够做的是进一步细化基本的Get-BrokerDesktop查询,以便能够计算机器输出上的数字来说明> 3(即MaintMode中超过3台机器是不可接受的)并且还检查MachineName属性是否不等于特定值,即环境中可能预期在MaintenanceMode中的3个测试机器名称。

希望这是有道理的,如果不是,我会试着详细说明。任何帮助非常感谢!!

1 个答案:

答案 0 :(得分: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