Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 批处理脚本在winrs命令后停止执行_Windows_Batch File_Cmd_Winrm_Winrs - Fatal编程技术网

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

Windows 批处理脚本在winrs命令后停止执行,windows,batch-file,cmd,winrm,winrs,Windows,Batch File,Cmd,Winrm,Winrs,我有一个脚本,其中包含对winrs的调用,以便在用户指定的目标计算机上远程启动.exe的执行 我需要以下功能: 开始脚本 提示用户输入目标PC的名称 winrs进入执行.exe的目标PC,并告诉运行脚本的用户正在执行此操作 停止winrs的执行,并告诉运行脚本的用户它已经完成 退出 我想要运行脚本的机器上的所有输出,不想在目标机器上显示任何活动 我的守则如下: @echo off echo --------------------------------------------------

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

我需要以下功能:

  • 开始脚本
  • 提示用户输入目标PC的名称
  • winrs进入执行.exe的目标PC,并告诉运行脚本的用户正在执行此操作
  • 停止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退出并在cmd提示符中显示“终止批处理作业(y/n)”,但最后一条echo语句永远不会执行

如何让远程shell在.exe运行后自动关闭,并在执行脚本的人的提示下,以某种形式确认脚本已完成


感谢大家的帮助

您正在使用
call
执行一个新的
cmd.exe
窗口,并在该新窗口中运行winrs并退出。 移除它,它就会工作。我在末尾添加了暂停,以防双击它来运行批处理

@回音

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应该调用它并返回到原始提示符

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

这有着完全相同的行为。我以为call只是确保脚本在调用指定的命令后返回到它自己?暂停是双击跑步的一个有用提示,谢谢@CiaranMcKenzie你在执行什么命令?它应该在comman运行后退出。也许要测试命令本身,所以用类似ping命令的东西替换命令。看看它是否返回?我想远程运行一个.exe文件,所以只需在远程cmd中输入它的路径/名称。我这里有两台电脑,所以当我运行你的代码或我的代码时,目标机器上会远程运行.exe,因为我可以看到相关服务已在该机器上启动,并且日志文件没有错误。因此,在目标的后台运行该.exe的实际最终目标实现了。这就好像脚本停止了,远程计算机上执行了.exe,错误/成功记录到日志文件中,然后我坐在那里等待提示,最后一次回显从未发生。您是否尝试过其他命令作为测试?例如,只需执行
ping localhost
并通过管道连接到日志,看看它是否返回?这很有效!它执行了命令并返回到脚本,最后返回最后一条语句并将ping信息输出到日志文件中,所以我想问题是这个.exe根本没有返回,这实际上是有意义的,因为它是一个正在启动的程序,将在后台持续运行。所以我想我想启动.exe,但不想等它启动后再看它做什么?你知道有什么方法可以做到这一点吗?谢谢你的帮助,离我们更近了一步!