我正在尝试使用以下命令在远程 PC 上执行 .bat 或 .cmd 文件:
PSEXEC \\192.0.0.230 "\Users\James\Desktop\BatchFiles\StopStart.cmd"
这将禁用一个 NIC 并启用另一个 NIC,问题是,它忽略了超时 /t 10,因为它不是在远程计算机上打开文件,而是运行批处理文件中编写的命令。因此,如果它禁用第一个 NIC,它将失去连接,这意味着它无法启用另一个 NIC。但如果它只能运行文件并让这些行在远程 PC 上运行,那么这不是问题,因为即使我由于 NIC 被禁用而失去连接,它也应该继续在远程 PC 上运行 .bat 文件,而不是从我自己的 PC 运行其中编写的命令。
这可能吗?谢谢。
答案1
您也许可以使用schtasks
。我还没有尝试过,但是类似这样的方法可能会有效:
schtasks /create /s SRV01 /tn MyApp /tr "cmd /c c:\path\to\my.bat"
schtasks /run /s SRV01 /tn MyApp
你可以看看Microsoft 的 Schtasks 命令参考更多细节。
答案2
也许您可以使用第二个短脚本(而是使用 psexec 启动)让远程机器在本地复制该批处理文件,然后在最后一行使用call
它来启动第二个本地批处理文件复制(例如复制到%temp%
)?
它会失去与网络位置的连接,但由于“呼叫”在最后一行,所以这不再重要了。
答案3
如果你有权访问电源外壳在两台机器上,您都可以使用调用命令 或者调用命令运行命令
无可否认,这可能比常规的 .bat 执行更强大,但根据过去的经验,在自动化环境中,我们会让 Jenkins 实例从 Jenkins 主机服务器机器上的节点远程运行命令。
在 Powershell 中,有一个 Invoke-Command 选项,自从我上次查看它以来,似乎已经添加了额外的参数,以便有效地以另一个用户的身份在该远程计算机上运行(我更熟悉 Invoke-CommandAs 附加安装组件,所以我不是 100% 了解这个特定的解决方案。)。也就是说,根据那里的文档,以下是我在此处复制的一个例子,以防链接失效,并供快速参考。
Invoke-Command -FilePath <Path_To_Script*> -ComputerName <ComputerName**>
但是,如果您希望使用 Invoke-CommandAs 方法,据我所知,该方法至少从 Powershell 3.0 版开始有效。
那么看起来将会像这样:
Invoke-CommandAs -ComputerName '<ComputerName**>' -Credential $Credential -ScriptBlock { Get-Process }
或者:
Invoke-CommandAs -ComputerName '<ComputerName**>' -AsUser $Credential -ScriptBlock { <Path_To_Script*> }
*
例如,在他们的示例中为“c:\scripts\test.ps1”,或者在您的情况下为“\Users\Bridge\Desktop\BatchFiles\StopStart.cmd” - 只需确保删除上面代码示例中的尖括号。
**
NETBIOS 名称、IP 地址或一台或多台计算机的完全限定域名(以逗号分隔)。如果使用 IP 地址,您还必须提供凭据参数,例如-Credential Domain01\User01
答案4
请打开远程桌面连接并从那里登录系统。
然后您将能够运行您使用的任何程序。
通过使用上述方法,我几乎能够在 Windows 10 Pro 上的 WSL 2.0 中运行 GUI 程序。
如果此举无效,请提供建议。