Остановка любого экземпляра PowerShell.exe (кроме текущего)

Наш архитектор тестирования недавно ввалился ко мне в офис и подбросил вопрос по PowerShell с очень, очень интересным ответом.

Он захотел остановить любой процесс с указанным именем, кроме экземпляра, в котором выполняется сценарий.

Это можно сделать одним хорошим конвейером:

 
Get-Process Powershell  | Where-Object { $_.ID -ne $pid } | Stop-Process

 

Get-Process получает позиционный параметр (имя), которое является шаблоном, описывающим имя искомого процесса. Он возвращает кучу объектов ProcessInfo, которые имеют свойство, ID (ID процесса). $pid – это переменная, которая сообщает вам ID текущего процесса в PowerShell. Where-Object { $_.ID -ne $pid } просто возвращает каждый экземпляр, который не является текущим. Stop-Process извлекает нужные данные из каждого объекта ProcessInfo и останавливает переданный ему процесс (здесь это любой экземпляр PowerShell, кроме текущего).

Еще один день и еще один вопрос о PowerShell получил свой ответ.

Надеюсь, это вам поможет.

Джеймс Брандейдж (James Brundage) [MSFT]

Перевод: Виктор Горбунков