首页 > 解决方案 > 如何找出 CMD.exe 进程在远程机器上运行的脚本?

问题描述

我有一个服务器,它有几个关键任务脚本,作为登录用户在 CMD.exe 窗口中运行。我需要能够单独远程远程任何一个脚本。

如果我是本地人,我可以跑

Get-Process | Where-Object {
    $_.Name -eq "cmd"
} | ft name, MainWindowTitle

这至少会给我一个关于它CMD.exe在做什么的描述。

但是,如果我使用任何方法远程运行此程序(PSSession 或 CIMSession),则不会返回 MainWindowTitle。它将始终为空白。

任何人都可以建议任何其他方法来找出通过 PowerShell 远程运行的脚本。

标签: powershellbatch-filecmd

解决方案


为了补充Nas 的有用解决方案

查询进程的命令行是您最好的选择,因为与 GUI 相关的属性(例如MainWindowTitle远程处理期间根本不可用)。

但是,命令行是否允许您识别正在运行的脚本(批处理文件)取决于该脚本最初是如何启动的

  • 如果脚本是从第一次单独打开的交互式控制台窗口启动的,您将只看到"C:\WINDOWS\system32\cmd.exe"命令行,而不是脚本的路径。

  • 如果脚本是从文件资源管理器或其他 GUI 方法或通过 API 调用启动的,您在命令行中看到脚本文件路径,例如,
    C:\WINDOWS\system32\cmd.exe /c ""C:\Users\jdoe\someScript.cmd" "

    • 但是,即使启动脚本稍后调用另一个脚本,也不一定是当前正在运行的脚本。

相比之下,如果您的脚本启动执行实际工作的外部可执行文件,则最好的选择是直接查询此类可执行进程;例如,如果您的脚本启动foo.exe,请使用:

(Get-CimInstance -ComputerName $comp -ClassName Win32_Process -Filter "Name = 'foo.exe'").CommandLine

推荐阅读