Вопрос: Ошибочный Tasklist.exe


В настоящее время я управляю системой Citrix-farm на базе Windows Server 2008R2. Раньше я использовал сценарий Powershell для проверки запуска пользовательских процессов и при необходимости перезапускал их.

Я использовал инструмент «tasklist.exe» с дополнительными параметрами, чтобы проверить, запущен ли определенный процесс при входе в систему. К сожалению, tasklist.exe перестали работать в течение нескольких дней. При перезапуске появляется сообщение об ошибке:

«Ошибка: не найден» или «Ошибка: недопустимый класс».

Поскольку серверы находятся в Германии, я перевел сообщение с немецкого на английский. На немецком сервере это называется

«Fehler: Nicht gefunden» и «Fehler: Ungultige Klasse».

Итак, я не уверен, правильно ли переведен на английский язык. В журнале событий нет журналов ошибок.

Поскольку это производственная система, никаких изменений, таких как обновления, нет и нет подключения к Интернету.

Возможно ли, что регистрация dll отсутствует? Я проверяю с «depend.exe» на все, что может быть не так, но я не могу определить разницу между рабочим сервером и нерабочим сервером.

Я также проверял, есть ли какие-либо ошибки при запуске «dcomcnfg», но все в порядке.

Свежая копия tasklist.exe с рабочего сервера не работала. Проблема не связана с самим exectuable.

Подсказка, предоставленная в эта ссылка был проверен с положительным результатом.

regsvr32% Windir% \ system32 \ wbem \ fastprox.dll

regsvr32% Windir% \ system32 \ wbem \ wbemprox.dll

regsvr32% Windir% \ system32 \ wbem \ wbemsvc.dll

Паттерн вирусов обновлен (McAfee VDS 8.8 + ASE 8.8).

Есть ли какие-либо предложения о том, как я могу снова запустить «tasklist.exe»? В качестве альтернативы, я хотел бы получить решение с командами Powershell, которые помогли бы восстановить функции «tasklist.exe» - это непростая задача, поскольку я не лучший скриптер. 

Заранее благодарим за помощь, подсказки или предложения!


Редактировать:

На самом деле проблема была связана с WMI. Подсказка от Райана Райса, чтобы проверить WMI с

«WBEMTEST»

при попытке подключения произошла аналогичная ошибка.

В этом случае я получил код ошибки, с которым я смог найти решение в Microsoft TechNet,

Сценарий, указанный на этой странице, не работал для меня, но команда

«Winmgmt / salvagerepository»

сделал.

Так что спасибо Райану за подсказку WMI и спасибо r.tanner.f за обход, если все остальное не сработает.


6
2017-08-16 09:29


Источник




Ответы:


Хотя может быть возможно использовать что-то еще помимо tasklist.exe, чтобы получить список запущенных процессов в системе, меня беспокоит, что tasklist.exe просто внезапно перестает работать. Это базовый, фундаментальный процесс в системе и тот факт, что он прекратил работать, может быть признаком повреждения данных или какой-то другой проблемой, которая может только ухудшиться.

Не пытаясь выяснить, что вызвало это, даже если вы можете обойти его, используя Powershell или WMIC или какой-либо другой исполняемый файл, похоже на то, чтобы накрыть индикатор «Проверить масло» на приборной панели вашего автомобиля с помощью электрической ленты. Это не означает, что основная проблема еще не существует.

Кроме того, похоже, что tasklist.exe использует WMI для получения информации, поэтому если tasklist.exe не работает, это может указывать на системную проблему с WMI на вашем компьютере, и поэтому использование других инструментов, которые полагаются на WMI, вероятно, не будет работайте ...

Вот как вы это устраняете. Получить Process Monitor от Sysinternals. Захват событий на рабочем компьютере и захват событий на нерабочем компьютере. Отфильтруйте файл tasklist.exe при запуске. Теперь поместите два файла трассировки рядом и посмотрите, где они отличаются. Какие события на рабочей машине возвращаются УСПЕХОМ, когда те же самые события на нерабочем компьютере возвращают NAME NOT FOUND или какой-либо другой код неуспеха?

Поскольку сообщение об ошибке вы упомянули недопустимый класс, я делаю ставки, которые происходят в разделах реестра HKCR\CLSID\{GUID}\, \HKLM\Software\Classes, и т. д., покажут определенные различия между двумя файлами трассировки.

Edit: Также, если вы хотите протестировать WMI, один из методов, который вы можете использовать, - это запустить wbemtest, Нажмите Connect..., и использовать root\cimv2 как пространство имен. Вы должны оставить все остальное пустым или по умолчанию. Затем нажмите кнопку, которая гласит: Query, и тип select * from win32_process как ваш запрос и нажмите Apply, Вы должны вернуть кучу допустимых обработчиков процессов и сообщений об ошибках.

Удачи...


4
2017-08-16 14:48



Осторожно: я разбил свои серверы XenApp с помощью Process Monitor. Не забудьте фильтровать то, что вы захватываете ... - Tanner Faulkner


Скорее всего, будет проще заменить использование tasklist.exe небольшим PowerShell, чем отслеживать, что пошло не так. Tasklist.exe. Посмотрите на ответ Райана Райса; он делает несколько замечаний о том, почему важно отслеживать это, и что WMI может быть сломан и предотвратить это от работы в любом случае (в этом случае у вас больше проблем). Для чего это стоит, мне нравится его ответ лучше.

Проверка процесса, выполняемого текущим пользователем, достаточно проста в PowerShell:

Get-WMIObject win32_process |
Where {$_.ProcessName -eq "foo.exe"} | 
ForEach-Object {$_.GetOwner()} | 
Where  {$_.User -eq [Environment]::Username}

Get-WMIObject очевидно, получает объект WMI, в этом случае win32_process. Труба, которая Where-Object и фильтровать все, что не соответствует foo.exe. Затем проведите через каждый объект и запустите GetOwner() метод. Наконец, отфильтруйте любое имя пользователя, не равное текущему пользователю.

Я добавляю возврат после того, как каналы читаются (также действительны в скрипте), но вы можете смириться с некоторыми псевдонимами и придерживаться одной строки:

gwmi win32_process | ?{$_.ProcessName -eq "smartclient.exe"} | %{$_.GetOwner()} | ?{$_.User -eq [Environment]::UserName}

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


3
2017-08-16 14:37



Активируйте свой ответ, потому что вы предложили обходной путь, который, в конце концов, если WMI не будет полностью нарушен в своей системе, OP может оказаться в вашем ответе, потому что он не может или не будет исправлять фактическую проблему. В любом случае, я думаю, что у ОП есть два достойных ответа на его вопрос. :) - Ryan Ries