PowerShell如果语句失败

时间:2019-05-29 13:57:12

标签: powershell if-statement

我需要另一双眼睛,因为我敢肯定这很简单,但是现在正在踢我的屁股。我正在编写脚本以在Server 2008和Server 2012计算机上安装Windows角色/功能。

我知道2008使用Add-WindowsFeature,而2012使用Install-WindowsFeature。因此,我的目标是查看操作系统,如果是2008年,则创建一个名为$Install的变量Add-WindowsFeature,如果不是2008,则将其命名为Install-WindowsFeature

这就是我现在拥有的:

$OS = (Get-WmiObject Win32_OperatingSystem).Name

if ($OS -like '2008') {
    $Install = 'Add-WindowsFeature'
} else {
    $Install = 'Install-WindowsFeature'
}

当前,当我调用$OS变量时,我得到的返回值为:

Microsoft Windows Server 2008 R2 Standard |C:\Windows|\Device\Harddisk0\Partition2

但是当我调用$Install变量时,我得到的返回值为:

Install-WindowsFeature

我也尝试使用-contains而不是-like,但得到的结果相同。我也尝试过消除大括号前的空格,但仍然没有变化。我在做什么错了?

2 个答案:

答案 0 :(得分:4)

-like运算符不是正则表达式比较。如果没有通配符,则-like匹配项与相等比较项相同。

您需要包含通配符,如下所示:

if ($OS -like '*2008*') {

执行包含检查,如下所示:

if ($OS.Contains('2008')) {

或使用正则表达式匹配,如下所示:

if ($OS -match '2008') {

文档在这里:

  

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_comparison_operators

答案 1 :(得分:1)

或者,cmdlet catchError(() => { resolve(false); }) 应该在2008年及以后的计算机上可用。无论使用什么操作系统,都应该能够使用它来安装所需的任何功能。