0

我使用 Get-WindowsOptionalFeature 来检查 Windows 功能是否成功打开/关闭,但 Windows 7 不支持此指令。

$IIS_InstallPro = "IIS-WebServerRole","IIS-WebServer","IIS-CommonHttpFeatures","IIS-HttpErrors"

#$features = Get-WindowsOptionalFeature -Online -FeatureName IIS*
$features = Dism /Online /Get-Features

function CheckIIS{
    foreach($feature in $features)
    {
        if($feature.State -eq "Disabled" -and $IIS_InstallPro -match $feature.FeatureNmae)
        {
           return $False
        }   
    }
    return $true
}
CheckIIS

我应该使用 dism.exe 检查并返回结果吗?想知道这样做是否是一种好习惯以及最好的方法是什么?

4

1 回答 1

0

不,没有办法让这些 cmdlet 在 Windows 7 上运行。

虽然您确实不应该再使用 Windows 7,但您仍然应该能够从 WMI 获取此信息。我不记得Get-CimInstnacecmdlet 在 7 上是否可用,所以我将使用以下Get-WmiObject方法:

Function Get-WmiWindowsOptionalFeatures {
  [CmdletBinding()]
  Param(
    [string]$FeatureName,
    [ValidateSet('Enabled', 'Disabled', 'Absent', 'Unknown', '1', '2', '3', '4')]
    [string]$InstallState
  )

  Get-WmiObject Win32_OptionalFeature | Where-Object {
    $feature = $_

    $featureMatch = !$FeatureName -or ( $FeatureName -and $feature.Name -like $FeatureName )
    
    $installStateMatch = switch ( $InstallState ) {

      { $_ -in 'Enabled', '1' } {
        $feature.InstallState -eq 1
        break
      }

      { $_ -in 'Disabled', '2' } {
        $feature.InstallState -eq 2
        break
      }

      { $_ -in 'Absent', '3' } {
        $feature.InstallState -eq 3
        break
      }

      { $_ -in 'Unknown', '4' } {
        $feature.InstallState -eq 4
        break
      }

      default {
        $true
        break
      }
    }

    $featureMatch -and $installStateMatch
    
  } | Select-Object Name, Caption, Description, InstallDate, @{
    Label      = 'InstallState'
    Expression = {

      switch ( $_.InstallState ) {

        1 {
          'Enabled'
          break
        }

        2 {
          'Disabled'
          break
        }

        3 {
          'Absent'
          break
        }

        4 {
          'Unknown'
          break
        }

        default {
          $_.ToString()
          break
        }
      }
    }
  }
}

这将为您提供一个很好的可操作对象,其中包含可以评估和操作的重要字段。您必须检查的课程是Win32_OptionalFeatures.

要使用该功能:

  • 无参数:返回所有特征
  • -FeatureName: 返回与 匹配的特征Name。支持-like模式。
  • -InstallState: 返回与 匹配的特征InstallState。采用方便的字符串或编号值,如下图所示。

要了解安装状态,以下是每个可能的值(它们存储为 a uint32):

  1. 启用
  2. 已禁用
  3. 缺席的
  4. 未知

不幸的是,无法使用 WMI 来安装这些功能,因此您必须使用dism.exe.

于 2021-09-15T10:29:01.003 回答