Путь к Powershell.exe (v 2.0)

114

Где находится Powershell (версия 2.0)? Какой путь к Powershell.exe? У меня установлены Windows Server 2008 и Powershell. Когда я смотрю на эту папку:

PS C:\Windows\System32\WindowsPowerShell> dir


    Directory: C:\Windows\System32\WindowsPowerShell


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         20.4.2010     17:09            v1.0

У меня только Powershell v1.0. Но когда я печатаю

PS C:\> $Host.version

Major  Minor  Build  Revision
-----  -----  -----  --------
2      0      -1     -1


PS C:\>

Это показывает, что у меня установлена ​​версия 2.0.

Джорас
источник
8
«V1.0», которое вы видите выше, - это просто имя каталога, а не фактический номер версии.
doobop
Просто посмотрите на целевое расположение ссылки PowerShell
oxfn

Ответы:

171

Я верю в это C:\Windows\System32\WindowsPowershell\v1.0\. Чтобы запутать невиновных, MS хранила его в каталоге с пометкой «v1.0». Запуск этого в Windows 7 и проверка номера версии через $Host.Version( Определить установленную версию PowerShell ) показывает, что это 2.0.

Другой вариант - ввести $PSVersionTableв командной строке. Если вы используете v2.0, вывод будет:

Name                           Value
----                           -----
CLRVersion                     2.0.50727.4927
BuildVersion                   6.1.7600.16385
PSVersion                      2.0
WSManStackVersion              2.0
PSCompatibleVersions           {1.0, 2.0}
SerializationVersion           1.1.0.1
PSRemotingProtocolVersion      2.1

Если вы используете версию 1.0, переменная не существует и вывод не будет.

Локализация PowerShell версии 1.0, 2.0, 3.0, 4.0:

  • 64-битная версия: C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \
  • 32-битная версия: C: \ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0 \
doobop
источник
1
Может быть, они хотели сохранить совместимость с жестко заданными путями? Microsoft - это Microsoft
Тиаго Лейте
6
«Чтобы запутать невиновных» - одна из моих любимых цитат.
simlev
48

Думаю, в $ PsHome есть нужная вам информация?

PS.> $ PsHome
C: \ Windows \ System32 \ WindowsPowerShell \ v1.0

PS.> Get-Help about_automatic_variables

ТЕМА
    about_Automatic_Variables ...

Саймон Б.
источник
29

Вот один способ ...

(Get-Process powershell | select -First 1).Path

Возможно, это лучший способ, поскольку он возвращает первое попадание в путь, как если бы вы запускали Powershell из командной строки ...

(Get-Command powershell.exe).Definition
Натан Хартли
источник
3
Насколько я понимаю, это лучший ответ, чем тот, за который в настоящее время проголосовали до 35. Исходный вопрос, казалось, касался пути к исполняемому файлу, причем информация о версии была второстепенной для вопроса. Этот ответ напрямую отвечает на этот вопрос, минуя даже «предполагаемый» ответ и позволяя человеку точно узнать, где находится исполняемый файл в его собственной системе, даже если эта система отличается от системы по умолчанию. (Это то, что я приехал сюда в поисках, поэтому я ценю это.)
Тодд Уолтон
Поиск на основе исполняемого файла powershell.exeслишком расслаблен, поскольку вы можете легко переименовать другой исполняемый файл в powershell.exe, и вместо этого он будет использовать этот процесс. Get-Process -Id $PIDбудет работать, хотя я не уверен, в какой версии $PIDбыла представлена.
Чарльз Грюнвальд
Я вижу вашу "слишком расслабленную" точку, однако использование $ PID вернет текущий хост, который может не быть интерпретатором Powershell. Как, например, Powershell_ise.exe.
Натан Хартли
возможно с ноября 2011 года свойства изменились. Для меня (в июле 2016 года при использовании Windows Server 2012) свойство .Source не существует. Вместо этого я могу использовать свойство .Definition, которое возвращает: «C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe» . Моя переменная $ PSHome содержит: "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0" Кроме того, если вы используете get-process, подумайте об использовании 'powershell *' вместо просто powershell, если вы используете powershell_ise. HTH
Marcelo Finki
Изменен ответ с использования .Source на .Definition.
Натан Хартли,
12

Это всегда C: \ Windows \ System32 \ WindowsPowershell \ v1.0. Так и оставили для обратной совместимости - вот что я где-то слышал или читал.

равикант
источник
2
% SystemRoot% \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe. В случае, если SystemRoot не «C: \ Windows»
Мэтью,