我正在尝试编写脚本以远程终止特定的命令提示符过程。 如果我在本地运行get-process,我可以看到可以通过在“ MainWindowTitle”字段中设置的内容来缩小CMD.exe进程。
如果我使用Get-Process-计算机名或获得CIMInstance,则“ MainTitleWindow”字段将返回为空白。
$ses = New-CimSession -ComputerName $computer -Credential $cred
$process = Get-CimInstance -ClassName CIM_process -CimSession $ses -filter "name = 'cmd.exe'"
$process | Select-Object name,MainWindowTitle
Remove-CimSession -CimSession $ses
name MainWindowTitle
---- ---------------
cmd.exe
答案 0 :(得分:1)
从 MSDN 提取:
仅当流程具有以下内容时,该流程才具有与其关联的主窗口 图形界面。如果关联的流程没有主流程 窗口(因此MainWindowHandle为零),MainWindowTitle为空 字符串(“”)。
更多信息here。
我试图与其他进程进行比较,但结果是相同的...
答案 1 :(得分:0)
您可以解析tasklist
命令的输出。像这样:
$cmds = tasklist /v |
Where-Object {$_ -like "cmd.exe*"} |
ForEach-Object {
New-Object -TypeName PSObject -Prop @{"ID"=[int]$_.Substring(30,5); `
"Title"=$_.Substring(157)}
}
$cmds
答案 2 :(得分:0)
$ Process = Get-CimInstance CIM_Process -CimSession $ Ses | Where-Object {$ ProcessNames-包含$ _。Name}
使用此方法,您还可以获得ProcessID和ParentProcessID。 然后,您可以使用类似的命令来查找使用主脚本的ParentProcessID的CMD进程。 您必须同时关闭脚本的主要过程和命令提示符,否则脚本将继续运行。