麻烦在PS会话期间执行.cmd文件

时间:2012-06-26 15:51:58

标签: powershell powershell-remoting

我试图在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,并尝试了接受的答案但无济于事。

1 个答案:

答案 0 :(得分:1)

我不希望$ method1和$ method2变量在Invoke-Command的scriptblock中可用。通常你必须通过-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