我已經編寫了以下PowerShell腳本來獲取我們環境中服務器的磁盤空間信息。這裏使用Powershell的總和列
$servers = Get-Content E:\POC.txt
$array = @()
foreach($server in $servers){
$sysinfo = Get-WmiObject Win32_Volume -ComputerName $server
for($i = 0;$i -lt $sysinfo.Count; $i++){
$sname = $sysinfo[$i].SystemName
$servername = $server
$label = $sysinfo[$i].Label
if(($label) -and (!($label.Contains("FILLER")))){
write-host "Processing $label from $server"
$name = $sysinfo[$i].Name
$capacity = [math]::round(($sysinfo[$i].Capacity/1GB),2)
$fspace = [math]::round(($sysinfo[$i].FreeSpace/1GB),2)
$sused = [math]::round((($sysinfo[$i].Capacity - $sysinfo[$i].FreeSpace)/1GB),2)
$fspacepercent = [math]::Round((($sysinfo[$i].FreeSpace*100)/$sysinfo[$i].Capacity),2)
$obj = New-Object PSObject
$obj | Add-Member -MemberType NoteProperty -Name "SystemName" -Value $sname
$obj | Add-Member -MemberType NoteProperty -Name "ServerName" -Value $server
$obj | Add-Member -MemberType NoteProperty -Name "Label" -Value $label
$obj | Add-Member -MemberType NoteProperty -Name "Name" -Value $name
$obj | Add-Member -MemberType NoteProperty -Name "Capacity(GB)" -Value $capacity
$obj | Add-Member -MemberType NoteProperty -Name "FreeSpace(GB)" -Value $fspace
$obj | Add-Member -MemberType NoteProperty -Name "Used(GB)" -Value $sused
$obj | Add-Member -MemberType NoteProperty -Name "FreeSpace%" -Value $fspacepercent
$array += $obj
}
}
$array += write-output " "
$totalSize = ($array | Measure-Object 'Capacity(GB)' -Sum).Sum
$array += $totalsize
$array += write-output " "
}
$filename = "E:\VolumeReport.csv"
$array | Export-CSV $filename -NoTypeInformation
一個額外的要求是獲得容量,尺寸和可用空間爲每個服務器列的總和。我嘗試使用Measure-Object,但沒有成功。 這裏沒有輸出值。只是空白。請仔細查看此信息並提供協助。
這只是總計不起作用嗎?你打算如何將它包含在csv中? – Matt 2015-03-30 20:42:44
你需要在PowerShell v2上運行它嗎?你正在做非常冗長的Add-Member方法來解決這個問題,使用v3和up方法可能會更簡單和更短。 – FoxDeploy 2015-03-30 20:44:45
@Matt:只是總計不起作用。我剛剛修改了計算總計的代碼。 – user2068804 2015-03-30 20:51:57