调用命令脚本块不产生输出(Invoke-Command script block not gener

2019-10-22 10:42发布

我想在远程PowerShell会话使用脚本块。 这个命令是工作,我得到机器状态的输出:

$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
}

我的第二个迭代中,也使用脚本块,失败。 命令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 

}

有人可以解释什么是错的,第二脚本?

Answer 1:

那是在你的第二个脚本缺少的一个重要的事情是,你不及格$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去除范围的潜在感知歧义。



文章来源: Invoke-Command script block not generating output