Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 调用命令won';t接受-Path作为变量_Powershell - Fatal编程技术网

Powershell 调用命令won';t接受-Path作为变量

Powershell 调用命令won';t接受-Path作为变量,powershell,Powershell,我试图使用Invoke命令对远程计算机执行一个简单的测试路径查询,但遇到了一个奇怪的错误 这项工作: Invoke-Command -ComputerName COMPUTER001 -ScriptBlock {Test-Path -Path "c:\windows\system.ini"} 此操作失败,原因是“无法将参数绑定到参数‘Path’,因为它为null。”: 我试过同时使用$p_FileName和$($p_FileName),但没有成功 是否有任何建议,并希望对发生的情况进行解释?您

我试图使用
Invoke命令
对远程计算机执行一个简单的
测试路径
查询,但遇到了一个奇怪的错误

这项工作:

Invoke-Command -ComputerName COMPUTER001 -ScriptBlock {Test-Path -Path "c:\windows\system.ini"}
此操作失败,原因是“无法将参数绑定到参数‘Path’,因为它为null。”:

我试过同时使用
$p_FileName
$($p_FileName)
,但没有成功


是否有任何建议,并希望对发生的情况进行解释?

您必须通过-ArgumentList参数传递脚本块中使用的局部变量:

$p_FileName = "c:\windows\system.ini"
Invoke-Command -ComputerName COMPUTER001 -ScriptBlock {Test-Path -Path $args[0]} -ArgumentList $p_FileName

您有一个范围问题。在远程服务器上运行的脚本块中的作用域无法访问本地变量。有几种方法可以解决这个问题。我最喜欢的是$Using:scope,但很多人都不知道它

$p_FileName = "c:\windows\system.ini"
Invoke-Command -ComputerName COMPUTER001 -ScriptBlock {Test-Path -Path $Using:p_FileName}

对于invoke命令,这允许您在脚本块中使用局部变量。这是为了在工作流中使用而引入的,也可以在DSC脚本块中使用。

替代@kevmar和@mjolinor(至少适用于PS4):

$p_FileName在本地计算机上解析,以便COMPUTER001接收

Test-Path c:\windows\system.ini

从命令中可能复制丢失路径,这是错误吗?
$p_FileName = "c:\windows\system.ini"
$sb = [scriptblock]::create("Test-Path $p_FileName")
Invoke-Command -ComputerName COMPUTER001 -ScriptBlock $sb
Test-Path c:\windows\system.ini