维基百科说,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