2015-06-27 15 views
5

Ho questa domanda che analizza tutti i dischi logici informazioni:Combinare le informazioni su `Get-Disk` e` LogicalDisk` in 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

Tuttavia - che sto cercando le dischi fisici informazioni e le loro partizioni/volumi informazioni:

Quindi - per i dischi fisici ho questo c ommand:

Get-Disk

Result:

enter image description here

Domanda:

voglio combinare tra questi 2 comandi. Voglio vedere il disco, e sotto ogni disco - le proprie informazioni disco logico:

  • Disco Numero 1: .... (info)
    > E 'dischi logici Info .....
  • disco Numero 2: .... (info)
    > E 'dischi logici Info .....
  • disco Numero 3: .... (info)
    > E' dischi logici Info .....
  • ecc ...

Come posso combinare tra queste 2 query?

+0

ho avuto una domanda simile un po 'di tempo fa, non so se questa risposta aiuta: http://serverfault.com/a/571669/822 – Kev

+0

@Kev Grazie ma non mi sta aiutando molto.Le lettere di unità sono il prodotto della partizione. Non voglio passare dalla lettera di unità alle sue proprietà. Voglio andare da Disco fisico -----> i loro volumi –

risposta

14

È necessario interrogare diverse classi WMI per ottenere tutte le informazioni desiderate.

partizioni possono essere mappati loro dischi utilizzando la classe Win32_DiskDriveToDiskPartition, e le unità possono essere mappati a loro partizioni tramite la classe 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

Eccellente. Esattamente quello di cui avevo bisogno. Grazie. –

+0

Ultima domanda: sono riuscito a visualizzare le informazioni in GB. quindi il numero va bene. ma voglio aggiungere postfix di testo ("' (GB) '") come '123.45 (GB)'. ma probabilmente mi manca qualcosa. cosa dovrei cambiare? guarda qui: http://i.imgur.com/95QyaI4.png –

+0

Se vuoi che un numero visualizzato come 'x GB', devi convertirlo in una stringa, ad es. ''{0: d} GB' -f [int] ($ _. Size/1GB)' –

-1

ho fatto in questo modo:

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

+2

Sei sicuro che la risposta risponda alla domanda? Prova a leggere la risposta che è stata scelta – GalAbra