2015-03-31 33 views
1

我想在远程PowerShell会话中使用脚本块。此命令正在工作,我得到关于机器状态的输出:Invoke-Command脚本块没有生成输出

$SecurePassword = $ParamPassword | ConvertTo-SecureString -AsPlainText -Force 
$cred = New-Object System.Management.Automation.PSCredential ` 
-ArgumentList $UserName, $SecurePassword 
$ParamDomain = 'mydomain' 
$ParamHostname = "myhostname" 

$fullhost = "$ParamDomain"+"\"+"$ParamHostname" 

#Get-BrokerMachine No1 
if ($ParamCommand -eq 'Get-BrokerMachine'){ 
$s = New-PSSession -computerName $desktopbroker -credential $cred 
Invoke-Command -Session $s -ScriptBlock { param($fullhost) ;asnp citrix.* ; Get-BrokerMachine -machinename $fullhost } -Args $fullhost 
} 

我的第二次迭代也使用scriptblock失败。没有执行命令Get-BrokerMachine并且没有输出。

#Get-BrokerMachine No2 
if ($ParamCommand -eq 'Get-BrokerMachine'){ 
$ScriptBlock = { 
    asnp citrix.* ; Get-BrokerMachine -machinename $fullhost 
}; 
$s = New-PSSession -computerName $desktopbroker -credential $cred 
Invoke-Command -Session $s -ScriptBlock $ScriptBlock 

} 

有人可以解释第二个脚本有什么问题吗?

+0

'$ fullhost'很可能是$ null,因为它没有传递给命令。你需要通过'$ fullhost'作为参数,我敢打赌。你在第一个例子中这样做。不是你的第二个 – Matt 2015-03-31 14:15:47

回答

2

您的第二个脚本中缺少的一件重要事情是您没有通过$fullhost作为参数。当在远程系统$fullhost上调用脚本块时,将为$null

粗糙的猜测是,你需要做这样的事情:

#Get-BrokerMachine No2 
if ($ParamCommand -eq 'Get-BrokerMachine'){ 
    $ScriptBlock = { 
     param($host) 
     asnp citrix.* ; Get-BrokerMachine -machinename $host 
    }; 
    $s = New-PSSession -computerName $desktopbroker -credential $cred 
    Invoke-Command -Session $s -ScriptBlock $ScriptBlock -ArgumentList $fullhost 
} 

我改变了脚本块内的变量名$host去除范围的潜在感知歧义。