我需要为服务器上的所有固定驱动器收集卷容量大小。我只能使用PowerShell 2,因为这是系统管理员在服务器上部署的内容。我可以使用Get-WmiObject Win32_Volume
函数轻松获取格式化驱动器上的信息。
$ComputerName = "."
Get-WmiObject -ComputerName "$computername" Win32_Volume -Filter "DriveType=3" | foreach {
New-Object PSObject -Property @{
SystemName = $_.SystemName
UsageDate = $((Get-Date).ToString("yyyy-MM-dd HH:mm:ss"))
Label = $_.Label
VolumeName = $_.Name
FileSystem = if ($_.FileSystem -eq $null) {"RAW"} else {$_.FileSystem}
Size = if ($_.FileSystem -eq $null) {
Show-Capacity
} else {
$([Math]::Round(($_.Capacity/1GB), 2))
}
Free = if ($_.FileSystem -eq $null) {
"0.00"
} else {
$([Math]::Round(($_.FreeSpace/1GB), 2))
}
PercentFree = if ($_.Capacity -gt 0) {
$([Math]::Round((([float]$_.FreeSpace/[float]$_.Capacity) * 100), 2))
} else {
'0.00'
}
}
}
Show-Capacity
功能如下:
function Show-Capacity {
$drive=$_.Name
$dpscript = @"
Select Volume '$drive'
Detail Volume
"@
$Temp= @()
[array]$Temp += ,$dpscript | diskpart
foreach ($line in $Temp) {
if ($line.StartsWith("Volume Capacity") ) {
$Values = $line.Split(":")
}
}
$Capacity = $Values.Trim("G", "T", "M", "B", " ")
$Capacity[1]
}
格式化的驱动器显示如下:
UsageDate : 2017-11-09 08:08:17 SystemName : MyServerName Label : VolumeName : C:\ Size : 99.9 Free : 77.04 PercentFree : 77.11
Raw Drives显示如下:
UsageDate : 2017-11-09 08:08:15 SystemName : MyServerName Label : VolumeName : I:\ Size : Free : 0.00 PercentFree : 0.00
我希望Raw Drives以这种方式出现:
UsageDate : 2017-11-09 08:08:15 SystemName : MyServerName Label : VolumeName : I:\ Size : 12000.0 Free : 0.00 PercentFree : 0.00
在PowerShell日志中,我看到错误:"无法索引到空数组。在{path}:12 char 11.我也得到一个修剪错误,但这是一个较小的问题。我一直在研究这个问题并且阅读了很多帖子已经有大约2个星期了,并且还没有成功。
我尝试了这一帖子中列出的方法: https://blogs.technet.microsoft.com/heyscriptingguy/2013/08/30/automating-diskpart-with-windows-powershell-part-5/
这将始终在本地计算机上运行,但将导出为CSV并进行汇总。