powershell - 如何找出 CMD.exe 进程在远程机器上运行的脚本?
问题描述
我有一个服务器,它有几个关键任务脚本,作为登录用户在 CMD.exe 窗口中运行。我需要能够单独远程远程任何一个脚本。
如果我是本地人,我可以跑
Get-Process | Where-Object {
$_.Name -eq "cmd"
} | ft name, MainWindowTitle
这至少会给我一个关于它CMD.exe
在做什么的描述。
但是,如果我使用任何方法远程运行此程序(PSSession 或 CIMSession),则不会返回 MainWindowTitle。它将始终为空白。
任何人都可以建议任何其他方法来找出通过 PowerShell 远程运行的脚本。
解决方案
为了补充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
推荐阅读
- javascript - 如何将按钮的颜色更改为一个命令?
- python - python Django中如何区分上传的PDF通过正则表达式提取数据
- flutter - 从 mongodb 反序列化几何多边形
- lisp - AutoLISP - 自动更改图层
- javascript - 将 Javascript 日期创建为 UTC
- visible - 有限的地面观察
- java - 如何在 java 中声明一个超过 64 位的数字?
- .net-core - 从 dotnetcore 应用程序调用 Microsoft 图形 API 会返回 NotFound
- windows - 基于公共列创建一个 .bat 文件,输出将是选择性列
- c++ - C++ 单独赋值还是创建一个新对象?