Получить список процессов, таких же, как в диспетчере задач в консоли powershell. Powershell список процессов
powershell - Получить список процессов, таких же, как в диспетчере задач в консоли powershell
Во-первых, вам нужно использовать данные из одного использования Get-WMIObject (gwmi).
Когда вы выполняете несколько вызовов с использованием GWMI, вы каждый раз выполняете другой снимок данных и используете для каждого свойства другой образец. В итоге вы получите таблицу с данными о кубистской картине Пикассо... она не будет выровнять или представить весь список. Кроме того, требуется много времени для повторного захвата списка процессов, а затем захватить только одно свойство из каждого другого списка, поэтому стоит потратить время на изменение одного набора данных, особенно если вы в конечном итоге перепрограммируете свой скрипт в массивном сценарии удаленных операций, который компилирует базу данных задач.
Существуют различные способы захвата только тех свойств, которые вы хотите в виде пользовательских объектов PS. Я использую хэш-таблицы, чтобы сделать код коротким и легким, и сделать код efficient--. Вы уже выполнили вербальную запись, которую вы сделали бы для хеш-таблицы, в форме:
Поэтому вместо этого просто сделайте
$taskProps = @{ 'SID'=$task.SessionId 'Name'=$task.ProcessName 'PID'=$task.ProcessId # add more properties here. }Вместо того, чтобы создавать пустой пользовательский объект, а затем "писать" ему несколько раз с
$obj = new-object psobject $obj | add-member noteproperty "PID" ($PIDN) $obj | add-member noteproperty "NAME" ($NAME) $obj | add-member noteproperty "OWNER" ($OWNER) $obj | add-member noteproperty "PATH" ($PATH) $obj | add-member noteproperty "Command Line" ($CMD) $obj | Add-Member noteproperty "SessionID" ($SESSIONID) $obj | Add-Member noteproperty "CPU" ($CPU) $obj | Add-Member noteproperty "WorkingSet64" ($WORKINGSET64) $obj | Add-Member noteproperty "Peak Working Set64" ($PEAKWORKINGSET64) $obj | Add-Member noteproperty "HANDLES" ($HANDLES) $obj | Add-Member noteproperty "THREADS" ($THREADS) $obj | Add-Member noteproperty "DESCRIPTION" ($DESCRIPTION)Затем сохраните его в arraylist с
$taskList += $taskObjectВы можете увидеть мой пример здесь:
# Generates a collection of "System.Management.ManagementObject#root\cimv2\Win32_Process" # Only do this once. Every time gwmi is used, it makes another RPC call if used remotely. # If you do multiple GWMIs you'll be working with differing data samples. $taskSnapshot = Get-WMIObject -ComputerName [machine name] -Class Win32_Process # Initialize, nullify, and declare your list as an empty ArrayList. $taskList = @() # Begin formatting in prep of Format-Table or similar usage # This is where you'd define each property you want to see, manipulation, etc. foreach ($task in $taskSnapshot){ # Create the hash table which will temporarily store all information for each task naming/assigning only # properties you want to display. $taskProps = @{ 'SID'=$task.SessionId 'Name'=$task.ProcessName 'PID'=$task.ProcessId # additional properties here. } # "Packages" the new custom object in a variable that stores the object $taskObject = New-Object -TypeName PSObject -Property $taskProps # append (addition) operation on formerly defined arraylist to store # the packaged object to an arraylist. $taskList += $taskObject } # Displays the list of task "objects" in a table, other formatting options are available online. $taskList | Format-Table -AutoSizehttps://technet.microsoft.com/en-us/library/dd347677.aspx
Windows PowerShell: много способов для пользовательского объекта:
https://technet.microsoft.com/en-us/magazine/hh750381.aspx
Я также рекомендовал бы проверить Out-GridView, поскольку он создаст таблицу GUI данных, которые вы можете изменить и легко щелкнуть.
Важная часть - использовать GWMI один раз. Лучше практиковать захват необработанной информации в одной переменной, а затем выполнять операции Select-String/where/if/манипуляции и форматирования в наборе данных в вашем предложении foreach.
Вот чистая копия примера с моими избранными псевдонимами.
Еще одна вещь, которую кто-то упомянул, - это свойства минимального/максимального рабочего набора...
Вы можете просмотреть все свойства Win32_Process, выполнив
Get-WMIObject -Class Win32_Process | Get-Memberили
gwmi -cl win32_process | gmqaru.site
Получить список процессов так же, как в диспетчере задач в консоли Powershell
Во-первых, вам нужно использовать данные из одного использования Get-WmiObject (Gwmi) ,
Когда вы выполняете несколько вызовов с использованием GWMI, вы каждый раз делаете другой снимок данных и используете для каждого свойства другой образец. В итоге вы получите таблицу с данными о кубистской картине Пикассо ... она не будет выровнять или представить весь список. Также требуется намного больше времени, чтобы снова и снова перехватывать список процессов, а затем захватывать только одно свойство из каждого списка, поэтому стоит потратить время на изменение одного набора данных, особенно если вы в конечном итоге перепрофилируете ваш скрипт в массивном удаленном сценарии операций, который компилирует базу данных задач.
Существуют различные способы захвата только тех свойств, которые вы хотите в виде пользовательских объектов PS.Я использую хэш-таблицы, чтобы сделать код коротким и легким, и сделать код efficient-- Вы уже выполнили verbage вы сделали бы для хэш-таблицы, в виде:
$CPU = $Process.CPU $WORKINGSET64 = $Process.WorkingSet64 $PEAKWORKINGSET64 = $Process.PeakWorkingSet64 $THREADS = $Process.Threads.Count $HANDLES = $Process.Handles $DESCRIPTION = $Process.DescriptionТак вместо этого, просто
$taskProps = @{ 'SID'=$task.SessionId 'Name'=$task.ProcessName 'PID'=$task.ProcessId # add more properties here. }и вместо того, чтобы создать пустой пользовательский объект и затем «писать» на него несколько раз с
$obj = new-object psobject $obj | add-member noteproperty "PID" ($PIDN) $obj | add-member noteproperty "NAME" ($NAME) $obj | add-member noteproperty "OWNER" ($OWNER) $obj | add-member noteproperty "PATH" ($PATH) $obj | add-member noteproperty "Command Line" ($CMD) $obj | Add-Member noteproperty "SessionID" ($SESSIONID) $obj | Add-Member noteproperty "CPU" ($CPU) $obj | Add-Member noteproperty "WorkingSet64" ($WORKINGSET64) $obj | Add-Member noteproperty "Peak Working Set64" ($PEAKWORKINGSET64) $obj | Add-Member noteproperty "HANDLES" ($HANDLES) $obj | Add-Member noteproperty "THREADS" ($THREADS) $obj | Add-Member noteproperty "DESCRIPTION" ($DESCRIPTION)Затем сохранить его в ArrayList с
$taskList += $taskObjectВы можете увидеть мой пример здесь:
# Generates a collection of "System.Management.ManagementObject#root\cimv2\Win32_Process" # Only do this once. Every time gwmi is used, it makes another RPC call if used remotely. # If you do multiple GWMIs you'll be working with differing data samples. $taskSnapshot = Get-WMIObject -ComputerName [machine name] -Class Win32_Process # Initialize, nullify, and declare your list as an empty ArrayList. $taskList = @() # Begin formatting in prep of Format-Table or similar usage # This is where you'd define each property you want to see, manipulation, etc. foreach ($task in $taskSnapshot){ # Create the hash table which will temporarily store all information for each task naming/assigning only # properties you want to display. $taskProps = @{ 'SID'=$task.SessionId 'Name'=$task.ProcessName 'PID'=$task.ProcessId # additional properties here. } # "Packages" the new custom object in a variable that stores the object $taskObject = New-Object -TypeName PSObject -Property $taskProps # append (addition) operation on formerly defined arraylist to store # the packaged object to an arraylist. $taskList += $taskObject } # Displays the list of task "objects" in a table, other formatting options are available online. $taskList | Format-Table -AutoSizehttps://technet.microsoft.com/en-us/library/dd347677.aspx
Windows PowerShell: множество способов пользовательского объекта:
https://technet.microsoft.com/en-us/magazine/hh750381.aspx
Я также рекомендовал бы проверить Out-GridView, как она будет создавать GUI таблицу данных который вы можете изменить и легко щелкнуть.
Важной частью является использование GWMI один раз. Лучше практиковать захват необработанной информации в одной переменной, а затем выполнять операции Select-String/where/if/ман
stackoverrun.com
Получение дерева процессов в PowerShell
Получение дерева процессов в PowerShell
Август 9, 2011 Автор: Kazun
Многим, думаю, знакома утилита — tree,которая отображает графическую структуру папок. По умолчанию в PowerShell нет, командлета с таким функционалом. Но его можно найти в прекрасном модуле для PowerShell — PSCX (http://pscx.codeplex.com/) реализованном в виде функции.
После установки и импорта данного модуля,вы можете посмотреть весь набор команд,который предлагает данный модуль:
PS > Get-Command -Module PSCXНам же интересна функция — Show-Tree,исходный код функции можно посмотреть с помощью:
PS > ${function:Show-Tree}Пример работы:
PS > Show-Tree C:\windows C:\windows |--1C4551A64743409391E41477CD655043.TMP | \--WiseCustomCalla.dll |--45235788142C44BE8A4DDDE9A84492E5.TMP | \--WiseCustomCalla.dll |--8AAB4176A747493AA42CB63CFADFD8E3.TMP | \--WiseCustomCalla.dll |--ADAM | |--en | | \--ADSchemaAnalyzer.resources.dll | |--en-US | | |--adaminstall.exe.mui | | |--adammsg.dll.mui | | |--adamsync.exe.mui | | |--adamuninstall.exe.mui | | \--adamwizard.dll.mui | |--ru | | \--ADSchemaAnalyzer.resources.dll | |--ru-RU | | |--adaminstall.exe.mui | | |--adammsg.dll.mui | | |--adamsync.exe.mui | | |--adamuninstall.exe.mui | | \--adamwizard.dll.mui | |--adaminstall.exeМне же потребовалось получить подобный вывод,но только для процессов.Перед собой я не ставил задачи:получения информации с удаленного компьютера, ограничение глубины отображения и т.д.Но вы легко можетедобавить подобный функционал.
Function Show-ProcessTree { Function Get-ProcessChildren($P,$Depth=1) { $procs | Where-Object {$_.ParentProcessId -eq $p.ProcessID -and $_.ParentProcessId -ne 0} | ForEach-Object { "{0}|--{1}" -f (" "*3*$Depth),$_.Name Get-ProcessChildren $_ (++$Depth) $Depth-- } } #Фильтр для Where-Object $filter = {-not (Get-Process -Id $_.ParentProcessId -ErrorAction SilentlyContinue) -or $_.ParentProcessId -eq 0} #Получаем список процессов $procs = Get-WmiObject Win32_Process #ПолучаемИБ по частям: Powershell. Контролируем сетевую активность.
Приветствую, уважаемый читатель! Хотел бы сегодня поделится опытом решения следующей задачи: запрет соединения с ресурсами сети Интернет, при установлении соединения с конкретным IP-адресом. Не скажу, что данная задача является типовой и очень востребованной, но процесс её решения заставил придумывать нестандартные ходы. Будут освещены вопросы архитектуры скрипта, который сможет выполнять данную задачу, и показаны примеры работы с брандмауэром Windows из powershell. Кто заинтересовался, прошу ниже. Начнем с постановки задачи и описания последовательности действий. Предположим, что соединение с указанным IP-адресом происходит с использованием специального программного обеспечения. Задача: Контроль сетевой активности Windows-машины, с целью выявления конкретного TCP-соединения с указанным IP-адресом и блокирование всех остальных соединений. Как только соединение с конкретным адресом прекратилось, блокировка остальных соединений должна сниматься. Средство реализации задачи: Учитывая, что в последнее время мне крайне полюбился powershell, программное обеспечение решающее данную задачу будет реализовано на нём. Исходя из постановки задачи понятно, что скрипт на powershell должен выполняться в операционной системе с определённой периодичностью. Обобщённый алгоритм работы: Скрипт просматривает список всех установленных соединений в системе, с целью поиска интересующего. После нахождения такого соединения, скрипт разрывает все остальные соединения, кроме интересующего. После окончания работы с указанным IP-адресом обычная работа пользователя с ресурсами сети Интернет восстанавливается. Теперь, последовательность действий.- Получение списка всех текущих TCP-соединений, с указанием приложения их создавшего, и поиск нужного соединения.
- Определение списка приложений, которым мы запрещаем сетевую активность и добавляем запрещающие правила брандмауера.
- Отмена запрещающих правил после окончания конкретного соединения.
- Настройка скрипта на постоянное выполнение.
- Добавить запуск скрипта в планировщик заданий и настройка периодичности запуска. Прочитать поподробнее про это можно тут - http://windowsnotes.ru/powershell-2/zapusk-powershell-skripta-po-raspisaniyu/
- Добавить в скрипте бесконечный цикл и постоянно выполнять код с использованием командлета Start-Sleep. Учитывая, что нам нужно запускать скрипт каждые 5-10 секунд, этот вариант вполне подходит
На этом пока всё, может кому пригодится.
unitybas.blogspot.com
powershell - Проверка состояния процесса и процесса в PowerShell версии 2 и получение двух разных выходов в зависимости от одного процесса или нескольких процессов?
Вот код, который я использую:
$ProcessesToCheckFor = ( 'company_name_uat-Historian' ) $FoundProcesses = Get-Process -Name $ProcessesToCheckFor -ErrorAction SilentlyContinue foreach ($Item in $ProcessesToCheckFor) { if ($FoundProcesses.Name -contains $Item) { '{0} runn1ng' -f $Item } else { '{0} fai1ed' -f $Item } }Код проверяет, работает ли процесс company_name_uat-Historian на сервере, и если он запущен, он выведет runn1ng и fai1ed, если нет.
Проблема в том, что она работает, проверяя только один процесс, как и код выше, но не при попытке проверить список процессов.
Мне нужно проверить список процессов, поэтому, когда я связываю остальные, как указано ниже:
$ProcessesToCheckFor = ( 'company_name_uat-Historian', 'company_name_uat-KEReviewCollector', 'company_name_uat-lwm', 'company_name_uat-MQAck', 'company_name_uat-MQOutput', 'company_name_uat-SQAC', 'company_name_uat-Store', 'company_name_uat-Store_STS', 'company_name_uat-StoreLegacy', 'spotify' ) $FoundProcesses = Get-Process -Name $ProcessesToCheckFor -ErrorAction SilentlyContinue foreach ($Item in $ProcessesToCheckFor) { if ($FoundProcesses.Name -contains $Item) { '{0} runn1ng' -f $Item } else { '{0} fai1ed' -f $Item }Все они выводят fai1ed.
Если я делаю их один за другим, каждый другой процесс вернет runn1ng, а все сгруппированные вместе возвратятся fai1ed.
Боковые заметки (если кому интересно):
- runn1ng и fai1ed являются "кодовыми словами", которые заменяются изображениями с использованием JavaScript. Я делаю панель управления HTML, которая контролирует мои серверы Windows для работы, поэтому используйте зеленые галочки и красные значки x, а что нет.
- Использование версии PowerShell 2 не является моим выбором, некоторые из серверов, на которых я отвечаю за мониторинг, - это Windows 2008 R2. Я считаю, что они будут обновляться в этом году, но для выполнения проекта мне необходимо немедленно принять решение о мониторинге. Есть также некоторые серверы, которые в 2012 году я люблю писать сценарии PowerShell для.
- spotify указан как процесс, потому что я знаю, что это законный процесс, но не установлен на наших серверах. Когда я писал script, я сначала тестировал свою личную машину и использовал spotify как средство для тестирования runn1ng, если я открыл его или fai1ed, если бы я его закрыл. Если все мои процессы runn1ng, а spotify - fai1ed, то это указывает на то, что код PS работает.
Это похоже на версию PowerShell версии 2.
Любые идеи, что вызывает его и как я могу его переписать?
qaru.site
Общие сведения о рабочем процессе Windows PowerShell
- 06/20/2016
- Время чтения: 5 мин
В этой статье
Применимо к:Windows Server 2012, Windows Server 2012 R2
ИТ-специалисты и разработчики часто автоматизируют управление своими системами из нескольких компьютеров, используя последовательности длительно выполняемых задач или рабочих процессов, которые могут воздействовать на множество управляемых компьютеров или устройств одновременно. Рабочий процесс Windows PowerShell дает возможность ИТ-специалистам и разработчикам воспользоваться преимуществами Windows Workflow Foundation с функциями автоматизации Windows PowerShell. Функциональные возможности рабочего процесса Windows PowerShell были представлены в Windows Server® 2012 и Windows 8 и входят в состав Windows PowerShell 3.0 и более поздних выпусков Windows PowerShell. Рабочий процесс Windows PowerShell помогает автоматизировать распределение, управление и выполнение задач на нескольких компьютерах, что освобождает пользователей и администраторов для работы над задачами более высокого уровня.
Windows PowerShell, впервые появившаяся в Windows Vista и Windows Server 2008, объединяет распределенный механизм автоматизации, оболочку командной строки и язык сценариев на платформе Microsoft® .NET Framework. Она предназначена специально для автоматизации управления Windows.
Рабочий процесс Windows PowerShell — это ключевой компонент Windows PowerShell 3.0 и Windows PowerShell 4.0. Дополнительные сведения о Windows PowerShell см. в разделе Новые возможности Windows PowerShell.
Содержание:
Обзор рабочего процесса Windows PowerShell
Отличия между сценариями Windows PowerShell и рабочими процессами Windows PowerShell
Создание и импорт рабочих процессов с помощью конструктора рабочих процессов Visual Studio
Обзор рабочего процесса Windows PowerShell
Рабочий процесс — это последовательность связанных программируемых операций, в ходе которых выполняются длительные задачи или скоординированные действия на нескольких устройствах или управляемых узлах. Рабочий процесс Windows PowerShell позволяет ИТ-специалистам и разработчикам создавать в качестве рабочих процессов последовательности действий управления несколькими устройствами или отдельные задачи в рамках рабочего процесса. Рабочие процессы могут быть длительными, повторяющимися, часто используемыми, параллельными, прерываемыми, останавливаемыми и перезапускаемыми. Их можно приостанавливать и возобновлять. Они также могут продолжаться после непредвиденных сбоев, например сбоя сети или перезагрузки компьютера.
Рабочие процессы Windows PowerShell можно создать или определить с использованием синтаксиса Windows PowerShell или XAML-файлов. Дополнительные сведения о создании рабочего процесса Windows PowerShell на основе сценария см. в разделе Создание рабочего процесса сценария. Дополнительные сведения о рабочих процессах на основе XAML см. в разделе Создание и импорт рабочих процессов с помощью конструктора рабочих процессов Visual Studio далее.
Благодаря функции RunAs в Windows PowerShell настраиваемые конфигурации сеансов позволяют ИТ-специалистам запускать рабочие процессы или действия внутри рабочего процесса с делегированными или подчиненными правами.
Действия
Действие — это конкретная задача, которую должен выполнить рабочий процесс. Так же, как сценарий состоит из одной или нескольких команд, рабочий процесс состоит из одного или нескольких действий, выполняемых в определенной последовательности. Сценарий можно также использовать как одну команду в другом сценарии, а рабочий процесс можно использовать как действие в другом рабочем процессе.
Преимущества рабочего процесса Windows PowerShell
В представленном ниже списке перечислены преимущества рабочего процесса Windows PowerShell.
Использование синтаксиса сценариевWindows PowerShell
ИТ-специалисты могут использовать навыки написания сценариев Windows PowerShell для создания процессов на основе сценариев с использованием расширяемого языка Windows PowerShell. Рабочие процессы на основе сценария Windows PowerShell легки в написании и могут совместно использоваться путем их вставки в сообщение электронной почты или публикации на веб-страницах.
Управление несколькими устройствами
Задачи рабочего процесса можно применить одновременно для сотен управляемых узлов. Рабочий процесс Windows PowerShell автоматически добавляет общие параметры в рабочие процессы, такие как PSComputerName, чтобы разрешить использование сценариев управления несколькими устройствами. Дополнительные сведения о параметрах, которые зарезервированы для рабочих процессов, см. в разделе "Зарезервированные слова в рабочих процессах" в Справочные разделы по созданию рабочего процесса.
Выполнение одной задачи для управления сложными комплексными процессами
Связанные сценарии или команды, реализующие весь сквозной сценарий, можно скомбинировать в одном рабочем процессе. Состояние и ход выполнения действий в рамках рабочего процесса можно наблюдать в любое время.
Автоматическое восстановление после сбоя
Рабочий процесс подвергается как запланированным, так и незапланированным прерываниям, таким как перезагрузки компьютеров. Выполнение рабочего процесса можно приостановить, а затем перезапустить или возобновить процесс с точки, в которой он был приостановлен. В ходе рабочего процесса можно создавать контрольные точки, чтобы возобновлять рабочий процесс с последней сохраненной задачи (или контрольной точки), а не перезапускать рабочий процесс сначала.
Повторные попытки подключения и выполнения действий
С помощью общих параметров рабочих процессов пользователи могут повторять подключения к управляемым узлам в случае сбоя сетевого подключения. Разработчики рабочих процессов также могут указывать действия, которые необходимо выполнить снова, если действие не может быть завершено на одном или нескольких управляемых узлах (например, если целевой компьютер находился в автономном режиме во время выполнения действия).
Подключение и отключение
Пользователи могут подключаться и отключаться от компьютера, на котором выполняется рабочий процесс, в то время как сам процесс продолжает выполняться. Например, если при выполнении рабочего процесса вы управляете им с двух различных компьютеров, можно выйти из системы или перезагрузить компьютер, на котором вы управляете процессом, и отслеживать операции рабочего процесса с другого компьютера (например, с домашнего) без прерывания процесса.
Расписание задач
Задачи рабочего процесса, как и любой другой командлет или сценарий Windows PowerShell, могут быть запланированы и выполнены при выполнении заданных условий.
Отличия между сценариями Windows PowerShell и рабочими процессами Windows PowerShell
В сценарии все команды выполняются в одном пространстве выполнения, при этом операционная среда определяет, какие команды, переменные и другие элементы доступны. В рабочем процессе каждое действие можно запускать в разных пространствах выполнения. Переменные, созданные на верхнем уровне рабочего процесса, доступны для всего рабочего процесса. Если они создаются на уровне сценария или команды, они доступны для команды или сценария, но не для всего рабочего процесса.
В общем случае следует использовать рабочий процесс вместо командлета или сценария, если необходимо выполнить одно из следующих требований.
Необходимо выполнить длительную задачу, которая объединяет несколько шагов в последовательности.
Необходимо выполнить задачу, которая выполняется на нескольких устройствах.
Необходимо выполнить задачу, для которой требуются контрольные точки или сохраняемость.
Необходимо выполнить длительную, асинхронную, перезапускаемую, выполняемую параллельно или прерываемую задачу.
Необходимо выполнить задачу в масштабируемой среде или среде с высокой доступностью, для чего может потребоваться регулирование и объединение соединений в пул.
Создание и импорт рабочих процессов с помощью конструктора рабочих процессов Visual Studio
Помимо создания рабочих процессов, использующих сценарии Windows PowerShell, их также можно создавать в конструкторе рабочих процессов Visual Studio. Рабочие процессы, создаваемые в конструкторе рабочих процессов Visual Studio, имеют расширение имени файла XAML. Рабочие процессы, созданные в конструкторе рабочих процессов, можно вызывать и импортировать в рабочие процессы Windows PowerShell. Вы можете предоставлять командлеты Windows PowerShell в качестве действий в конструкторе рабочих процессов.
Дополнительные сведения о создании рабочих процессов в конструкторе рабочих процессов Visual Studio см. в разделе Использование конструктора рабочих процессов в документации по Visual Studio на сайте MSDN.
Действия рабочих процессов Windows PowerShell в конструкторе рабочих процессов Visual Studio
Windows PowerShell включает встроенные действия для большинства командлетов Windows PowerShell. Эти действия упакованы в сборки, имена которых соответствуют имени модуля Windows PowerShell, содержащего командлеты. Ниже приведен список сборок действий Windows PowerShell, установленных в глобальном кэше сборок.
Microsoft.PowerShell.Activities
Microsoft.PowerShell.Core.Activities
Microsoft.PowerShell.Diagnostics.Activities
Microsoft.PowerShell.Management.Activities
Microsoft.PowerShell.Security.Activities
Microsoft.PowerShell.Utility.Activities
Microsoft.WSMan.Management.Activities
Дополнительные сведения о добавлении действия на панель элементов из сборки см. в статье Как добавить действия в область элементов.
См. также
Настройка среды рабочего процессаВыполнение рабочего процесса Windows PowerShellСоздание рабочего процесса сценарияНовые возможности Windows Workflow Foundation 4.0about_Jobsabout_Workflow_Common_Parametersabout_Workflows
technet.microsoft.com
Управление процессами с помощью командлетов процессов
Командлеты с существительным Process можно использовать в Windows PowerShell для управления локальными и удаленными процессами.
Для получения списка процессов локального компьютера запустите командлет Get-Process без параметров.
Для получения конкретных процессов можно указывать имена или ИД этих процессов. Следующая команда возвращает процесс Idle.
PS> Get-Process -id 0 Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 0 0 0 16 0 0 IdleНесмотря на то что для командлетов является обычным не возвращать данные в некоторых ситуациях, при задании процесса через ProcessId командлет Get-Process возвращает ошибку при отсутствии совпадений, потому что предполагается получение известного выполняемого процесса. Если процесс с указанным идентификатором не найден, вполне вероятно, что идентификатор задан неверно или искомый процесс был завершен.
PS> Get-Process -Id 99 Get-Process : No process with process ID 99 was found. At line:1 char:12 + Get-Process <<<< -Id 99Параметр Name командлета Get-Process позволяет задать подмножество процессов по имени процесса. Параметр Name поддерживает использование нескольких имен, разделенных запятой, и подстановочных знаков, позволяя вводить шаблоны имен:
Например, следующая команда возвращает все процессы с именем, начинающимся с "ex".
PS> Get-Process -Name ex* Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 234 7 5572 12484 134 2.98 1684 EXCEL 555 15 34500 12384 134 105.25 728 explorerПоскольку класс .NET System.Diagnostics.Process лежит в основе процессов Windows PowerShell, он следует соглашениям, которые используются процессом System.Diagnostics.Process. Одно из этих соглашений заключается в том, что имя процесса исполняемого файла никогда не включает расширение ".exe" в конце имени исполняемого файла.
Командлет Get-Process позволяет указывать несколько значений параметра Name.
PS> Get-Process -Name exp*,power* Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 540 15 35172 48148 141 88.44 408 explorer 605 9 30668 29800 155 7.11 3052 powershellПараметр ComputerName командлета Get-Process можно использовать для получения процессов с удаленных компьютеров. Например, следующая команда позволяет получить процессы PowerShell с локального компьютера ("localhost") и двух удаленных компьютеров.
PS> Get-Process -Name PowerShell -ComputerName localhost, Server01, Server02 Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 258 8 29772 38636 130 3700 powershell 398 24 75988 76800 572 5816 powershell 605 9 30668 29800 155 7.11 3052 powershellЗдесь имена компьютеров неочевидны, но хранятся в свойстве MachineName объектов процессов, выводимых Get-Process. В следующем примере командлет Format-Table используется для вывода свойств process ID, ProcessName и MachineName (ComputerName) объектов процессов.
PS> Get-Process -Name PowerShell -ComputerName localhost, Server01, Server01 | Format-Table -Property ID, ProcessName, MachineName Id ProcessName MachineName -- ----------- ----------- 3700 powershell Server01 3052 powershell Server02 5816 powershell localhostЭта более сложная команда добавляет свойство MachineName в стандартный вывод Get-Process. Символ (`)(ASCII 96) в Windows PowerShell является знаком продолжения строки.
get-process powershell -computername localhost, Server01, Server02 | format-table -property Handles, ` @{Label="NPM(K)";Expression={[int]($_.NPM/1024)}}, ` @{Label="PM(K)";Expression={[int]($_.PM/1024)}}, ` @{Label="WS(K)";Expression={[int]($_.WS/1024)}}, ` @{Label="VM(M)";Expression={[int]($_.VM/1MB)}}, ` @{Label="CPU(s)";Expression={if ($_.CPU -ne $()` {$_.CPU.ToString("N")}}}, ` Id, ProcessName, MachineName -auto Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName MachineName ------- ------ ----- ----- ----- ------ -- ----------- ----------- 258 8 29772 38636 130 3700 powershell Server01 398 24 75988 76800 572 5816 powershell localhost 605 9 30668 29800 155 7.11 3052 powershell Server02Оболочка Windows PowerShell предоставляет различные способы получить список процессов. Каким же образом процессы можно останавливать?
Командлету Stop-Process передается имя (свойство Name) или идентификатор (Id), определяющие процесс, который требуется остановить. Возможность остановки процесса зависит от имеющихся у пользователя разрешений. Некоторые процессы не могут быть остановлены. Например, при попытке остановить процесс бездействия системы, будет получена ошибка:
PS> Stop-Process -Name Idle Stop-Process : Process 'Idle (0)' cannot be stopped due to the following error: Access is denied At line:1 char:13 + Stop-Process <<<< -Name IdleС помощью параметра Confirm можно установить запрос подтверждения. Этот параметр особенно полезен в тех случаях, когда при указании имени процесса используется подстановочный знак: пользователь может случайно остановить некоторые процессы с похожим именем, которые останавливать не надо.
PS> Stop-Process -Name t*,e* -Confirm Confirm Are you sure you want to perform this action? Performing operation "Stop-Process" on Target "explorer (408)". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):n Confirm Are you sure you want to perform this action? Performing operation "Stop-Process" on Target "taskmgr (4072)". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):nСложные действия с процессами выполняются с помощью нескольких командлетов фильтрации объектов. У объекта Process имеется свойство Responding, принимающее значение "TRUE", если объект не реагирует на запросы. Все неотвечающие приложения можно остановить следующей командой:
Get-Process | Where-Object -FilterScript {$_.Responding -eq $false} | Stop-ProcessТот же подход можно использовать и в других ситуациях. Допустим, приложение вспомогательной области уведомления автоматически вызывается, когда пользователь запускает другое приложение. В сеансах службы терминалов это работает неверно, но требуется, чтобы работа сеансов продолжалась на физической консоли компьютера. Сеансы, подключенные к физическому настольному компьютеру, всегда определяются идентификатором сеанса 0, поэтому все экземпляры процесса, принадлежащие другим сеансам, можно остановить с помощью командлета Where-Object и процесса SessionId:
Get-Process -Name BadApp | Where-Object -FilterScript {$_.SessionId -neq 0} | Stop-ProcessВ командлете Stop-Process не предусмотрен параметр ComputerName. Поэтому для остановки службы на удаленном компьютере следует использовать командлет Invoke-Command. Например, для остановки процесса PowerShell на удаленном компьютере Server01 введите:
Invoke-Command -ComputerName Server01 {Stop-Process Powershell}Иногда становится необходимым остановить все запущенные сеансы Windows PowerShell, кроме текущего. Если в сеансе используется слишком много ресурсов или он недоступен (выполняется удаленно или в другом сеансе рабочего стола), то остановить его напрямую невозможно. Однако при попытке остановить все выполняемые сеансы текущий сеанс может быть просто завершен.
У каждого сеанса Windows PowerShell имеется переменная среды, PID, в которой содержится идентификатор процесса Windows PowerShell. Переменную $PID можно сверять с идентификаторами каждого сеанса и останавливать только сеансы Windows PowerShell с другим ИД. Приведенная ниже команда конвейера выполняет эту задачу и выводит список остановленных сеансов (поскольку используется параметр PassThru):
PS> Get-Process -Name powershell | Where-Object -FilterScript {$_.Id -ne $PID} | Stop-Process - PassThru Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 334 9 23348 29136 143 1.03 388 powershell 304 9 23152 29040 143 1.03 632 powershell 302 9 20916 26804 143 1.03 1116 powershell 335 9 25656 31412 143 1.09 3452 powershell 303 9 23156 29044 143 1.05 3608 powershell 287 9 21044 26928 143 1.02 3672 powershellВ комплект Windows PowerShell также входят командлеты для запуска (перезапуска) процессов, отладки процессов и ожидания выполнения процессов перед запуском команды. Информацию об этих командлетах можно получить в разделах справки о конкретных командлетах.
winintro.ru