我正在以另一个用户的身份在同一台计算机上执行命令,如下PsExec
所示cmd
:
PsExec.exe -u myuser -p mypass timeout 4
当我这样做时,会打开一个新的 cmd 窗口,其中包含 的输出timeout 4
,该窗口会保持打开状态直到命令完成。如何防止打开或显示这个新窗口?
我最接近的结果是下面的,但这仍然不能令人满意,因为新窗口在最小化之前会显示片刻:
PsExec.exe -u myuser -p mypass cmd.exe /c "start /min timeout 4"
唯一的其他问题我发现关于这个是从开始的PowerShell
,但我在标准中cmd
。我在 Windows 10,PsExec
v2.2 上。
答案1
我会使用 Windows 脚本主机(旧技术)来隐藏窗口。我还使用此方法通过任务计划程序执行我不想弹出的操作。
这种方法将使您能够灵活地实际控制窗口创建标志(如果没有代码就无法做到这一点)。
- 您需要注册 JScript 处理程序通过提升的命令提示符首先,因为它不再默认注册。
像这样:regsvr32 %systemroot%\system32\jscript.dll
接下来,创建一个包含以下内容的 JScript 文本文件。
var oShell = new ActiveXObject("WScript.Shell");
//oShell.Popup("Test if the script is launching by removing this comment");
oShell.Run( "PsExec.exe -u user_name -p user_pass timeout 4",
0 /* SW_HIDE */,
true /* bWaitOnReturn */
);
现在使用命令行运行此 JScript 文件:
wscript.exe <path_to_jscript_file>
或者cscript.exe <path_to_jscript_file>
使用哪一种取决于你寻求的行为。尝试一下每种方式。
答案2
我自己也找到了两个解决方案。比较简单的一个是使用PAExec
,它是 的免费、可重新分发和开源等效版本PsExec
。它采用相同的参数和更多参数,但不会打开额外的窗口。
对于第二个解决方案,user1292580 的评论以及 Señor CMasMas 的回答让我走上了正确的道路。关键是只将命令放入timeout
脚本文件中,然后用 调用它PsExec
。因此,使用此.js
文件:
var oShell = new ActiveXObject("WScript.Shell");
oShell.Run("timeout 2", 0, true);
或者这个.vbs
文件:
Set WshShell = WScript.CreateObject("WScript.Shell")
Return = WshShell.Run("timeout 2", 0, true)
然后打电话PsExec.exe wscript <the_script_file>
就成功了。
答案3
- 使用文本创建批处理文件的快捷方式
PsExec.exe -u myuser -p mypass timeout 4
。 - 右键单击快捷方式并选择特性。
- 在捷径选项卡,设置跑步:到最小化。
答案4
您可以使用-d
如下参数:
PsExec.exe -d -u myuser -p mypass timeout 4