批处理脚本在 winrs 命令后停止执行
Batch script stops executing after winrs command
我有一个脚本,其中包含对 winrs 的调用,以便在用户指定的目标计算机上远程开始执行 .exe。
我想要以下功能:
- 启动脚本
- 提示用户输入目标 PC 的名称
- winrs 进入执行 .exe 的目标 PC,并告诉 运行 正在执行此脚本的用户。
- 停止 winrs 的执行并告诉 运行 脚本已经完成的用户。
- 退出。
- 我想要脚本 运行 在机器上的所有输出,而不想要目标机器上 activity 的任何显示。
我的代码如下:
@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,"Terminate the shell? (y/n)" 将被放入我的日志文件中(但 cmd 提示符中没有输出),然后我可以按 "y" 并输入,然后remote shell 退出并且 "Terminate batch job (Y/N)" 出现在 cmd 提示符中,但是最后的 echo 语句永远不会执行。
如何让远程 shell 在 .exe 运行 后自动关闭,并在执行者的提示下回显脚本已完成的某种确认?
感谢所有帮助!
您正在使用 call
,它在那个新的 window 中执行新的 cmd.exe
window 和 运行 winrs 并退出。
删除它,它将起作用。我在最后添加了暂停,以防你是 运行 双击它的批处理。
@echo 关闭
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 调用它,然后 return 到原始提示。
start winrs -r:%pcToReconnect% "C:\Path\To The\exe that I want\toExecute.exe" >> logfile.txt 2>>&1
我有一个脚本,其中包含对 winrs 的调用,以便在用户指定的目标计算机上远程开始执行 .exe。
我想要以下功能:
- 启动脚本
- 提示用户输入目标 PC 的名称
- winrs 进入执行 .exe 的目标 PC,并告诉 运行 正在执行此脚本的用户。
- 停止 winrs 的执行并告诉 运行 脚本已经完成的用户。
- 退出。
- 我想要脚本 运行 在机器上的所有输出,而不想要目标机器上 activity 的任何显示。
我的代码如下:
@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,"Terminate the shell? (y/n)" 将被放入我的日志文件中(但 cmd 提示符中没有输出),然后我可以按 "y" 并输入,然后remote shell 退出并且 "Terminate batch job (Y/N)" 出现在 cmd 提示符中,但是最后的 echo 语句永远不会执行。
如何让远程 shell 在 .exe 运行 后自动关闭,并在执行者的提示下回显脚本已完成的某种确认?
感谢所有帮助!
您正在使用 call
,它在那个新的 window 中执行新的 cmd.exe
window 和 运行 winrs 并退出。
删除它,它将起作用。我在最后添加了暂停,以防你是 运行 双击它的批处理。
@echo 关闭
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 调用它,然后 return 到原始提示。
start winrs -r:%pcToReconnect% "C:\Path\To The\exe that I want\toExecute.exe" >> logfile.txt 2>>&1