Коллекция powershell была изменена, чтобы остановить все работающие ручные службы - PullRequest
0 голосов
/ 03 апреля 2020

Следующая инструкция powershell завершается ошибкой с сообщением: Коллекция была изменена; Операция перечисления может не выполняться.

Get-Service | Select-Object -Property Name,Status,StartType | Where-Object {$_.Status -eq "Running" -and $_.StartType -eq "Manual"} | Stop-Service -Force

Решение состоит в том, чтобы не перечислять и не останавливать, а сначала преобразовать элементы в массив / список, но я не могу найти, как это сделать.

Я ожидал бы что-то вроде ToArray или ToList, как это возможно в c#, а затем перебрал бы массив вместо использования перечислителя служб, но я не могу найти документацию powershell о том, как это сделать.

Я вижу только примеры, которые что-то делают с foreach, которые конвертируются в for, но я бы хотел сохранить его в единственном числе и просто преобразовать перечисляемый в список / массив. \

Это возможно и как?

1 Ответ

0 голосов
/ 03 апреля 2020

Просто присвойте переменную перед вызовом Stop-Service:

$servicesToStop = Get-Service |Where-Object {$_.Status -eq "Running" -and $_.StartType -eq "Manual"}
$servicesToStop |Stop-Service -Force
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...