Я пишу сценарий 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
Проблема в том, что, используя этот вывод:
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 с этими данными, сортировку, группировка, расчеты и др.