Function PowerShell从函数返回多个WMI对象值

Function PowerShell从函数返回多个WMI对象值,function,powershell,object,Function,Powershell,Object,我正在创建一个函数,从提供的服务器名称中提取基本驱动器信息。在这个函数中,我想返回驱动器号、可用空间、总空间和可用百分比。我正在努力处理返回对象以及如何返回多个值。我没有收到预期的驱动器号。对于驱动器号,我得到类似@(DeviceID=C:)的东西,或者我得到一个长字符串作为驱动器号,看起来像UNC。如何将多个值作为对象从函数传回?(我的PowerShell体验大约1个月) 代码 首先,小心使用格式cmdlet。它们只能在最后使用,不能保存在变量中 您的新对象cmdlet也没有引用您的$disk

我正在创建一个函数,从提供的服务器名称中提取基本驱动器信息。在这个函数中,我想返回驱动器号、可用空间、总空间和可用百分比。我正在努力处理返回对象以及如何返回多个值。我没有收到预期的驱动器号。对于驱动器号,我得到类似@(DeviceID=C:)的东西,或者我得到一个长字符串作为驱动器号,看起来像UNC。如何将多个值作为对象从函数传回?(我的PowerShell体验大约1个月)

代码


首先,小心使用
格式
cmdlet。它们只能在最后使用,不能保存在变量中

您的
新对象
cmdlet也没有引用您的
$diskinfo
变量。因此,
$\设备ID
将是未定义的,因为没有任何内容沿管道传递

另外,额外的子表达式运算符是不必要的
$()

我个人喜欢
[pscustomobject]
类型加速器,而不是使用
新对象
,因为它更具可读性

function Get-DiskPercentFree {

    [CmdletBinding(ConfirmImpact = 'Low')]
    param (
        [string]$ServerName
    )

    $DiskInfo = Get-WmiObject Win32_LogicalDisk -ComputerName $($ServerName)  -Filter DriveType=3

    [PSCustomObject]@{
        'ServerName'     = $ServerName
        'DeviceID'       = $DiskInfo.DeviceID
        'Size (GB)'      = [math]::Truncate($DiskInfo.Size / 1GB)
        'Freespace (GB)' = [math]::Truncate($DiskInfo.FreeSpace / 1GB)
        'Percent Free'   = [math]::Round(($DiskInfo.FreeSpace / $DiskInfo.Size) * 100)
    }
}

Get-DiskPercentFree "DevServerName"

最后,您是否尝试了
Get Volume
cmdlet

不,我没有尝试Get-Volume cmdlet。让我试试看。
function Get-DiskPercentFree {

    [CmdletBinding(ConfirmImpact = 'Low')]
    param (
        [string]$ServerName
    )

    $DiskInfo = Get-WmiObject Win32_LogicalDisk -ComputerName $($ServerName)  -Filter DriveType=3

    [PSCustomObject]@{
        'ServerName'     = $ServerName
        'DeviceID'       = $DiskInfo.DeviceID
        'Size (GB)'      = [math]::Truncate($DiskInfo.Size / 1GB)
        'Freespace (GB)' = [math]::Truncate($DiskInfo.FreeSpace / 1GB)
        'Percent Free'   = [math]::Round(($DiskInfo.FreeSpace / $DiskInfo.Size) * 100)
    }
}

Get-DiskPercentFree "DevServerName"