我需要另一双眼睛,因为我敢肯定这很简单,但是现在正在踢我的屁股。我正在编写脚本以在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
,但得到的结果相同。我也尝试过消除大括号前的空格,但仍然没有变化。我在做什么错了?
答案 0 :(得分:4)
-like
运算符不是正则表达式比较。如果没有通配符,则-like
匹配项与相等比较项相同。
您需要包含通配符,如下所示:
if ($OS -like '*2008*') {
执行包含检查,如下所示:
if ($OS.Contains('2008')) {
或使用正则表达式匹配,如下所示:
if ($OS -match '2008') {
文档在这里:
答案 1 :(得分:1)
或者,cmdlet catchError(() => {
resolve(false);
})
应该在2008年及以后的计算机上可用。无论使用什么操作系统,都应该能够使用它来安装所需的任何功能。