2015-03-31 36 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去除範圍的潛在感知歧義。