Информация о диске 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

0
задан 22 November 2017 в 09:56
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 с этими данными, сортировку, группировка, расчеты и др.

1
ответ дан 4 December 2019 в 16:05

Теги

Похожие вопросы