1

我试图在 powershell 脚本中远程执行 .bat 文件。我的脚本文件中的代码如下所示:

$server
$cred
# Both of these methods are strings pointing to the location of the scripts on the
# remote server ie. C:\Scripts\remoteMethod.cmd
$method1
$method2
$scriptArg

Enter-PSSession $server -Credential $cred
Invoke-Command {&$method1}
if($?)
{
    Invoke-Command {&$method2 $args} -ArgumentList $scriptArg
}
Exit-PSSession

但是每当我运行它时,我都会得到

术语“C:\Scripts\remoteMethod.cmd”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。

即使我切换调用方法的顺序也会发生这种情况。

我发现这个问题Using Powershell's Invoke-Command to call a batch file with arguments并尝试了接受的答案无济于事。

4

1 回答 1

1

我没想到 $method1 和 $method2 变量在Invoke-Command. 通常您必须通过-ArgumentList参数传递这些参数,例如:

Invoke-Command {param($method, $arg) &$method $arg} -Arg $method2 $scriptArg

但在您的情况下,CMD 文件的路径似乎正在通过远程连接。试试这个,看看问题是否与远程机器上修改的 ComSpec 环境变量有关:

Invoke-Command {param($method, $arg) cmd.exe /c $method $arg} -Arg $method2, $scriptArg
于 2012-06-26T16:57:25.363 回答