Обязательно прочитайте предыдущие статьи в серии:
- Узнайте, как автоматизировать Windows с помощью PowerShell
- Обучение использованию командлетов в PowerShell
- Обучение использованию объектов в PowerShell
- Форматирование, фильтрация и сравнение обучения в PowerShell
- Научитесь использовать Remoting в PowerShell
- Использование PowerShell для получения информации о компьютере
И оставайтесь настроенными для остальной части серии всю неделю.
Использование командных командлетов
Ранее в серии, когда мы познакомили вас с конвейером, мы показали вам, как вы можете взять объекты, которые выводит один командлет, и передавать их в качестве ввода в другой командлет, используя что-то вроде этого:
Get-Process -Name notepad | Stop-Process
Это уничтожит любой процесс с названием «блокнот». Но вам, вероятно, интересно, как PowerShell может убить каждый экземпляр блокнота с помощью одной команды. Ответ заключается в помощи командлета Stop-Process.
help Stop-Process –Full
Если вы посмотрите на последнюю строку кода в разделе синтаксиса, вы увидите, что параметр InputObject принимает объект типа Process , и всякий раз, когда вы видите тип, за которым следуют две квадратные скобки, это означает, что параметр принимает один или больше предыдущего типа. В этом случае он принимает один или несколько объектов процесса. Технически мы бы сказали, что командлет InputObject принимает процесс массив, Всякий раз, когда у вас есть командлет, поддерживающий пакетные операции таким образом, используйте его. Это выбор номер один.
Использование WMI
Хотя WMI - не самая лучшая технология для доставки из штаб-квартиры Microsoft, она входит во второй раз в список того, как работать с коллекциями объектов. Мы могли бы легко получить список запущенных процессов из класса Win32_Process следующим образом:
Get-WmiObject –Class Win32_Process
Get-WmiObject –Class Win32_Process | Get-Member
Похоже, что самое близкое, что нужно остановить, это метод завершения, поэтому он должен быть единственным. Чтобы вызвать метод в объекте WMI, вы просто подключите его к Invoke-WmiMethod и укажите имя метода.
Get-WmiObject -Class Win32_Process -Filter “name=’notepad.exe'” | Invoke-WmiMethod -Name Terminate
перечисление
Если не выполняются другие два метода, если вам нужно что-то сделать с кучей объектов, вы можете перечислить весь объект и действовать на каждый отдельный объект. Сначала вы должны найти метод, который вы использовали бы, чтобы остановить один процесс.
Get-Process | Get-Member -MemberType Method
Get-Process -Name notepad | ForEach-Object -Process {$_.Kill()}
Резюме
Выбор один
Get-Process -Name notepad | Stop-Process
Выбор второй
Get-WmiObject -Class Win32_Process -Filter “name=’notepad.exe'” | Invoke-WmiMethod -Name Terminate
Выбор третий
Get-Process -Name notepad | ForEach-Object -Process {$_.Kill()}
Вот и все на этот раз люди, увидев вас на следующей неделе для большего удовольствия PowerShell.