Powershell如果在foreach内

时间:2011-11-23 02:16:12

标签: powershell if-statement foreach

我正在尝试使用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作为字符串而不解释它(即使不使用变量)。

1 个答案:

答案 0 :(得分:2)

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

$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 $_), ""}

希望这有帮助。