2017-09-26 207 views
2

我有一个脚本,其中包含对winrs的调用,以便远程启动用户指定目标机器上的.exe的执行。批处理脚本在winrs命令后停止执行

我想了以下功能:

  • 启动脚本
  • 提示用户为目标计算机的名称
  • winrs到目标电脑执行.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称,它并INFACT执行目标机器上的.exe文件,但似乎那么远程shell在此之后,保持开放无所事事。

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

如何让远程shell在运行.exe后自动关闭,并回显某种确认脚本已经完成了谁执行它的提示?

所有帮助表示感谢!

回答

0

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

关闭@echo

编辑

经过一番分析似乎批次正在等待程序完成,所以它有可能只是开始称呼它应该叫它并返回到原始提示。

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

这具有完全相同的行为。 我想调用只是确保脚本调用指定的命令后返回自己? 暂停是一个有用的提示,通过双击运行,虽然谢谢你! –

+0

@CiaranMcKenzie你正在执行什么命令?它应该在指挥官跑完后退出。也许测试命令本身,所以用类似ping命令的东西替换命令。并看看它是否返回? –

+0

我想远程运行.exe文件,只需将其路径/名称输入到远程cmd即可。 我在这里有两个电脑,所以当我运行你的代码或我的代码时,EXE在目标机器上远程运行,因为我可以看到相关服务已在该机器上启动,并且日志文件没有错误。因此,实现了在目标背景中运行该.exe的实际最终目标。 就好像脚本停止了那样,.exe已经在远程机器上执行了,错误/成功被记录到日志文件中,然后我坐在那里提示并且最后的回声从不发生。 –

相关问题