【问题标题】:Check powershell version and run a function based on the version检查powershell版本并根据版本运行功能
【发布时间】:2020-04-09 00:23:57
【问题描述】:

我正在尝试检查 powershell 版本,并且由于不同版本之间的命令和语法差异,我需要根据哪个版本运行特定功能。我正在尝试创建一个仅包含版本号的变量,以便于比较。这是代码。

$PSversion = {$PSVersionTable.PSVersion | sort-object major | ForEach-Object     {$_.major}}

Switch ($PSversion) {
    2 {V2}
    4 {V4}
    5 {V5}
}

function V2 {
    "You have Powershell Version 2"
}

function V4 {
    "You have Powershell Version 4"
}

function V5 {
    "You have Powershell Version 5"
}

当我运行脚本时它返回一个空行,当我打印出变量的内容时,我得到数字和一个新行。我尝试使用替换来摆脱新行,但它总是在那里。如果我直接在powershell窗口中输入变量命令,然后打印出变量的内容,我只得到版本号,没有换行。如果我从同一个 powershell 窗口运行脚本,我什么也得不到。

对此的任何帮助将不胜感激!我不必使用这种方法,任何检查powershell版本并根据版本运行功能的方法都是我正在寻找的。

【问题讨论】:

  • switch 语句移动到函数已定义
  • 还有一个改进:Switch ($PSVersionTable.PSVersion.Major)
  • 对这种方法的一般评论:最好检查特定的属性、功能或任何东西是否存在,而不是根据版本来推测它。我还建议您查看#Requires 指令。

标签: powershell


【解决方案1】:

除了@MathiasRJesson 关于将函数移到使用前的评论之外,您还为$PSversion 变量分配了一个脚本块。它没有评估它。

这个:

$PSversion = {$PSVersionTable.PSVersion | sort-object major | ForEach-Object     {$_.major}}

应该是:

$PSversion = $PSVersionTable.PSVersion | sort-object major | ForEach-Object     {$_.major}

或者可能只是:

$PSversion = $PSVersionTable.PSVersion.Major

【讨论】:

    【解决方案2】:
    # Getting the whole Powershell version
    $version = (Get-Host | Select-Object Version).Version
    
    # Only the major one
    $majvers = $version.Major
    
    # The full version number (as a string)
    $verstr = $version.toString()
    

    【讨论】:

      猜你喜欢
      • 2018-11-17
      • 1970-01-01
      • 2017-02-27
      • 2022-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多