Остановка любого экземпляра 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]
Перевод: Виктор Горбунков