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