Почему Powershell 2.0 установлен в том же месте, что и Powershell 1.0? - PullRequest
10 голосов
/ 24 марта 2011

Кто-нибудь знает, почему Powershell 2.0 установлен в C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 в Windows 7?

Ответы [ 3 ]

12 голосов
/ 24 марта 2011

Это действительно интересная история с побочными эффектами.

Visual Studio имеет фиксированный список сборок в диалоговом окне «Добавить ссылку».
Все остальное должно быть просмотрено. Разработчики, как правило, искали это местоположение в каталоге Windows, где находится System.Management.Automation.dll (сборка, которая работает большую часть жизни PowerShell). Это сделало абсолютную ссылку на это место. Поскольку в PowerShell не было возможности установки параллельно (как в случае с платформой .NET), лучшим доступным вариантом было позволить людям продолжать ссылаться на одну и ту же сборку как по пути, так и по StrongName как и раньше.

Если бы эта история не сохранилась, все приложения, написанные поверх PowerShell V1, пришлось бы переиздавать для V2.

7 голосов
/ 24 марта 2011

Я просто думаю, что в самом начале команда Microsoft планирует развертывать версии PowerShell параллельно, как это делается для версий Framework .NET.Но со временем они решили поддерживать только один PowerShell одновременно.

Есть нечто еще более странное, когда вы используете параметр -version командной строки для выбора версии 1.0, переменная $PSVersionTable присутствует в PSVersionоценивается в 2,0.$ PSVersionTable отсутствует в PowerShell 1.0

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC>powershell -version 1.0
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. Tous droits réservés.

PS C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC> cd \
PS C:\> $PSVersionTable

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

Если вы смотрите на var $host, который существует в обеих версиях

PowerShell V2.0 (vithверсия 1.0 или 2.0)

PS > $host
Name             : ConsoleHost
Version          : 2.0
InstanceId       : b6ae2582-c1f4-422a-b057-16458b387f7d
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : fr-FR
CurrentUICulture : fr-FR
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace

PowerShell V1.0

PS > $Host
Name             : ConsoleHost
Version          : 1.0.0.0
InstanceId       : b55940f2-b3b2-4f99-b895-98aac4752369
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : fr-FR
CurrentUICulture : fr-FR
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy

Мое мнение таково, что PowerShell V2.0 способен работать практически со всеми PowerShell V1.0 скриптов.Microsoft добавляет несколько переменных, и у вас могут возникнуть проблемы, если эти сценарии присутствуют в ваших сценариях, но это арахис.

JP

4 голосов
/ 24 марта 2011

Я думаю, поскольку PowerShell 2.0 чрезвычайно совместим с 1.0, не было необходимости иметь две разные версии на одной машине. Таким образом, они поставили 2.0 поверх 1.0 в системах XP и Vista и, скорее всего, решили сохранить тот же каталог для Windows 7. Это также та же причина, по которой расширение по-прежнему .ps1 (и .psm1, .psd1).

Вы можете попросить то же самое для Windows 7 x64. Почему 64-битные системные библиотеки dll находятся в каталоге System32 и почему имена этих 64-битных библиотек оканчиваются на «32», например user32.dll, kernel32.dll и т. д.: -)

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