2011-03-24 64 views

回答

11

它實際上是在副作用一個有趣的故事。

Visual Studio在其「添加引用」對話框中有一個固定的程序集列表。
還有其他東西需要瀏覽。 開發人員傾向於在Windows目錄中瀏覽此位置,其中System.Management.Automation.dll(運行大部分PowerShell的程序集所在的組件) 這對此位置進行了絕對引用。 由於PowerShell不會有並行安裝選項(與.NET框架一樣),所以可用的最佳選擇是允許人們通過路徑和引用同一程序集來引用相同的程序集StrongName,就像以前一樣。

如果這個故事沒有以這種方式保留下來,所有寫在PowerShell V1之上的應用程序將不得不重新發布V2。

+1

這不是GAC的用途嗎? – Simon 2011-03-24 22:19:26

+1

哦,BTW包括你的簽名在每個答案是浪費空間:) – Simon 2011-03-24 22:20:22

4

我認爲,因爲PowerShell 2.0與1.0非常兼容,所以不需要在同一臺機器上安裝兩個不同的版本。所以他們把2.0放在XP和Vista系統上1.0以上,並且很可能決定保留Windows 7的同一個目錄。這也是擴展仍然是.ps1(和.psm1,.psd1)的原因。

您可以在Windows 7 x64上提問。爲什麼64位系統在dir中稱爲System32,爲什麼這些相同的64位dll的名稱以「32」結尾,例如user32.dll,kernel32.dll等:-)

+0

與「極端兼容性」無關,但向後兼容。 – manojlds 2011-09-22 16:06:01

7

我只是認爲,在剛開始的時候,Microsoft團隊計劃並排部署PowerShell版本,就像它爲Framework .NET版本完成一樣。但是隨着時間的推移,他們決定只支持一個PowerShell。

當使用命令行的-version參數選擇版本1.0時,有更奇怪的東西var $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(聖維特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腳本。微軟添加了一些變數,如果你的腳本中有這些變量,但它是花生,你可能會遇到麻煩。

JP

+0

在Windows 8中,它仍然位於C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe中,而$ PSVersionTable顯示的是PSVersion爲3.0。 – benjguin 2012-08-01 09:45:37