Powershell 如何找出CMD.exe进程在远程计算机上运行的脚本?
我有一个服务器,它有几个关键任务脚本,作为登录用户在CMD.exe窗口中运行。 我需要能够远程这些脚本中的任何一个单独 如果我是本地人,我可以跑步Powershell 如何找出CMD.exe进程在远程计算机上运行的脚本?,powershell,batch-file,cmd,Powershell,Batch File,Cmd,我有一个服务器,它有几个关键任务脚本,作为登录用户在CMD.exe窗口中运行。 我需要能够远程这些脚本中的任何一个单独 如果我是本地人,我可以跑步 Get-Process | Where-Object { $_.Name -eq "cmd" } | ft name, MainWindowTitle 这至少会给我一个关于CMD.exe正在做什么的描述 但是,如果我使用任何方法远程运行(PSSession或CIMSession),MainWindowTitle将不会返回。它将永远是空白的
Get-Process | Where-Object {
$_.Name -eq "cmd"
} | ft name, MainWindowTitle
这至少会给我一个关于CMD.exe
正在做什么的描述
但是,如果我使用任何方法远程运行(PSSession或CIMSession),MainWindowTitle将不会返回。它将永远是空白的
任何人都可以建议其他方法,通过PowerShell远程查找正在运行的脚本。补充:
Get-CimInstance -ComputerName . -ClassName Win32_Process -Filter "Name = 'cmd.exe'" -Property Name,CommandLine | ft Name,CommandLine
查询进程的命令行是最好的选择,因为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
所有远程代码都没有用户界面。@TheIncorrigible1:Oops!我确实知道——谢谢你;答案已更新。
$Ses = New-CimSession -ComputerName $Computer -Credential $Cred
$Process = Get-CimInstance CIM_Process -CimSession $Ses | Where-Object{ $ProcessNames -contains $_.Name }
FOREACH ($Proc IN $Process) {Invoke-CimMethod -InputObject $Proc -MethodName Terminate}