Powershell Invoke-Command无法在脚本

时间:2015-12-07 08:55:25

标签: powershell powershell-remoting powershell-v4.0

我是Powershell的初学者,在编写脚本时遇到了一个非常奇怪的问题。 我有以下代码按预期工作:

$deploymentMachine = Read-Host "Please enter the name of the machine on which you want to deploy: "
$deploymentMachineUsername = Read-Host "Please enter the username: "
$deploymentMachinePassword = Read-Host "Please enter your password: " -AsSecureString
$credentials = New-Object System.Management.Automation.PSCredential ($deploymentMachineUsername, $deploymentMachinePassword)
$remoteSession = New-PSSession -ComputerName $deploymentMachine -Credential $credentials -ErrorAction Stop

然后我尝试使用以下方法检查远程计算机上是否存在文件夹:

if(Invoke-Command -Session $remoteSession { Test-Path "C:\Test" })

会抛出以下错误:

  

无法将参数绑定到参数'Path',因为它为null。

如果我在Powershell中逐行运行相同的代码,一切都按预期工作,并根据我测试的文件夹得到真或假。

有人可以告诉我为什么代码在脚本中失败,但在命令提示符下工作?我错过了什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

经过多次挖掘后,我设法找到答案:我需要使用-ArgumentList传递脚本块使用的局部变量(在我的脚本中,“C:\ Test”存储在变量中) 所以代码现在看起来像这样:

if(Invoke-Command -Session $remoteSession -ScriptBlock { Test-Path -Path $args[0] } -ArgumentList $tmp)

感谢您的帮助!