Удаленное удаление только определенного процесса командной строки с помощью PowerShell - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь написать скрипт для удаленного уничтожения определенного процесса командной строки.Если я запускаю get-process локально, я вижу, что процесс CMD.exe можно сузить с помощью значения, заданного в поле «MainWindowTitle»

Если я получу имя-Get-Process -computer или получу 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

Ответы [ 3 ]

0 голосов
/ 16 октября 2018

Вы можете проанализировать вывод команды 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

enter image description here

0 голосов
/ 30 октября 2018

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

, используя это, вы также можете получить ProcessID и ParentProcessID.затем вы можете использовать аналогичные команды, чтобы затем найти процесс CMD, который использует ParentProcessID вашего основного сценария.Вы должны закрыть как основной процесс сценария, так и командную строку, иначе сценарий продолжит работу.

0 голосов
/ 16 октября 2018

Извлечено из MSDN :

Процесс имеет главное окно, связанное с ним, только если процесс имеет графический интерфейс.Если связанный процесс не имеет главного окна (так что MainWindowHandle равен нулю), MainWindowTitle является пустой строкой ("").

Дополнительная информация здесь .

Я пытался сравнить с другими процессами, но результат тот же ...

...