Windows Powershell可以';t读取变量作为启动进程文件路径

Windows Powershell可以';t读取变量作为启动进程文件路径,windows,powershell,openvpn,start-process,Windows,Powershell,Openvpn,Start Process,我正试图清理我的脚本,我遇到了这个问题 当我跑的时候 Invoke-Command -ComputerName $Computer -ScriptBlock {Start-Process "c:\temp\openVPN\openvpn-install-2.4.8-I602-Win7.exe" 我没有问题,但当我设置一个变量,使脚本看起来像这样 $filepath = "c:\temp\openVPN\openvpn-install-2.4.8-I602-Win7.exe" Invoke-C

我正试图清理我的脚本,我遇到了这个问题

当我跑的时候

Invoke-Command -ComputerName $Computer -ScriptBlock {Start-Process "c:\temp\openVPN\openvpn-install-2.4.8-I602-Win7.exe"

我没有问题,但当我设置一个变量,使脚本看起来像这样

$filepath = "c:\temp\openVPN\openvpn-install-2.4.8-I602-Win7.exe"
Invoke-Command -ComputerName $Computer -ScriptBlock {Start-Process -FilePath $filepath }

我收到了错误

无法验证参数“FilePath”上的参数。参数为null或为空。请提供一个不为null或空的参数,然后重试该命令。


谢谢

您的
调用命令在远程计算机上执行。它在与调用范围(本地会话)不同的范围内运行,因此无法访问本地变量。
$using
范围修饰符允许在远程范围中访问当前范围中定义的变量

Invoke-Command -ComputerName $Computer -ScriptBlock {Start-Process -FilePath $using:filepath }

请注意,这假定文件路径确实存在于远程计算机上。有关更多信息,请参阅。

您的
调用命令在远程计算机上执行。它在与调用范围(本地会话)不同的范围内运行,因此无法访问本地变量。
$using
范围修饰符允许在远程范围中访问当前范围中定义的变量

Invoke-Command -ComputerName $Computer -ScriptBlock {Start-Process -FilePath $using:filepath }

请注意,这假定文件路径确实存在于远程计算机上。有关更多信息,请参阅。

您可以在此处使用
$using
范围修饰符:
$using:filepath
。这将允许在远程作用域中访问调用作用域中的变量。您可以在此处使用
$using
作用域修饰符:
$using:filepath
。这将允许在远程作用域中访问调用作用域中的变量。