批处理脚本在winrs命令后停止执行

时间:2017-09-26 10:45:19

标签: windows batch-file cmd winrm winrs

我有一个脚本,其中包含对winrs的调用,以便在用户指定的目标计算机上远程启动.exe的执行。

我想要以下功能:

  • 启动脚本
  • 提示用户输入目标PC的名称
  • winrs进入目标PC执行.exe并告诉运行该脚本的用户正在执行此操作。
  • 停止执行winrs并告诉运行该脚本的用户已完成。
  • 退出。
  • 我希望机器上运行脚本的所有输出,并且不希望在目标计算机上显示任何活动。

我的代码如下:

@echo off

echo -------------------------------------------------------
echo PLEASE ENTER PC NAME OF DISCONNECTED MACHINE
echo -------------------------------------------------------
SET /p pcToReconnect= 
echo Attempting to contact Agent.

call winrs -r:%pcToReconnect% "C:\Path\To The\exe that I want\toExecute.exe" >> logfile.txt 2>>&1

echo Agent reconnected. Please allow ~5mins for your management console to update.

代码执行直到winrs调用,并且它确实在目标机器上执行.exe,但似乎远程shell在此之后保持打开状态。

如果我在这一点按ctrl + c“终止shell?(y / n)”放在我的日志文件中,(但在cmd提示符中没有输出)然后我可以按“y”并输入,远程shell退出并且“终止批处理作业(Y / N)”出现在cmd提示符中,但最后一个echo语句永远不会执行。

如何在运行.exe之后让远程shell自动关闭,并在出现任何执行者的提示时回复某些确认脚本已完成的确认?

所有帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

您正在使用call执行新的cmd.exe窗口并在该新窗口中运行winrs并退出。 删除它,它会工作。我在最后添加了暂停,以防你通过双击运行批处理。

@echo off

echo -------------------------------------------------------
echo PLEASE ENTER PC NAME OF DISCONNECTED MACHINE
echo -------------------------------------------------------
SET /p pcToReconnect= 
echo Attempting to contact Agent.

winrs -r:%pcToReconnect% "C:\Path\To The\exe that I want\toExecute.exe" >> logfile.txt 2>>&1

echo Agent reconnected. Please allow ~5mins for your management console to update.
pause

修改

经过一些分析后,似乎批处理正在等待程序完成,所以可以用start来调用它,应该调用它并返回原始提示。

start winrs -r:%pcToReconnect% "C:\Path\To The\exe that I want\toExecute.exe" >> logfile.txt 2>>&1