首页 > 解决方案 > 使用 WMI 类输出

问题描述

我正在尝试编写一个函数,为我提供有关驱动器的一些信息(作为函数输入参数)。在进行原型设计时,我得到了想要的结果:制造商。

$c = gwmi -class win32_logicaldisk -filter "deviceid = 'C:'"
$d = $c.GetRelated()
$d.Manufacturer

To Be Filled By O.E.M.

当我将上面的原型放入一个函数中时,我得到了一种数组:

Manufacturer
------------
{$null,$null, To Be filled by O.E.M., $null}

函数(稍后我将使用变量:$a,$b..):

    function Get-Test
    {
    [CmdletBinding()]
    param(
    [parameter(ValueFromPipeline=$true)]
    [ValidateNotNullOrEmpty()]
    [string[]]$drives = 'C:'
    )

    Begin
    {
        $output=@()
    }
    Process
    {
        foreach($drive in $drives)
        {
            $a = gwmi -class win32_logicaldisk -filter "deviceid = '$drive'" | 
            select deviceid, description, FileSystem, VolumeSerialNumber, drivetype,volumename,@{n="FreeSpaceGB";e={"{0:N2}" -f ($_.Freespace/1GB)}},@{n="Size";e={"{0:N2}" -f ($_.Size/1GB)}}

            $b = gwmi win32_volume -Filter "DriveLetter = '$drive'"
            $c = gwmi -class win32_logicaldisk -filter "deviceid = '$drive'"
            $d = $c.GetRelated()
            $output += [pscustomobject]@{
            Manufacturer = $d.Manufacturer
            }
        }
    }
    End
    {
        $output
    }
}

只有当我格式化输出时它才能正常工作:

Manufacturer = $($d.Manufacturer -ne $null)

我仍然不明白为什么我必须以这种方式格式化输出?谢谢你的帮助。

标签: powershellwmi

解决方案


推荐阅读