【问题标题】:How to ensure that we are using powershell 2.0?如何确保我们使用的是 powershell 2.0?
【发布时间】:2012-07-31 01:53:13
【问题描述】:

我们正在向仅在 Powershell 2.0 中工作的客户端提供脚本。

通过命令我们可以确保powershell 2.0安装如下

$version = Get-host | Select-object Version

但是如果我们提供脚本,如何确保它们是从 Powershell 2.0 执行的呢?

在执行脚本时,Powershell 2.0 的特性在启动脚本本身时可能会出现脚本错误。不是吗?

【问题讨论】:

    标签: powershell powershell-2.0


    【解决方案1】:

    您可以使用 #requires 注释您的脚本,并声明它不应在低于 PowerShell v2 的任何设备上运行:

    #requires -Version 2.0
    

    (旁注:即使您模糊地知道它存在,也很难找到它。)

    【讨论】:

    • 你的意思是说它应该作为第一行添加到我的脚本中以防止它在 1.0 中工作?
    • @Samselvaprabu:阅读此关于要求:tfl09.blogspot.de/2009/01/…
    • 添加了指向实际文档的链接。
    • #Requires 指定了最低版本 - 不是特定版本。因此#Requires -version 2.0 将在版本 3.o 环境中成功。
    • 确实,这也是我在回答中所说的。不过,大多数时候您确实想要一个最低版本,因为您使用的是旧版本没有的东西。阅读他们的问题,他们只是想要这个,以便他们的脚本拒绝在 PS1 上运行,因为他们正在使用 PS2 功能。
    【解决方案2】:

    依赖主机版本并不是最安全的做法,因为脚本可以在主机版本与 PowerShell 版本不同的主机上运行。

    $PSVersionTable 变量是在 v2 中添加的。您可以检查变量是否存在,如果存在则您正在运行 v2 及更高版本,您还可以检查 PSVersion.Major 属性:

    if($PSVersionTable)
    {
        'PowerShell {0}' -f $PSVersionTable.PSVersion.Major
    }
    else
    {
       'PowerShell 1'
    }
    

    【讨论】:

      【解决方案3】:

      我会这样做:

      # get version
      $ver = $PsVersionTable.psversion.major
       # Check to see if it's V2
      
      If ($ver -NE 2) 
         {"incorrect version - exiting; return}
      # Everything that follows is V2
      

      希望这会有所帮助!

      【讨论】:

        【解决方案4】:

        尝试使用$PSVersionTable

        你会得到类似的东西:

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

        【讨论】:

        • 请注意,$PSVersionTable 在 v1 中不存在。这是一个很好的指标,但仅针对 PSVersion 属性的幼稚检查不会单独进行。
        • @Joey:你说得对,我发现这个帖子猜到了 OP 需要什么:stackoverflow.com/questions/1825585/…
        猜你喜欢
        • 1970-01-01
        • 2016-10-15
        • 1970-01-01
        • 2018-07-28
        • 1970-01-01
        • 2018-02-25
        • 1970-01-01
        • 1970-01-01
        • 2021-09-17
        相关资源
        最近更新 更多