使用“Invoke-Command”在远程计算机上运行本地文件

时间:2016-02-26 16:03:39

标签: powershell cmd remote-debugging remoting powershell-remoting

我正在尝试使用powershell运行位于计算机A上的bat脚本并在计算机B上执行它

计算机A是调用调用命令功能的计算机

我试图通过

来做到这一点
Invoke-Command -ComputerName ComputerB -ScriptBlock{& "\\ComputerA\filepath\batch.bat"}  -Credential $Cred

当我运行时,我收到错误

The term '\\ComputerA\filepath\batch.bat' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the  name, or if a path was included, verify that the path is correct and try again.

我还尝试通过调用计算机B上的cmd来运行它并将此bat脚本作为参数传递,但我没有收到任何错误但我可以告诉脚本没有运行 我用于此的命令是

Invoke-Command -ComputerName ComputerB -ScriptBlock{& "C:\Windows\System32\cmd.exe"} -ArgumentList "\\ComputerA\filepath\batch.bat" -Credential $Cred

当我进入计算机B并通过cmd手动调用脚本时,它可以正常工作

我确认Invoke-Command有效,因为我能够运行计算机B本地的程序

我试图不必将任何文件放在计算机B上,例如psexec或bat脚本本身,这就是我尝试这种方式的原因

谢谢

2 个答案:

答案 0 :(得分:0)

当您远程访问某台计算机(在本例中为ComputerB)并尝试访问ComputerA上的某些内容时,您基本上是在尝试访问默认情况下不允许的网络资源。使用Invoke-Command中的-EnableNetworkAccess参数显式允许相同的

答案 1 :(得分:0)

这听起来像是"双跃点" - /"第二跳" -problem。您的凭据在远程会话中不可用(访问网络共享)。 解决方案:

  • 使用CredSSP身份验证
  • 在本地运行..
    • 将文件复制到远程计算机
    • 使用Invoke-Command -Scriptblock { & "c:\temp\batch.bat" }
    • 如有必要,请删除远程计算机上的领域
  • 使用psexec.exe