我对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个测试机器名称。
希望这是有道理的,如果不是,我会试着详细说明。任何帮助非常感谢!!
答案 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