Вопрос или проблема
Под PowerShell >= 5.1
Я получаю:
PS C:\> get-service -Status Running
Get-Service: Параметр с именем 'Status' не найден
Но свойство все равно существует?
PS C:\> get-service | Get-Member
PowerShell предназначен для решения подобных проблем через составление – если Get-Service
возвращает объекты со свойством Status
, по которому вы хотите фильтровать, просто составьте новый конвейер, добавив командлет Where-Object
ниже:
Get-Service |Where-Object Status -eq Running
.
Ответ или решение
Проблема с параметром -Status
в PowerShell при использовании Get-Service
При использовании PowerShell версии 5.1 и выше, многие пользователи сталкиваются с ошибкой при попытке фильтрации служб с помощью команды Get-Service -Status Running
. Ошибка, которую следует знать, заключается в следующем:
Get-Service: A parameter cannot be found that matches parameter name 'Status'
Причины проблемы
-
Отсутствие параметра: Дело в том, что команда
Get-Service
не поддерживает параметр-Status
. Это значит, что, несмотря на то, что объект, который возвращает команда, содержит свойствоStatus
, фильтрация по этому свойству должна осуществляться другим способом. -
Структура команд: PowerShell построен на принципах композиции, то есть вы можете комбинировать команды для достижения желаемого результата. В данном случае, вам нужно использовать возможности командного конвейера (pipeline).
Решение проблемы
Чтобы отфильтровать службы по состоянию, рекомендуется использовать команду Where-Object
. Этот подход позволит вам получить службы, которые имеют определенное состояние. Ниже приведён пример правильного синтаксиса:
Get-Service | Where-Object { $_.Status -eq 'Running' }
Здесь мы используем Where-Object
, чтобы фильтровать результаты, возвращаемые командой Get-Service
, по свойству Status
. В этой команде $_
ссылается на каждый объект службы в конвейере, а -eq 'Running'
означает, что мы ищем только те службы, которые находятся в состоянии "Работающая".
Пояснение к команде
Get-Service
: Эта команда возвращает объекты, представляющие службы, зарегистрированные на вашем компьютере.Where-Object
: Эта команда позволяет фильтровать объекты на основе заданного условия. В данном случае мы проверяем свойствоStatus
, используя оператор равенства-eq
.
Заключение
Таким образом, ошибка, с которой вы столкнулись, говорит о том, что необходимо учитывать, что Get-Service
не принимает параметра -Status
, но это не является проблемой, поскольку PowerShell предоставляет мощные инструменты для работы с объектами. Использование Where-Object
позволяет добиться желаемого результата, фильтруя службы по состоянию.
Если у вас есть дополнительные вопросы или нужна помощь с другими командами PowerShell, не стесняйтесь спрашивать!