Get-Service проблема с powershell - PullRequest
1 голос
/ 20 октября 2019

По какой-то причине, когда я запускаю Get-Service в powershell, он выдает ошибку. Однако, если я сначала запусту Set-Service, Get-Service будет работать, пока я снова не открою powershell. Я не могу найти эту проблему в Интернете. Кто-нибудь сталкивался с этим, и если да, есть ли решение?

Ошибка: «Программа« Get-Service »не запустилась: ни одно приложение не связано с указанным файлом для этой операции» В строке: 1 символ: 1 "

PowerShell Issue

1 Ответ

2 голосов
/ 21 октября 2019

Примечание. Этот ответ применяется с PowerShell Core 7.0.0-preview.4;надеюсь, текущее поведение станет более предсказуемым, как это предлагается в этом выпуске GitHub .

tl; dr

Удалить файлC:\Windows\System32\Get-Service из вашей системы - его там не должно быть.

После этого Get-Service снова начнет работать.


PowerShell пытается открыть, возможно, случайноСоздан файл C:\Windows\System32\Get-Service без расширения в вашей системе первый , , если вы еще не импортировали модуль Microsoft.PowerShell.Management в сеансе .

Модуль Microsoft.PowerShell.Management, который содержит командлеты Get-Service и Set-Service (среди прочих команд), обычно импортируется по требованию при первой попытке выполнить одну из его команд в сеансе.

Технически, поскольку модуль расположен в известном месте, он подлежит автоматической загрузке модуля .

Однако еслимодуль еще не импортирован, внешний файл программы / документа с тем же именем находится в одном из перечисленных каталогов. n Переменная окружения $env:PATH имеет приоритет , а it выполняется / открывается по умолчанию.

Поскольку файл в вашем случае не имел расширения имени файлаоболочка Windows не знала, как ее открыть, что привело к появившемуся сообщению об ошибке (если дважды щелкнуть файл в проводнике, вместо этого появится диалоговое окно «Как открыть этот файл?»).

В результате, попытка выполнить команду с именем Get-Service сама по себе не инициирует импорт модуля Microsoft.PowerShell.Management - внешний файл продолжает вызываться.

В отличие от этого, поскольку командлет Set-Service не скрыт внешним файлом, вызов it неявно импортирует модуль.

После того, как модульбыла импортирована, отправка команды Get-Service вызывает командлет , а не внешний файл , потому что приоритет обычной команды PowerShell затем запускается, где командлеты имеют приоритет над внешними программами сгоe то же имя.

Это ситуативное различие затрудняет прогноз поведения при исполнении . Вместо этого PowerShell должен последовательно отдавать приоритет известным командлетам, независимо от того, был ли их модуль импортирован в текущий сеанс или нет : см. эту проблему GitHub .


Чтобы однозначно вызвать команду из данного модуля, добавьте префикс имени команды с именем модуля, за которым следует \:

То естьдаже без импорта модуля вы могли бы вызвать командлет Get-Service следующим образом:

Microsoft.PowerShell.Management\Get-Service
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...