Powershell获取机箱类型信息

时间:2019-03-15 14:20:44

标签: powershell

我目前正在使用Powershell脚本,该脚本应该检索我正在使用的计算机的类型,并且我已经查看了几个示例,但是我无法使其正常工作。我想检索机箱类型,以便确定是在笔记本电脑还是台式机上工作。

这是我的代码:

$isLaptop = [bool](Get-WmiObject -Class Win32_SystemEnclosure -Property 
ChassisTypes | Where-Object ChassisTypes -in '{9}', '{10}', '{14}')

问题在于,即使我在台式机上运行脚本,尽管台式机的机箱类型为{3},我仍会得到正确的响应。

我可能忽略了一些愚蠢的事情,但是如果有人可以在这里给我一些帮助,那将是很好的,我也是powershell的新手。

3 个答案:

答案 0 :(得分:2)

这是Mark可读性的替代选择:

#requires -Version 3

$isLaptop = [bool](Get-WmiObject -Class Win32_SystemEnclosure |
    Where-Object ChassisTypes -in '{9}', '{10}', '{14}')

但是,在尝试重现您的问题之后,您没有使用正确的类型。该命令的输出如下所示:

ChassisTypes : {3}

您实际拥有的是一个UInt16数组。因此,您需要比较的是一个集合到另一个集合:

[uint16[]]$laptop = 9, 10, 14

$isLaptop = foreach ($chassis in (Get-CimInstance -ClassName Win32_SystemEnclosure).ChassisTypes) {
    if ($chassis -in $laptop) {
        $true
        break
    }
}

然后进一步细分:

#requires -Version 4

$isLaptop = [bool](Get-CimInstance -ClassName Win32_SystemEnclosure).
    ChassisTypes.
    Where({ $PSItem -in 9, 10, 14 })

答案 1 :(得分:0)

尝试一下:

$ChassisType = (Get-CimInstance -ClassName Win32_SystemEnclosure).ChassisTypes

if ($ChassisType -eq 9 -or $ChassisType -eq 10 -or $ChassisType -eq 14) {
    $isLaptop = $true
}
else {
    $isLaptop = $false
}

$isLaptop

答案 2 :(得分:0)

这段代码是 taken from here 并做成了一个函数。它创建一个哈希表并将值转换为人类可读的形式。

我已经在 5.1 和 7.1 中对此进行了测试,并且适用于这两个版本。所以它是未来一段时间的证明。

Function Get-ChassisType() {

  $ChassisTypes = @{
    Name = 'ChassisType'
    Expression = {
      # property is an array, so process all values
      $result = foreach($value in $_.ChassisTypes)
      {
        switch([int]$value)
        {
          1          {'Other'}
          2          {'Unknown'}
          3          {'Desktop'}
          4          {'Low Profile Desktop'}
          5          {'Pizza Box'}
          6          {'Mini Tower'}
          7          {'Tower'}
          8          {'Portable'}
          9          {'Laptop'}
          10         {'Notebook'}
          11         {'Hand Held'}
          12         {'Docking Station'}
          13         {'All in One'}
          14         {'Sub Notebook'}
          15         {'Space-Saving'}
          16         {'Lunch Box'}
          17         {'Main System Chassis'}
          18         {'Expansion Chassis'}
          19         {'SubChassis'}
          20         {'Bus Expansion Chassis'}
          21         {'Peripheral Chassis'}
          22         {'Storage Chassis'}
          23         {'Rack Mount Chassis'}
          24         {'Sealed-Case PC'}
          default    {"$value"}
        }

      }
      $result
    }
  }

  return (Get-CimInstance -ClassName Win32_SystemEnclosure | Select-Object -Property $ChassisTypes).ChassisType

}

Get-ChassisType

# When using a desktop.
# >PS ((Get-ChassisType) -eq "Desktop")
# >PS True

# When using a desktop.
# >PS Get-ChassisType
# >PS Desktop

# When using a laptop.
# >PS Get-ChassisType
# >PS Laptop