2015-06-27 9 views
5

mam tej kwerendy, która skanuje wszystkie dysków logicznych informacje:Połączyć informacje "Get-Disk` i" LogicalDisk "w PowerShell?

Write-Host "Drive information for $env:ComputerName" 

Get-WmiObject -Class Win32_LogicalDisk | 
    Where-Object {$_.DriveType -ne 5} | 
    Sort-Object -Property Name | 
    Select-Object Name, VolumeName, VolumeSerialNumber,SerialNumber, FileSystem, Description, VolumeDirty, ` 
     @{"Label"="DiskSize(GB)";"Expression"={"{0:N}" -f ($_.Size/1GB) -as [float]}}, ` 
     @{"Label"="FreeSpace(GB)";"Expression"={"{0:N}" -f ($_.FreeSpace/1GB) -as [float]}}, ` 
     @{"Label"="%Free";"Expression"={"{0:N}" -f ($_.FreeSpace/$_.Size*100) -as [float]}} | 
    Format-Table -AutoSize 

The output is:

enter image description here

Jednak - Jestem po dyskach fizycznych informacji i ich partycje/tom informacja:

Więc - dla dysków fizycznych mam to c ommand:

Get-Disk

Result:

enter image description here

Pytanie:

chcę połączyć między tymi 2 poleceń. Chcę zobaczyć dysku, i poniżej każdego dysku - jego logiczną informacji na dysku:

  • Disk Numer 1: .... (info)
    > To dysków logicznych informacji .....
  • Disk Ilość 2: .... (info)
    > To dysków logicznych informacji .....
  • Disk Numer 3: .... (info)
    > To dysków logicznych informacji .....
  • itd ...

Jak mogę połączyć te dwa zapytania?

+0

Miałem podobny pytanie jakiś czas temu, nie wiem, czy ta odpowiedź pomaga: http://serverfault.com/a/571669/822 – Kev

+0

@Kev Dzięki, ale to niewiele mi pomaga.Litery dysków są wytworem partycji. Nie chcę iść od litery dysku do jego właściwości. Chcę przejść z dysku fizycznego -----> ich wolumeny –

Odpowiedz

14

Musisz zapytać kilka klas WMI, aby uzyskać wszystkie potrzebne informacje.

Przegrody mogą być odwzorowywane na swoich dyskach przy użyciu klasy Win32_DiskDriveToDiskPartition i napędy mogą być odwzorowane na ich partycji poprzez klasy Win32_LogicalDiskToPartition.

Get-WmiObject Win32_DiskDrive | % { 
    $disk = $_ 
    $partitions = "ASSOCIATORS OF " + 
       "{Win32_DiskDrive.DeviceID='$($disk.DeviceID)'} " + 
       "WHERE AssocClass = Win32_DiskDriveToDiskPartition" 
    Get-WmiObject -Query $partitions | % { 
    $partition = $_ 
    $drives = "ASSOCIATORS OF " + 
       "{Win32_DiskPartition.DeviceID='$($partition.DeviceID)'} " + 
       "WHERE AssocClass = Win32_LogicalDiskToPartition" 
    Get-WmiObject -Query $drives | % { 
     New-Object -Type PSCustomObject -Property @{ 
     Disk  = $disk.DeviceID 
     DiskSize = $disk.Size 
     DiskModel = $disk.Model 
     Partition = $partition.Name 
     RawSize  = $partition.Size 
     DriveLetter = $_.DeviceID 
     VolumeName = $_.VolumeName 
     Size  = $_.Size 
     FreeSpace = $_.FreeSpace 
     } 
    } 
    } 
} 
+0

Doskonałe. Dokładnie to, czego potrzebowałem. Dziękuję. –

+0

Ostatnie pytanie: Udało mi się wyświetlić informacje w GB. więc liczba jest w porządku. ale chcę dodać przyrostek tekstu ("' (GB) '") jak '123.45 (GB)'. ale prawdopodobnie czegoś brakuje. co powinienem zmienić? zobacz tutaj: http://i.imgur.com/95QyaI4.png –

+0

Jeśli chcesz, aby liczba była wyświetlana jako 'x GB', musisz ją przekonwertować na ciąg znaków, np. '' {0: d} GB '-f [int] ($ _. Rozmiar/1 GB) ' –

-1

zrobiłem to tak:

[String] (. [Math] :: round ($ _ Rozmiar/1GB, 2)) + 'GB'

+2

Czy na pewno twoja odpowiedź pasuje do pytania? Spróbuj przeczytać odpowiedź, która została wybrana – GalAbra