我正在编写一个 powershell 脚本,用于打印来自 AD OU 的计算机的磁盘信息。我的函数如下所示:
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
但是如果我在多台计算机上运行该功能,打印输出如下所示:
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
答案1
问题是,通过使用这个输出:
Write-Host $Computer "Disks: "$disk
PowerShell 创建对象的字符串解释$disk
。
如果将其更改为:
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
这使得您可以使用进一步的 PowerShell cmdlet 来处理这些数据、排序、分组、计算等。