web-dev-qa-db-fra.com

Comment filtrer correctement une liste de diskdrive WMIC

J'essaie de filtrer les résultats d'une liste WMIC avec where-object Mais malheureusement, cela ne semble pas fonctionner.

wmic diskdrive list brief  | Where-Object -Property "Caption" -Contains "Samsung"

Le résultat filtré est vide, le résultat non filtré est en tant que tel:

Caption                       DeviceID            Model                Partitions  Size

HGST HUH721212ALE600          \\.\PHYSICALDRIVE1  HGST HUH721212ALE600 1           12000132426240
OCZ-VERTEX3                   \\.\PHYSICALDRIVE3  OCZ-VERTEX3          1           240054796800
Samsung SSD 970 EVO Plus 1TB  \\.\PHYSICALDRIVE5  Samsung SSD 970 EVO Plus 1TB  4           1000202273280
ST16000NM001G-2KK103          \\.\PHYSICALDRIVE4  ST16000NM001G-2KK103 1           16000900392960
ST6000NM0024-1HT17Z           \\.\PHYSICALDRIVE0  ST6000NM0024-1HT17Z  1           6001172513280
Samsung SSD 840 PRO Series    \\.\PHYSICALDRIVE2  Samsung SSD 840 PRO Series    1           512105932800

Comment filtrer correctement?

En fin de compte, je veux obtenir le DeviceID, par exemple, PHYSICALDRIVE5

4

WMIC n'est pas une cmdlet PowerShell et ne contient pas les propriétés Where-Object cherche.

Vous pouvez vérifier cela en essayant de piler votre commande à Get-Member.

À l'aide de Select-String Comme mentionné dans l'autre réponse est un excellent moyen de filtrer toute sortie à PowerShell et mérite d'être mémorable.

Vous pouvez également obtenir les informations que vous recevez du WMIC à partir d'une cmdlet PowerShell, puis de tous les commandements de filtrage PowerShell et de la propriété sont vivants.

Get-CimInstance Win32_DiskDrive | Where-Object {$_.Caption -like "*samsung*" }

En cours d'exécution sur mon système avec AMD produit:

PS C:\Users\ishmael> Get-CimInstance Win32_DiskDrive | Where-Object {$_.Caption -like "*AMD*" }

DeviceID           Caption                                   Partitions Size          Model
--------           -------                                   ---------- ----          -----
\\.\PHYSICALDRIVE2 AMD-RAID Samsung SSD 970 SCSI Disk Device 3          1000202273280 AMD-RAID Samsung SSD 970 SCSI Disk Device
\\.\PHYSICALDRIVE1 AMD-RAID Array 2  SCSI Disk Device        1          999091860480  AMD-RAID Array 2  SCSI Disk Device

panne de commande

Get-CiminStance

CIM CMDlets a été ajouté en remplacement des cmdlets WMI. CIM signifie un modèle d'information commun et est utilisé dans ce cas pour accéder à un ensemble normalisé d'informations sur Windows. DMTF redgateMS CIMCMDlets

Win32_DiskDrive

Une des classes CIM disponibles pour interroger. Il existe de nombreuses classes CIM. Essayer Get-CimClass Win32* Pour avoir une idée des types de classes CIM disponibles qui sont préfixés avec Win32.

|

Tuyau. Envoie la sortie à gauche à la commande à droite.

Où-objet

Où-objet peut être utilisé pour filtrer la sortie PowerShell qui a été conduite à celle-ci. Pour voir quel type d'objets pouvant être filtrés, tuyez votre commande à Get-Member Tout d'abord, ce qui vous montrera une liste des objets possibles.

{$ _. Légende -itant " Samsung"}

  • $_ est la syntaxe PowerShell pour Self. Fait référence à l'entrée de la canalisation.
  • .Caption l'objet membre de $_ nous aimerions interroger
  • -like Opérateur de comparaison PowerShell qui permet aux modèles de caractères génériques opérateurs PS
  • "*samsung*" Notre chaîne de recherche, les astérisques Wildcard dirigent et suivent notre chaîne pour vous assurer que nous correspondons Samsung n'importe où dans la sortie. En quittant le principal Wildcard montrera des résultats qui commencent par Samsung.
8
Jim Diroff II

cela ne répond pas directement à votre question. [Grin] Cependant, il donne une version plus "PowerShell-ish" de l'appel WMIC.EXE que vous avez utilisé.

ce qu'il fait ...

  • définit la chaîne cible pour filtrer avec
  • obtient les informations sur disque pour tous les disques
  • filtre les disques indésirables
  • construit un nouvel objet avec uniquement les propriétés recherchées
    [.____] L'élément "DeviceID" WMIC semble mapper dans la propriété ".Disknumber".
  • garnie le "tas de gros capitale" indésirable dans mon numéro de numéro de série
  • envoie cela à un $ var
  • affiche que sur l'écran

voici le code ...

$Maker = 'crucial'

$TargetDiskInfo = Get-Disk |
    Where-Object -Property FriendlyName -Match $Maker |
    Select-Object -Property DiskNumber, Manufacturer, Model,
        # the SN on my ssd has a BUNCH of leading whitespace
        #    the ".Trim()" gets rid of that
        @{n = 'SerialNumber'; e = {$_.SerialNumber.Trim()}}

$TargetDiskInfo

le résultat ...

DiskNumber Manufacturer Model            SerialNumber
---------- ------------ -----            ------------
         0 Crucial_     CT1024MX200S     153910A893E4
1
Lee_Dailey