2014-10-07 3 views
0

http://www.powershellneedfulthings.com/?p=36 기반의 전원 쉘 스크립트를 사용하여 할당 된 드라이버 문자가없는 볼륨의 디스크 공간을 확인하고 있습니다.드라이브 문자가없는 드라이브의 Powershell 디스크 여유 공간

스크립트가 제대로 작동하지만 디스크 여유 공간이 10 % 미만인 드라이브 만 표시되는 것을 필터링하고 싶습니다. 해시 테이블과 함께 where-object 필터를 사용하는 데 문제가 있습니다. 내가 뭘하려

# calculations for displaying disk size information 
$TotalGB = @{Name="Capacity(GB)";expression={[math]::round(($_.Capacity/ 1GB),2)}} 
$FreeGB = @{Name="FreeSpace(GB)";expression={[math]::round(($_.FreeSpace/1GB),2)}} 
$FreePerc = @{Name="Free(%)";expression={[math]::round(((($_.FreeSpace/1GB)/($_.Capacity/1073741824)) * 100),0)}} 

# array declarations 
$volumes = @() 

# import server names to check 
$servers = (Get-Content .\servers.txt) 

# check disk space for volumes without drive letter 
foreach ($server in $servers){ 
    $volumes += Get-WmiObject -computer $server win32_volume | Where-Object {$_.DriveLetter -eq $null -and $_.Label -ne "System Reserved"} 
} 
$volumes | Select SystemName, Label, $TotalGB, $FreeGB, $FreePerc | Format-Table -AutoSize 

은 다음과 같습니다

Where-Object {$FreePerc -le 10} 

전류 출력은 다음과 같습니다

SystemName Label  Capacity(GB) FreeSpace(GB) Free(%) 
---------- -----  ------------ ------------- ---- 
SERVER01 X:\data\    9.97   0.89 9 
SERVER01 X:\log\    9.97   1.20 12 
SERVER01 X:\info\    9.97   3.49 35 

난 단지 10 % 미만의 디스크 여유 공간이 볼륨을 보여주고 싶습니다. 따라서이 경우에는 첫 번째 항목 만 표시해야합니다.

감사합니다.

+0

arco444 @ 감사를 업데이트 할 필요가 있지만, 그래서 우리는 우리가 필터링 할 필요 볼 수 있습니다 당신은 다음 몇 가지 샘플 출력이 있나요 영향 중 하나 – powersheller

+0

을하지 않는 것 그 방법은? 또한'Format-table' 앞에 올바른 Where-Object {$ FreePerc -le 10}을 넣으십시오. – Matt

+0

@Matt 위의 코드에 출력을 추가했습니다. 'Format-table' 전에'Where-Object {$ FreePerc -le 10}'을 추가하면 오류가 발생합니다 :'연산자에 잘못된 인수가 있습니다 '-le': "System.Collections.Hashtable"을 "10". 오류 : ""System.Int32 "유형의"10 "값을"System.Collections.Hashtable "유형으로 변환 할 수 없습니다." – powersheller

답변

0

where 절 변수 $FreePerc이 문제라고 생각합니다. Arco는 올바른 아이디어를 가지고있었습니다. 내가 PowerShell을 달리 (%)을 평가하기 위해 노력할 것이라고 생각하기 때문에

$volumes | Select SystemName, Label, $TotalGB, $FreeGB, $FreePerc | Where-Object {$_.'Free(%)' -le 10} | Format-Table -AutoSize 

나는 작은 따옴표의 속성을 넣어. 또한 Arco의 솔루션을 작동 시키려면 $FreePerc으로 전화하는 것이 더 쉽습니다. 당신은 단지 하나 개의 위치를 ​​

$volumes | Select SystemName, Label, $TotalGB, $FreeGB, $FreePerc | Where-Object {$_.($FreePerc.Name) -le 10} | Format-Table -AutoSize 
+0

정말 고마워요! 오늘은 진짜 너 덕분이다! 두 옵션 모두 완벽하게 작동합니다! :) – powersheller

관련 문제