Powershell磁盘信息

我正在写一个powershell脚本,它从AD OU的计算机打印磁盘信息。 我的function如下所示:

function Get-DiskInfo { $disk = Get-WMIObject Win32_Logicaldisk -ComputerName $computer | Select DeviceID, @{Name="SizeGB";Expression={$_.Size/1GB -as [int]}}, @{Name="FreeGB";Expression={[math]::Round($_.Freespace/1GB,2)}} Write-Host $Computer "Disks: "$disk 

如果我将对一台计算机运行Get-WMIObject,我会得到以下输出:

 DeviceID SizeGB FreeGB -------- ------ ------ C: 953 757,08 

但是,如果我运行多台计算机的function打印输出如下所示:

 Disks: @{DeviceID=C:; SizeGB=214; FreeGB=21,83} @{DeviceID=D:; SizeGB=932; FreeGB=740,09} @{DeviceID=E:; SizeGB=0; FreeGB=0} 

我刚刚对PowerShell新,所以有什么我应该做的不同,以获得更好的输出

整个脚本: https : //gist.github.com/ErkkaKorpi/f1b10a62ac79763fa38082b6c25e8f1b

问题是,通过使用这个输出:

 Write-Host $Computer "Disks: "$disk 

PowerShell创build$disk对象的string解释。

如果您将其更改为:

 Write-Host $Computer $disk 

你得到你想要的输出。


为了进一步改进:

 function Get-DiskInfo { Get-WMIObject Win32_Logicaldisk -ComputerName $computer | Select @{Name="Computer";Expression={$computer}}, DeviceID, @{Name="SizeGB";Expression={$_.Size/1GB -as [int]}}, @{Name="FreeGB";Expression={[math]::Round($_.Freespace/1GB,2)}} } 

这将导致计算机名称成为数据的一部分:

 Computer DeviceID SizeGB FreeGB -------- -------- ------ ------ pc2542 C: 238 32,18 pc2542 P: 408 19,18 pc2542 U: 1475 293,41 

这使您可以对这些数据,sorting,分组,计算等使用更多的PowerShell cmdlet。