Como formato corretamente este objeto no powershell?

1

Estou tentando criar um objeto com informações sobre todas as unidades que se parecem com isso:

[
  {"letter": "C:", "volumeName": "Disk C", "brand": "INTEL ModelName", "mediaType" : "Fixed hard disk media"},
  {"letter": "D:", "volumeName": "Disk D", "brand": "Seagate ModelName", "mediaType" : "Fixed hard disk media"},
]

Mas o seguinte comando powershell produz não apenas resultados mal formatados, mas também um objeto para cada propriedade do primeiro disco, em vez de colocar todas as propriedades de cada disco em um objeto:

% {New-Object PSObject -Property @{'caption' =$(wmic logicaldisk get caption $_); 'volumeName' =$(wmic logicaldisk get VolumeName $_); 'brand' =$(wmic diskdrive get caption $_); 'format' =$(wmic diskdrive get mediaType $_);}} | format-list

Atualizar

Eu tentei usar este comando:

Get-WMIObject Win32_LogicalDisk | % {New-Object PSObject -Property @{'caption' =$($_.caption); 'volumeName' =$($_.VolumeName); 'brand' =$(); 'format' =$()}} | format-list

que me dá metade dos valores

caption    : C:
brand      :
format     :
volumeName : SSD

caption    : D:
brand      :
format     :
volumeName : Disk D

caption    : E:
brand      :
format     :
volumeName : Disk e

caption    : F:
brand      :
format     :
volumeName :
    
por Un1 29.05.2018 / 12:45

1 resposta

1

Aqui está um exemplo de como você pode vincular discos a volumes usando partições de disco. A questão é que os volumes não são vinculados diretamente aos discos, mas apenas por meio de partições

Get-WmiObject Win32_DiskDrive | 
Select-Object DeviceID, Model, MediaType |
ForEach-Object { 
    $o = $_
    Get-WmiObject -Query "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='"$($_.DeviceID.replace('\','\'))'"} WHERE AssocClass = Win32_DiskDriveToDiskPartition" |
    Select-Object @{ N='Model'; E={$o.Model} }, 
                  @{ N='MediaType'; E={$o.MediaType} }, 
                  DeviceID
} |
ForEach-Object {
    $o2 = $_
    Get-WmiObject -Query "ASSOCIATORS OF {Win32_DiskPartition.DeviceID='"$($_.DeviceID)'"} WHERE AssocClass = Win32_LogicalDiskToPartition" |
    Select-Object @{ N='Letter'; E={$_.Name} }, 
                  VolumeName, 
                  @{ N='MediaType'; E={$o2.MediaType} }, 
                  @{ N='Model'; E={$o2.Model} }
}
    
por 01.06.2018 / 14:33