Powershell select 问题

Powershell select problems

我正在尝试让所有可用 space 的磁盘都超过 10%。出于某种原因,最后它只打印名称和容量,而没有 select 的其他部分?如果我删除 @expression,它会在 "bits" 中打印大小,有什么想法吗?

gwmi Win32_Volume | where {$_.Name –like "C:\"} | ft Name, 
  @{ Name="Capacity" ; Expression = { "{0:N1}" -f ( $_.Capacity /1gb)}}
  @{ Name="FreeSpace" ; Expression = { "{0:N1}" -f ( $_.FreeSpace/1gb)}}, 
  @{ Name="PercentFree" ; Expression = { "{0:P1}" -f (1 - $_.FreeSpace/ $_.Capacity) }} |
    select Name, Capacity, FreeSpace,  PercentFree | where {$_.PercentFree –gt 10 }  

Name  Capacity
C:\      465.4

Format-Table 获取您的输出并使它在控制台中看起来很漂亮,但它也会切断您对输出的访问。您需要进行的任何格式化操作都应始终在您获得要格式化的数据后进行。

你很接近,做了一些小改动,我让你的代码像这样工作(你还缺少第二行的逗号 :P ):

gwmi Win32_Volume | where {$_.Name –like "C:\"} | Select Name,
    @{ Name="Capacity" ; Expression = { "{0:N1}" -f ( $_.Capacity /1gb)}},
    @{ Name="FreeSpace" ; Expression = { "{0:N1}" -f ( $_.FreeSpace/1gb)}}, 
    @{ Name="PercentFree" ; Expression = { "{0:P1}" -f (1 -   $_.FreeSpace/ $_.Capacity) }}  | 
    where {$_.PercentFree –gt 10 } | ft Name, Capacity, FreeSpace,  PercentFree

获取原始数据 -> Select-Object 或 Where-Object 根据需要多次 -> 格式

你早期使用 FT,然后在没有对象时尝试 select-对象。

这是一个获取驱动器信息、计算可用百分比、将可用百分比添加到驱动器对象和 returns 自定义对象的函数。

function drivePercentage {
    param( [string]$ComputerName )

    $drives = gwmi Win32_Volume -Filter "DriveType = 3"

    foreach ($drive in $drives) {
        $PercentFree = [Math]::round($drive.freespace / $drive.Capacity*1000)/1000
    $drive | Add-Member -MemberType NoteProperty -Name PercentFree -Value $PercentFree

    Write-Output $drive

    }

}

drivePercentage | FT Name,
    @{ Name="Capacity   " ; Expression = { "{0:N2} GB" -f ($_.Capacity /1gb)}},
    @{ Name="FreeSpace  " ; Expression = { "{0:N2} GB" -f ($_.FreeSpace/1gb)}}, 
    @{ Name="PercentFree" ; Expression = { "{0:P1}" -f ($_.PercentFree)} }