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
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.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 ...
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