如何找出CMD.exe进程在远程计算机上运行的脚本?

问题描述 投票:3回答:3

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

如果我是本地人我可以跑

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

这至少会让我描述一下CMD.exe正在做什么。

但是,如果我使用任何方法远程运行(PSSession或CIMSession),将不会返回MainWindowTitle。它总是空白的。

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

powershell batch-file cmd
3个回答
3
投票

补充Nas' helpful solution

查询进程的命令行是最佳选择,因为在远程处理期间,与MainWindowTitle等GUI相关的属性基本上不可用。

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

  • 如果脚本是从首次单独打开的交互式控制台窗口启动的,那么您将只看到"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

0
投票
Get-CimInstance -ComputerName . -ClassName Win32_Process -Filter "Name = 'cmd.exe'" -Property Name,CommandLine | ft Name,CommandLine

0
投票
$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}
© www.soinside.com 2019 - 2024. All rights reserved.