Назад | Перейти на главную страницу

Информация о диске Powershell

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