代码之家  ›  专栏  ›  技术社区  ›  poke

跨版本的PowerShell安装文件夹和脚本文件名扩展

  •  4
  • poke  · 技术社区  · 14 年前

    维基百科说 PowerShell 2.0 是与Windows7一起发布的;所以当我使用Windows7时,我显然使用的是那个版本。

    但这提出了两个问题:

    1. PowerShell文件夹的原因 C:\Windows\System32\WindowsPowerShell\v1.0 跟在后面的那个 v1.0 实际上应该是什么时候 v2.0 ?
    2. 为什么是PowerShell脚本扩展 .ps1 ?当版本更改时,扩展名会增加吗?
    2 回复  |  直到 6 年前
        1
  •  2
  •   JaredPar    14 年前

    这只是PowerShell团队做出选择的结果。他们决定保留PowerShell v2的1.0目录和.ps1扩展。

    实际检查PowerShell版本的最佳方法是使用表达式 $PSVersionTable.PSVersion

    C:\Users\jaredpar> $PSVersionTable.PSVersion
    
    Major  Minor  Build  Revision
    -----  -----  -----  --------
    2      0      -1     -1
    
        2
  •  1
  •   mklement0    6 年前

    This is an ancient blog post (2007年),但它仍然适用;简而言之:

    • 只要保留新的PowerShell版本 向后兼容 ,他们会的 代替 早期版本 :

      • 安装位置,反映在 $PSHOME - $env:systemroot\System32\WindowsPowerShell\v1.0 -将保持不变。

      • 文件扩展名- .ps1 -将保持不变。

    • 为早期版本创建的脚本将继续运行。

    • 将脚本标记为需要的版本 <n> 至少 使用 #requires -version <n> 在脚本的顶部(从技术上讲,它可以放置在 在任何地方 在脚本中,但是把它放在顶部是有意义的)。

    Windows PowerShell ,自v1以来一直保持向后兼容性 (从本文开始,当前版本是5.1版-可能是 最后的 主要版本;见下文),因此安装位置和文件扩展名保持不变。

    然而, 所有未来的工作都将转向独立的跨平台PowerShell 核心 版本 ,从V6.2.0开始 主要地 向后兼容Windows PowerShell,尽管它使用.NET 核心 因为基础意味着某些特定于Windows的技术根本上是不可用的。 this blog post


    获取当前会话的PowerShell版本 :

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

    一般来说,hashtable $PSVersionTable 在V2中引入,包含多个版本信息(不完整),如中所述 Get-Help about_Automatic_Variables ; 温普 以下是指 Windows PowerShell ,鉴于 PrSpple 引用PowerShell 核心 :

    共享 属性:

    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