2

Как я могу получить потребление ресурсов процессора для всех потоков, выполняющихся в процессе через PowerShell, в формате, подобном этомуПодробная информация о теме в Powershell

enter image description here

Я не могу найти любую информацию о процессоре когда Я бегу gwmi win32_thread|select -First 1. И Start Address является числовым!?!

+0

@Neolisk Это достижимо через Powershell? –

+0

@ShayLevy Любые идеи .... –

+0

@RRUZ Код в 'http: //stackoverflow.com/questions/10159516/get-thread-start-address? Answertab = active # tab-top' близок к тому, что я находясь в поиске. Но как я могу запустить его через Powershell и для удаленной машины. –

ответ

2

Ayan; Вы смотрели PowerDbg на Codeplex?

http://powerdbg.codeplex.com/

+0

Это позволяет вам управлять Windbg thhru Powershell. Нужно получить Procdump, чтобы получить детали потока для данного процесса. Я ищу, чтобы получить информацию о потоке вживую; из памяти машины. Также как Process Explorer. –

1

Не уверен, если это может быть сделано с помощью PowerShell из коробки, но так как вы предлагаете Баунти, я предлагаю смотреть на исходники от Process Hacker.

http://processhacker.sourceforge.net/

IIRC процесс хакером написан на C, и является полностью открытым исходным кодом.

Clear the windows 7 standby memory programmatically

+0

также я хотел бы упомянуть, что у меня не было успеха с Win32_Thread на W7, при тестировании из powershell или создателя кода wmi каждый запрос приводит к ошибке/сбою. то есть нет результатов –

+0

Здесь приведен фрагмент кода. http://stackoverflow.com/questions/10159516/get-thread-start-address?answertab=active#tab-top Однако я не смог запустить его. Можете ли вы сказать, есть ли способ запустить его из Powershell. Мне, вероятно, придется скомпилировать код. Хотя, я могу запустить 'gwmi win32_thread | select -First 1' ' StartAddress: 1415399312' Но я не знаю, как перевести начальный адрес на функции. –

+0

Я адмирал; развертывания, резервное копирование, кластеризация и визуализация. Я не мог, из исходного кода Process Hacker, выяснить, какая команда или функция отвечает за получение «Начального адреса» потока. Кусок кода, будь то что-нибудь, что я мог бы запустить с консоли Powershell, был бы очень полезен. –

2

Показаны те же детали, как Process Explorer

скриншоте вы предоставили, кажется, скриншот Process Explorer, а не диспетчер задач. Это усложняет ситуацию, потому что (если я правильно помню) Process Explorer использует драйвер ядра для получения подробной информации о системе, чтобы более точно учитывать время CPU, чем Windows. У меня нет книги под рукой, но это должно быть описано в Windows Sysinternals Administrator's Reference.

Преобразование начальных адресов для библиотек DLL и методов

Начальный адрес, как говорит название, адрес. Обычно это будет отображаться в шестнадцатеричном формате, но на самом деле это всего лишь число, поэтому оно может быть числовым в вашем случае. Преобразование в Hex не представляет проблемы.

Если вы хотите повернуть число во что-то полезное, как имя DLL и имя метода, вам нужно использовать символы. Смотрите на скриншоте: Process Explorer также должен загружать символы, иначе смещение рассчитывается с начала DLL (как в van.dll+1c904).

Для обработки символов Process Explorer использует Microsoft DLL под названием dbghelp.dll. Вы настроили это в Options/Configure symbols.... Вы можете использовать одну и ту же DLL, если хотите, но я бы сказал, что это тот момент, когда вы перестали использовать Powershell, потому что dbghelp.dll является родной DLL и не может использоваться .NET. Вы даже не можете создать сборку .NET interop в Visual Studio, потому что это не COM-библиотека.

Кроме того, Process Explorer применяет еще одно волшебство к отображаемому значению начального адреса: обычно начальный адрес всегда один и тот же: некоторый код Microsoft, который создает объект Thread, который затем вызывает конкретный код приложения. Process Explorer подбирает трассировку стека и отображает первый кадр, не относящийся к Microsoft, в стеке вызовов. Я не уверен, что адрес, измененный WMI, рассматривает одно и то же.

Если вы хотите дать dbghelp.dll a try, метод преобразования с адреса в DLL должен быть IDebugSymbols::GetNameByOffset().

Также обратите внимание, что преобразование с адреса на метод необходимо выполнить на удаленном компьютере, так как только удаленный компьютер будет знать, какая именно версия DLL загружена. Затем также учтите, что удаленная машина нуждается в доступе в Интернет для загрузки символов с сервера Microsoft.

Удаленное выполнение

В комментарии вы упомянули, что вы хотите, чтобы выполнить команду на удаленном компьютере. Process Explorer не поддерживает удаленные компьютеры. Хотя я не уверен в причинах, я предполагаю, что он сможет получить доступ к удаленному компьютеру через WMI и, следовательно, столкнуться с теми же ограничениями, что и вы.

Однако, есть alternatives to Process Explorer, discussed in the Process Explorer Forum. Они также, похоже, страдают от ограничений WMI, но вы можете попробовать. Кроме того, вы можете выполнять программы на удаленных машинах, используя SysInternals PsExec.

Общий вывод

Я предполагаю, что ожидаемое решение слишком сложна, чтобы ответить на StackOverflow, особенно если набор инструментов ограничен Powershell. Для доступа к удаленному компьютеру по крайней мере потребуется C++ для интеграции dbghelp.dll, а также PSExec.

+0

'Jagos' похоже уже понял это. http://processhacker.sourceforge.net/forums/viewtopic.php?f = 14 & t = 111 & sid = 4ab0a360c3bc9957ec102319dc5ef6ad Но я не могу реплицировать решение. Не могли бы вы попробовать. –

+0

Ни одна из этих альтернатив Process Explorer не имеет возможности отображать использование ЦП и «Начальный адрес» потока. –

Смежные вопросы