【问题标题】:Powershell if within foreachPowershell 如果在 foreach 中
【发布时间】:2011-11-23 02:16:11
【问题描述】:

我正在尝试使用 PowerShell 检索有关我的硬盘驱动器的一些信息(对 PS btw 来说非常新)。

在计算驱动器的占用率时,一些驱动器未安装并且将返回大小为 0。所以我需要引入一个条件,即大小为 0 的驱动器不能计算占用率。

$fmt = "{0,-5} | {1,-18} | {2,12:N2} | {3,21:N2} | {4,17:p} | {5,-15}"
$docc = { if ( $_.size -ne "0" ) { (($_.size-$_.freespace)/$_.size)} else {"0"} }
Get-WmiObject Win32_logicaldisk | foreach -begin {
     $fmt -f "Unit","File System","Capacity(GO)", `
         "Available Space(GO)","Occupancy","Observation" } {
     $fmt -f $_.deviceID, $_.FileSystem, ($_.size/1GB), `
         ($_.freespace/1GB), $docc, ""}

前面的代码只会将 if 作为字符串返回而不解释它(即使不使用变量)。

【问题讨论】:

    标签: powershell if-statement foreach


    【解决方案1】:

    您需要执行$docc 中包含的脚本块 - 我使用下面的调用 (&) 运算符。脚本块也无权访问$_,因此我将其作为参数传递。

    $fmt = "{0,-5} | {1,-18} | {2,12:N2} | {3,21:N2} | {4,17:p} | {5,-15}"
    $docc = { param($item); if ( $item.size -gt 0 ) {
         (($item.size-$item.freespace)/$item.size)} else {"0"} }
    
    Get-WmiObject Win32_logicaldisk | foreach -begin {
         $fmt -f "Unit","File System","Capacity(GO)", `
             "Available Space(GO)","Occupancy","Observation" } {
         $fmt -f $_.deviceID, $_.FileSystem, ($_.size/1GB), `
             ($_.freespace/1GB), (& $docc $_), ""}
    

    希望这会有所帮助。

    【讨论】:

    • 非常感谢 x0n 它有效。现在我将尝试了解究竟是怎样的:-)
    猜你喜欢
    • 2017-04-09
    • 1970-01-01
    • 2020-07-21
    • 2012-05-03
    • 1970-01-01
    • 2012-03-23
    相关资源
    最近更新 更多