維基百科說,PowerShell 2.0隨Windows 7一起發佈;所以當我使用Windows 7時,我顯然正在使用該版本。跨版本的PowerShell安裝文件夾和腳本文件擴展名
但是,這產生了兩個問題:
- 爲什麼PowerShell的與尾部
v1.0
文件夾C:\Windows\System32\WindowsPowerShell\v1.0
當它實際上應該是v2.0
? - 爲什麼PowerShell腳本擴展爲
.ps1
?版本更改時,擴展名會增加嗎?
維基百科說,PowerShell 2.0隨Windows 7一起發佈;所以當我使用Windows 7時,我顯然正在使用該版本。跨版本的PowerShell安裝文件夾和腳本文件擴展名
但是,這產生了兩個問題:
v1.0
文件夾C:\Windows\System32\WindowsPowerShell\v1.0
當它實際上應該是v2.0
?.ps1
?版本更改時,擴展名會增加嗎?這只是Powershell團隊選擇的結果。他們決定保留powershell的V2的1.0目錄和.ps1擴展名。
實際檢查的PowerShell版本的最好方法是使用$PSVersionTable.PSVersion
C:\Users\jaredpar> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
2 0 -1 -1
這是一個ancient blog post(2007年),但它仍然適用的表達;總之:
只要新的PowerShell版本保持向後兼容,他們將取代早期版本:
的安裝位置,體現在$PSHOME
- $env:systemroot\System32\WindowsPowerShell\v1.0
- 將保持不變。
文件擴展名 - .ps1
- 將保持不變。對於早期版本中創建
腳本將繼續運行。
爲了紀念一個腳本至少需要版本<n>
,用#requires -version <n>
在腳本(技術上的頂部,它可以放在任何地方腳本,但它是有道理的意義的地方它在頂部)。
在撰寫本文時(PowerShell的V5.1)的,向後兼容性一直以來V1維護,因此兩者的安裝位置和文件擴展名都保持相同。
要獲取當前會話的PowerShell的版本:
> [string] $PSVersionTable.PSVersion
5.1.14393.693 # PSv5.1 example
更一般地,哈希表$PSVersionTable
,在v2中介紹,包含Get-Help about_Automatic_Variables
描述的幾件版本信息,(不完全):
Name Value
---- -----
PSVersion 5.1.14393.693 # The PowerShell version.
PSEdition Desktop # 'Desktop'=*Windows* PS; 'Core'=PS *Core*
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} # array of compatible versions
BuildVersion 10.0.14393.693 # OS version? only if it came natively
CLRVersion 4.0.30319.42000 # The .NET CLR version
WSManStackVersion 3.0 # WS-Management (WinRM) version
PSRemotingProtocolVersion 2.3 # remoting-protocol version
SerializationVersion 1.1.0.1 # serialization-protocol version
謝謝,我希望更好推理雖然:) – poke 2010-11-23 20:29:25