如何找出CMD.exe进程在远程计算机上运行的脚本?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何找出CMD.exe进程在远程计算机上运行的脚本?相关的知识,希望对你有一定的参考价值。
我有一个服务器,它有几个任务关键脚本,作为登录用户在CMD.exe窗口中运行。我需要能够单独远程任意一个脚本。
如果我是本地人我可以跑
Get-Process | Where-Object {
$_.Name -eq "cmd"
} | ft name, MainWindowTitle
这至少会让我描述一下CMD.exe
正在做什么。
但是,如果我使用任何方法远程运行(PSSession或CIMSession),将不会返回MainWindowTitle。它总是空白的。
任何人都可以建议任何其他方法来找出通过PowerShell远程运行的脚本。
答案
查询进程的命令行是最佳选择,因为在远程处理期间,与MainWindowTitle
等GUI相关的属性基本上不可用。
但是,命令行是否允许您识别正在运行的脚本(批处理文件)取决于该脚本最初的启动方式:
- 如果脚本是从首次单独打开的交互式控制台窗口启动的,那么您将只看到
"C:WINDOWSsystem32cmd.exe"
作为命令行,而不是脚本的路径。 - 如果脚本是从文件资源管理器或其他GUI方法或通过API调用启动的,您将在命令行中看到脚本文件路径,例如,
C:WINDOWSsystem32cmd.exe /c ""C:UsersjdoesomeScript.cmd" "
但是,即使这样,也不一定是当前正在运行的脚本,例如,启动脚本稍后会调用另一个脚本。
相比之下,如果您的脚本启动了执行实际工作的外部可执行文件,那么最好的办法是直接查询此类可执行文件;例如,如果您的脚本启动foo.exe
,请使用:
(Get-CimInstance -ComputerName $comp -ClassName Win32_Process -Filter "Name = 'foo.exe'").CommandLine
另一答案
Get-CimInstance -ComputerName . -ClassName Win32_Process -Filter "Name = 'cmd.exe'" -Property Name,CommandLine | ft Name,CommandLine
另一答案
$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}
以上是关于如何找出CMD.exe进程在远程计算机上运行的脚本?的主要内容,如果未能解决你的问题,请参考以下文章