我正在尝试使用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作为字符串而不解释它(即使不使用变量)。
答案 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 $_), ""}
希望这有帮助。