wmic, зависающий на удаленном сервере?

На основе информации от моего предыдущего вопроса я пытаюсь изучить wmic.

Я играю вокруг с попыткой посмотреть, какие процессы используют большинство ресурсов на удаленном сервере. То, что мне удалось придумать, около нижней части этого сообщения. Это работает очень хорошо над моей локальной машиной, но когда я psexec в сервер (Windows 2003 или 2008) и попытка выполнить эту команду, это зависает почти каждый раз. Я не могу даже ctrl+c, чтобы заставить это останавливаться. Я использовал RDP (использующий другое имя пользователя) для вхождения в одну из машин, где эта команда зависает. Имя пользователя, которое отправляет команду от psexec, показывает два объекта, перечисленные в Диспетчере задач, cmd и wmic. Они остались в Диспетчере задач спустя несколько часов после отправки команды. Когда я заканчиваю их, это освобождает мою консоль на моей локальной машине.

Я попытался искать причины, которые это могло бы подвешивать, и я ничего не могу найти. Я также спросил одного из своих системных администраторов, но те парни всегда слишком заняты для помощи непритязательному парню NOC (законно, все же. Они действительно очень заняты). Какие-либо идеи относительно того, что могло бы идти не так, как надо?

wmic path win32_perfformatteddata_perfproc_process where (PercentProcessorTime != 0) get Name, PercentProcessorTime, IDProcess
1
задан 6 July 2014 в 20:29
1 ответ

Я бы настоятельно рекомендовал отойти от WMIC.EXE и вместо этого использовать PowerShell. PowerShell позволяет использовать RPC для доступа к WMI интерфейсу удаленного сервера, что исключает необходимость использования PsExec. Хотя PsExec является полезным инструментом, я бы использовал его только в случае крайней необходимости, поскольку он создает службу на удаленном сервере, затем вновь созданная удаленная служба порождает процесс выполнения вашего кода, и затем служба должна автоматически удаляться. Однако я сталкивался с серверами, на которых не работали службы PsExec, и многочисленными осиротевшими процессами, которые по той или иной причине терпели неудачу. Итак, с моим проповедью, вот эквивалент использования PowerShell:

Get-WmiObject -ComputerName "<REMOTE-SERVER-NAME>" -class Win32_PerfFormattedData_PerfProc_Process -Impersonation Impersonate -Filter "PercentProcessorTime != 0 and name != '_Total'" | Select-Object name, PercentProcessorTime, IDProcess
3
ответ дан 3 December 2019 в 18:45

Теги

Похожие вопросы