1

我正在尝试编写一个脚本来远程终止特定的命令提示符进程。如果我在本地运行 get-process,我可以看到 CMD.exe 进程可以通过“MainWindowTitle”字段中设置的内容来缩小范围

如果我使用 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
4

3 回答 3

1

摘自MSDN

仅当进程具有图形界面时,进程才具有与之关联的主窗口。如果关联进程没有主窗口(因此 MainWindowHandle 为零),则 MainWindowTitle 为空字符串 ("")。

更多信息在这里

我试图与其他进程进行比较,但结果是一样的......

于 2018-10-16T13:41:28.207 回答
0

$Process = Get-CimInstance CIM_Process -CimSession $Ses | Where-Object{ $ProcessNames -包含 $_.Name }

使用它,您还可以获得 ProcessID 和 ParentProcessID。然后,您可以使用类似的命令来查找使用主脚本的 ParentProcessID 的 CMD 进程。您必须同时关闭脚本的主进程和命令提示符,否则脚本将继续运行。

于 2018-10-30T14:07:53.030 回答
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

在此处输入图像描述

于 2018-10-16T14:14:34.893 回答