Папка установки PowerShell и расширение имени файла скрипта для разных версий - PullRequest
4 голосов
/ 23 ноября 2010

Википедия сообщает, что PowerShell 2.0 был распространен вместе с Windows 7;так как я использую Windows 7, я, очевидно, использую эту версию.

Но возникает два вопроса:

  1. Почему папка PowerShell C:\Windows\System32\WindowsPowerShell\v1.0 с этим конечным v1.0, когдана самом деле это должно быть v2.0?
  2. Почему расширение сценария PowerShell .ps1?Будет ли это расширение увеличиваться при изменении версии?

Ответы [ 2 ]

2 голосов
/ 23 ноября 2010

Это просто результат выбора, сделанного командой Powershell. Они решили сохранить как каталог 1.0, так и расширение .ps1 для V2 powershell.

Лучший способ проверить версию Powershell - использовать выражение $PSVersionTable.PSVersion

C:\Users\jaredpar> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
2      0      -1     -1
1 голос
/ 06 марта 2017

Это древний пост в блоге (2007), но он все еще применяется; короче:

  • Пока новые версии PowerShell остаются обратно совместимыми , они будут заменять более ранние версии :

    • Место установки, указанное в $PSHOME - $env:systemroot\System32\WindowsPowerShell\v1.0 - останется прежним.

    • Расширение имени файла - .ps1 - останется прежним.

  • Скрипты, созданные для более ранней версии, будут продолжать работать.

  • Чтобы пометить скрипт как требующий версию <n> как минимум , используйте #requires -version <n> в верхней части скрипта (технически он может быть размещен в любом месте в скрипте, но имеет смысл разместить его сверху).

В Windows PowerShell обратная совместимость поддерживается начиная с v1 (текущая версия v5.1 на момент написания этой статьи - скорее всего, последняя основная версия; см. ниже), поэтому и место установки, и расширение имени файла остались прежними.

Однако все будущие усилия будут направлены на создание отдельной кроссплатформенной PowerShell Core edition , которая - начиная с версии 6.2.0 - в основном назад - совместим с Windows PowerShell, хотя его использование .NET Core в качестве основы означает, что некоторые специфичные для Windows технологии принципиально недоступны - см. это сообщение в блоге .


К получить версию PowerShell текущего сеанса :

PS> [string] $PSVersionTable.PSVersion
5.1.14393.693   # PSv5.1 example

В общем, хеш-таблица $PSVersionTable, представленная в v2, содержит несколько частей информации о версии (не полностью), описанной в Get-Help about_Automatic_Variables; WinPS ниже относится к Windows PowerShell , тогда как PSCore относится к PowerShell Core :

Shared Свойства:

Name                           Value                                                                                                                           
----                           -----                                                                                                                           
PSVersion                      5.1.14393.693 # The PowerShell version.                                                                                                             
PSEdition                      Desktop       # 'Desktop'=WinPS; 'Core'=PSCore
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...} # array of compatible versions                                                                                                         
WSManStackVersion              3.0              # WS-Management (WinRM) version                                                                                                           
PSRemotingProtocolVersion      2.3              # remoting-protocol version                                                                                                               
SerializationVersion           1.1.0.1          # serialization-protocol version                                                                                                               

Дополнительные свойства исключительно для WinPS :

BuildVersion                   10.0.14393.693   # ?? Highest supported OS major.minor version, seemingly followed by the build.revision PS version.
CLRVersion                     4.0.30319.42000  # The .NET Framework CLR version                                                                                                               

Дополнительные свойства эксклюзивно для PSCore :

GitCommitId                    6.2.0 # The Git commit ID reflecting an RTM tag (e.g., 6.2.0), release tag (e.g., 6.2.0-rc.1) or a specific non-release commit (e.g., 6.2.0-preview.4-108-g5d54f1aa3871a826409496437e25856dc263ccc4)
OS                             Microsoft Windows 10.0.17134 # [System.Runtime.InteropServices.RuntimeInformation]::OSDescription
Platform                       Win32NT  # [System.Environment]::OSVersion.Platform
...