about_WQL

Letzte Aktualisierung: Mai 2014

Betrifft: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

THEMA

about_WQL

KURZE BESCHREIBUNG

Beschreibt die WMI Query Language (WQL), die zum Abrufen von WMI-Objekten in Windows PowerShell® verwendet werden kann.

LANGE BESCHREIBUNG

WQL ist die Abfragesprache für die Windows-Verwaltungsinstrumentation (Windows Management Instrumentation, WMI), also die Sprache, die zum Abrufen von Informationen aus WMI verwendet wird.

Sie müssen nicht unbedingt WQL verwenden, um in Windows PowerShell eine WMI-Abfrage durchzuführen. Stattdessen können Sie die Parameter der Get-WmiObject- oder Get-CimInstance-Cmdlets verwenden. WQL-Abfragen sind etwas schneller als Get-WmiObject-Standardbefehle, und die verbesserte Leistung ist spürbar, wenn die Befehle auf Hunderten von Systemen ausgeführt werden. Achten Sie jedoch darauf, dass die Zeit, die Sie zum Schreiben einer erfolgreichen WQL-Abfrage benötigen, nicht die Leistungssteigerung aufwiegt.

Die grundlegenden WQL-Anweisungen, die Sie zur Verwendung von WQL benötigen, sind Select, Where und From.

ANWENDUNGSFÄLLE FÜR WQL

Beim Arbeiten mit WMI und insbesondere mit WQL sollten Sie nicht vergessen, dass Sie auch Windows PowerShell verwenden. Wenn eine WQL-Abfrage nicht wie erwartet funktioniert, ist es häufig einfacher, einen Windows PowerShell-Standardbefehl zu verwenden, als die WQL-Abfrage zu debuggen.

Außer wenn Sie große Mengen an Daten über Remote-Systeme mit eingeschränkter Bandbreite abrufen, ist es nur selten produktiv, stundenlang zu versuchen, eine komplizierte und verschachtelte WQL-Abfrage zu perfektionieren, wenn es stattdessen ein durchaus akzeptables Windows-Cmdlet gibt, das dieselbe Wirkung erzielt, wenn auch etwas langsamer.

VERWENDEN DER SELECT-ANWEISUNG

Eine typische WMI-Abfrage beginnt mit einer Select-Anweisung, die alle Eigenschaften oder bestimmte Eigenschaften einer WMI-Klasse abruft. Verwenden Sie ein Sternchen (*), um alle Eigenschaften einer WMI-Klasse auszuwählen. Das From-Schlüsselwort gibt die WMI-Klasse an.

Eine Select-Anweisung hat folgendes Format:

        Select <property> from <WMI-class>

Die folgende Select-Anweisung wählt z. B. alle Eigenschaften (*) aus den Instanzen der Win32_Bios WMI-Klasse aus.

        Select * from Win32_Bios

Um eine bestimmte Eigenschaft einer WMI-Klasse auswählen, platzieren Sie den Eigenschaftennamen zwischen den Select- und From-Schlüsselwörtern.

Die folgende Abfrage wählt nur den Namen des BIOS aus der Win32_Bios WMI-Klasse aus. Der Befehl speichert die Abfrage in der $queryName-Variablen.

        Select Name from Win32_Bios

Um mehr als eine Eigenschaft auszuwählen, verwenden Sie Kommas zum Trennen der Eigenschaftennamen. Die folgende WMI-Abfrage wählt den Namen und die Version der Win32_Bios WMI-Klasse aus. Der Befehl speichert die Abfrage in der $queryNameVersion-Variablen.

        Select name, version from Win32_Bios

VERWENDEN DER WQL-ABFRAGE

Es gibt zwei Methoden zum Verwenden der WQL-Abfrage in einem Windows PowerShell-Befehl.

Verwendung des Get-WmiObject-Cmdlets

Verwendung des Get-CimInstance-Cmdlets

Verwenden Sie die Typbeschleuniger [wmisearcher].

VERWENDUNG DES GET-WMIOBJECT-CMDLETS

Die grundlegendste Art der Verwendung der WQL-Abfrage besteht darin, sie in Anführungszeichen (als Zeichenfolge) einzuschließen und dann die Abfragezeichenfolge als Wert des Query-Parameters des Get-WmiObject-Cmdlets zu verwenden, wie im folgenden Beispiel gezeigt.

        PS C:\> Get-WmiObject -Query "Select * from Win32_Bios"
        SMBIOSBIOSVersion : 8BET56WW (1.36 )
        Manufacturer      : LENOVO
        Name              : Default System BIOS
        SerialNumber      : R9FPY3P
        Version           : LENOVO – 1360

Sie können die WQL-Anweisung auch in einer Variablen speichern und die Variable als Wert des Query-Parameters verwenden, wie im folgenden Befehl dargestellt.

        PS C:\> $query = "Select * from Win32_Bios"
        PS C:\> Get-WmiObject –Query $query

Sie können beide Formate mit jeder WQL-Anweisung verwenden. Der folgende Befehl verwendet die Abfrage in der $queryName-Variablen, um nur die Name- und Versionseigenschaften des System-BIOS abzurufen.

        PS C:\> $queryNameVersion = "Select Name, Version from Win32_Bios"
        PS C:\> Get-WmiObject -Query $queryNameVersion
        
        __GENUS          : 2
        __CLASS          : Win32_BIOS
        __SUPERCLASS     :
        __DYNASTY        :
        __RELPATH        :
        __PROPERTY_COUNT : 1
        __DERIVATION     : {}
        __SERVER         :
        __NAMESPACE      :
        __PATH           :
        Name             : Default System BIOS
        Version          : LENOVO - 1360

Denken Sie daran, dass Sie auch die Parameter des Get-WmiObject-Cmdlets verwenden können, um das gleiche Ergebnis zu erzielen. Der folgende Befehl ruft z. B. ebenfalls die Name- und Versionseigenschaften der Instanzen der Win32_Bios-WMI-Klasse ab.

        PS C:\> Get-WmiObject –Class Win32_Bios -Property Name, Version
        __GENUS          : 2
        __CLASS          : Win32_BIOS
        __SUPERCLASS     :
        __DYNASTY        :
        __RELPATH        :
        __PROPERTY_COUNT : 1
        __DERIVATION     : {}
        __SERVER         :
        __NAMESPACE      :
        __PATH           :
        Name             : Default System BIOS
        Version          : LENOVO - 1360

VERWENDUNG DES GET-CIMINSTANCE-CMDLETS

Ab Windows PowerShell 3.0 können Sie das Get-CimInstance-Cmdlet zur Ausführung von WQL-Abfragen verwenden.

Get-CimInstance ruft Instanzen von CIM-kompatiblen Klassen ab, wozu auch WMI-Klassen zählen. Mit den in Windows PowerShell 3.0 eingeführten CIM-Cmdlets werden die gleichen Aufgaben wie mit WMI-Cmdlets ausgeführt. Die CIM-Cmdlets entsprechen WS-Management (WSMan)-Standards und dem Common Information Model (CIM)-Standard. Dadurch können die Cmdlets zum Verwalten von Windows-Computern und von Computern mit anderen Betriebssystemen die gleichen Verfahren verwenden.

Der folgende Befehl verwendet das Get-CimInstance-Cmdlet zum Ausführen einer WQL-Abfrage.

Jede WQL-Abfrage, die mit Get-WmiObject verwendet werden kann, kann auch mit Get-CimInstance verwendet werden.

        PS C:\> Get-CimInstance -Query "Select * from Win32_Bios"
        SMBIOSBIOSVersion : 8BET56WW (1.36 )
        Manufacturer      : LENOVO
        Name              : Default System BIOS
        SerialNumber      : R9FPY3P
        Version           : LENOVO – 1360

Get-CimInstance gibt ein CimInstance-Objekt zurück, anstelle des ManagementObject-Objekts, das von Get-WmiObject zurückgegeben wird, aber die Objekte sind sich sehr ähnlich.

        PS C:\>(Get-CimInstance -Query "Select * from Win32_Bios").GetType().FullName
        Microsoft.Management.Infrastructure.CimInstance
        PS C:\>(Get-WmiObject -Query "Select * from Win32_Bios").GetType().FullName
        System.Management.ManagementObject

VERWENDUNG DES TYPBESCHLEUNIGERS [wmisearcher]

Der Typbeschleuniger [wmisearcher] erstellt ein ManagementObjectSearcher-Objekt aus einer Zeichenfolge der WQL-Anweisung. Das ManagementObjectSearcher-Objekt verfügt über viele Eigenschaften und Methoden, aber die einfachste Methode ist die Get-Methode. Diese ruft die angegebene WMI-Abfrage auf und gibt die resultierenden Objekte zurück.

Mithilfe von [wmisearcher] erhalten Sie einfachen Zugriff auf die ManagementObjectSearcher-.NET Framework-Klasse. Auf diese Weise können Sie WMI-Abfragen durchführen und die Art und Weise konfigurieren, wie die Abfrage werden durchgeführt wird.

So verwenden Sie die den Typbeschleuniger [wmisearcher]:

1. Wandeln Sie die WQL-Zeichenfolge in ein ManagementObjectSearcher-Objekt um.

2. Rufen Sie die Get-Methode des ManagementObjectSearcher-Objekts auf.

Der folgende Befehl wandelt beispielsweise die Abfrage „Alles auswählen“ um, speichert das Ergebnis in der $bios-Variablen und ruft dann die Get-Methode des ManagementObjectSearcher-Objekts in der $bios-Variablen auf.

        PS C:\> $bios = [wmisearcher]"Select * from Win32_Bios"
        PS C:\> $bios.Get()
        
        SMBIOSBIOSVersion : 8BET56WW (1.36 )
        Manufacturer      : LENOVO
        Name              : Default System BIOS
        SerialNumber      : R9FPY3P
        Version           : LENOVO – 1360

HINWEIS:

Standardmäßig werden nur die ausgewählten Objekteigenschaften angezeigt. Diese Eigenschaften werden in der Types.ps1xml-Datei definiert.

Sie können den Typbeschleuniger [wmisearcher] zum Umwandeln der Abfrage oder der Variablen verwenden. Im folgenden Beispiel wird der Typbeschleuniger [wmisearcher] verwendet, um die Variable umzuwandeln. Das Ergebnis ist dasselbe.

        PS C:\> [wmisearcher]$bios = "Select * from Win32_Bios"
        PS C:\> $bios.Get()
        
        SMBIOSBIOSVersion : 8BET56WW (1.36 )
        Manufacturer      : LENOVO
        Name              : Default System BIOS
        SerialNumber      : R9FPY3P
        Version           : LENOVO – 1360

Bei Verwendung des Typbeschleunigers [wmisearcher] ändert dieser die Abfragezeichenfolge in ein ManagementObjectSearcher-Objekt, wie in den folgenden Befehlen dargestellt.

        PS C:\>$a = "Select * from Win32_Bios"
        PS C:\>$a.GetType().FullName
        System.String
        PS C:\>$a = [wmisearcher]"Select * from Win32_Bios"
        PS C:\>$a.GetType().FullName
        System.Management.ManagementObjectSearcher

Dieses Befehlsformat funktioniert für jede Abfrage. Der folgende Befehl ruft den Wert der Name-Eigenschaft der Win32_Bios-WMI-Klasse ab.

        PS C:\> $biosname = [wmisearcher]"Select Name from Win32_Bios"
        PS C:\> $biosname.Get()
        
        __GENUS          : 2
        __CLASS          : Win32_BIOS
        __SUPERCLASS     :
        __DYNASTY        :
        __RELPATH        :
        __PROPERTY_COUNT : 1
        __DERIVATION     : {}
        __SERVER         :
        __NAMESPACE      :
        __PATH           :
        Name             : Default System BIOS

Sie können diesen Vorgang in einem einzigen Befehl ausführen, obwohl der Befehl etwas schwieriger zu interpretieren ist.

In diesem Format verwenden Sie den Typbeschleuniger [wmisearcher], um zuerst die WQL-Abfragezeichenfolge in ein ManagementObjectSearcher-Objekt umzuwandeln und um dann die Get-Methode für das Objekt aufzurufen – alles in einem einzigen Befehl. Die Klammern (), welche die umgewandelte Zeichenfolge einschließen, weisen Windows PowerShell an, die Zeichenfolge vor dem Aufrufen der Methode umzuwandeln.

        PS C:\> ([wmisearcher]"Select name from Win32_Bios").Get()
        __GENUS          : 2
        __CLASS          : Win32_BIOS
        __SUPERCLASS     :
        __DYNASTY        :
        __RELPATH        :
        __PROPERTY_COUNT : 1
        __DERIVATION     : {}
        __SERVER         :
        __NAMESPACE      :
        __PATH           :
        Name             : Default System BIOS

VERWENDEN DER EINFACHEN WHERE-WQL-ANWEISUNG

Eine Where-Anweisung legt die Bedingungen für die Daten fest, die von einer Select-Anweisung zurückgegeben werden.

Die Where-Anweisung hat das folgende Format:

        where <property> <operator> <value>

Beispiel:

        where Name = 'Notepad.exe'

Die Where-Anweisung wird zusammen mit der Select-Anweisung verwendet, wie im folgenden Beispiel gezeigt.

        Select * from Win32_Process where Name = 'Notepad.exe'

Bei Verwendung der Where-Anweisung müssen Name und Wert der Eigenschaftsnamen genau stimmen.

Beispielsweise ruft der folgende Befehl die Notepad-Prozesse auf dem lokalen Computer auf.

        PS C:\> Get-WmiObject -Query "Select * from Win32_Process where name = 'Notepad.exe'"

Jedoch schlägt der folgende Befehl fehl, da der Prozessname die Dateinamenerweiterung „.exe“ enthält.

        PS C:\> Get-WmiObject -Query "Select * from Win32_Process where name = 'Notepad'"

VERGLEICHSOPERATOREN IN DER WHERE-ANWEISUNG

Die folgenden Operatoren sind in einer Where-WQL-Anweisung gültig.

    Operator    Description
    -----------------------
    =           Equal
    !=          Not equal
    <>          Not equal
    <           Less than
    >           Greater than
    <=          Less than or equal
    >=          Greater than or equal
    LIKE        Wildcard match
    IS          Evaluates null 
    ISNOT       Evaluates not null
    ISA         Evaluates a member of a WMI class

Es gibt noch andere Operatoren, aber diese werden zum Vergleichen verwendet.

Die folgende Abfrage wählt z. B. die Name- und Priority-Eigenschaften von Prozessen in der Win32_Process-Klasse aus, bei denen die Prozesspriorität größer oder gleich 11 ist. Das Get-WmiObject-Cmdlet führt die Abfrage aus.

        $highPriority = "Select Name, Priority from Win32_Process where Priority >= 11"
        Get-WmiObject -Query $highPriority

VERWENDEN DER WQL-OPERATOREN IM FILTER-PARAMETER

Die WQL-Operatoren können auch im Wert des Filter-Parameters der Get-WmiObject- oder Get-CimInstance-Cmdlets und auch im Wert der Query-Parameter dieser Cmdlets verwendet werden.

Der folgende Befehl ruft z. B. die Name- und ProcessID-Eigenschaften der letzten fünf Prozesse auf, die ProcessID-Werte größer als 1004 haben. Der Befehl verwendet den Filter-Parameter, um die ProcessID-Bedingung festzulegen.

        PS C:\> Get-WmiObject -Class Win32_Process `
        -Property Name, ProcessID -Filter "ProcessID >= 1004" | 
        Sort ProcessID | Select Name, ProcessID -Last 5
        
        Name                                 ProcessID
        ----                                 ---------
        SROSVC.exe                                4220
        WINWORD.EXE                               4664
        TscHelp.exe                               4744
        SnagIt32.exe                              4748
        WmiPrvSE.exe                              5056

VERWENDEN DES LIKE-OPERATORS

Mit dem Like-Operator können Sie Platzhalterzeichen verwenden, um die Ergebnisse einer WQL-Abfrage zu filtern.

Beschreibung des Like-Operators

[]

Zeichen in einem Bereich [a-f] oder einen Satz von Zeichen [abcdef]. Die Elemente in einem Satz müssen nicht aufeinander folgen oder in alphabetischer Reihenfolge aufgeführt sein.

^

Zeichen, die nicht in einem Bereich [^a-f] oder nicht in einem Satz [^abcdef] sind. Die Elemente in einem Satz müssen nicht aufeinander folgen oder in alphabetischer Reihenfolge aufgeführt sein.

%

Eine Zeichenfolge aus null oder mehr Zeichen

_

Ein Zeichen.

(Unterstrich)

HINWEIS:

Um in einer Abfragezeichenfolge den Unterstrich als Buchstaben zu verwenden, müssen Sie ihn in rechteckige Klammern einschließen [_].

Wenn der Like-Operator ohne Platzhalterzeichen oder Bereichsoperatoren verwendet wird, verhält er sich wie der Gleichheitsoperator (=) und gibt Objekte nur dann zurück, wenn sie eine genaue Übereinstimmung des Musters sind.

Sie können den Bereichsvorgang mit dem Prozent-Platzhalterzeichen kombinieren, um einfache und trotzdem leistungsstarke Filter zu erstellen.

BEISPIELE FÜR DEN LIKE-OPERATOR

BEISPIEL 1: [<Bereich>]

Die folgenden Befehle starten Notepad und dann nach einer Instanz der Win32_Process-Klasse, die einen Namen hat, der mit einem Buchstaben zwischen „H“ und „N“ (Groß-/Kleinschreibung spielt keine Rolle) beginnt.

Die Abfrage sollte jeden Prozess von Hotpad.exe bis hin zu Notepad.exe zurückgeben.

        PS C:\> Notepad   # Starts Notepad
        PS C:\> $query = "Select * from win32_Process where Name LIKE '[H-N]otepad.exe'"
        PS C:\> Get-WmiObject -Query $query | Select Name, ProcessID
        
        Name                                ProcessID
        ----                                ---------
        notepad.exe                              1740

BEISPIEL 2: [<Bereich>] und %

Die folgenden Befehle wählen alle Prozesse aus, deren Name mit einem Buchstaben zwischen A und P (Groß-/Kleinschreibung spielt keine Rolle) beginnt, gefolgt von null oder mehreren Buchstaben in beliebiger Kombination.

Das Get-WmiObject-Cmdlet führt die Abfrage aus, das Select-Object-Cmdlet ruft die Name- und ProcessID-Eigenschaften ab, und das Sort-Object-Cmdlet sortiert die Ergebnisse alphabetisch nach Namen.

        PS C:\>$query = "Select * from win32_Process where name LIKE '[A-P]%'"
        PS C:\>Get-WmiObject -Query $query | 
                  Select-Object -Property Name, ProcessID | 
                  Sort-Object -Property Name

BEISPIEL 3: Nicht im Bereich (^)

Der folgende Befehl ruft die Prozesse auf, deren Namen nicht mit einer der folgenden Buchstaben beginnen: A, S, W, P, R, C, U, N und gefolgt von null oder mehreren Buchstaben.

        PS C:\>$query = "Select * from win32_Process where name LIKE '[^ASWPRCUN]%'"
        PS C:\>Get-WmiObject -Query $query | 
                  Select-Object -Property Name, ProcessID | 
                  Sort-Object -Property Name

BEISPIEL 4: Beliebige Zeichen – oder keine (%)

Die folgenden Befehle rufen Prozesse ab, deren Namen mit „calc“ beginnen. Das %-Symbol in WQL entspricht dem Sternchen (*) in regulären Ausdrücken.

        PS C:\> $query = "Select * from win32_Process where Name LIKE 'calc%'"
        PS C:\> Get-WmiObject -Query $query | Select-Object -Property Name, ProcessID
        
        Name                               ProcessID
        ----                               ---------
        calc.exe                                4424

BEISPIEL 5: Ein Zeichen (_)

Die folgenden Befehle rufen Prozesse ab, deren Namen dem Muster „c_lc.exe“ entsprechen, wobei das Unterstrichzeichen für ein beliebiges Zeichen steht. Diesem Muster entsprechen alle Namen von calc.exe bis hin zu czlc.exe oder c9lc.exe, jedoch nicht die Namen, in denen das „c“ und „l“ durch mehr als ein Zeichen getrennt sind.

      PS C:\> $query = "Select * from Win32_Process where Name LIKE 'c_lc.exe'"
      PS C:\> Get-WmiObject -Query $query | Select-Object -Property Name, ProcessID
        
        Name                                 ProcessID
        ----                                 ---------
        calc.exe                                  4424

BEISPIEL 6: Genaue Übereinstimmung

Die folgenden Befehle rufen Prozesse ab, die den Namen „WLIDSVC.exe“ haben. Obwohl die Abfrage das Like-Schlüsselwort verwendet, muss eine genaue Übereinstimmung vorliegen, da der Wert keinerlei Platzhalterzeichen enthält.

        $query = "Select * from win32_Process where name LIKE 'WLIDSVC.exe'"
        Get-WmiObject -Query $query | Select-Object -Property Name, ProcessID
        Name                                 ProcessID
        ----                                 ---------
        WLIDSVC.exe                                84

VERWENDEN DES OR-OPERATORS

Verwenden Sie das Or-Schlüsselwort, um mehrere unabhängige Bedingungen zu definieren. Das Or-Schlüsselwort befindet sich in der Where-Klausel. Es führt eine inklusive OR-Operation für zwei (oder mehr) Bedingungen durch und gibt Elemente zurück, die eine der Bedingungen erfüllen.

Der Or-Operator hat das folgende Format:

        Where <property> <operator> <value> or <property> <operator> <value> ...

Die folgenden Befehle rufen z. B. alle Instanzen der Win32_Process-WMI-Klasse ab, geben sie jedoch nur zurück, wenn der Name des Prozesses „winword.exe“ oder „excel.exe“ lautet.

        PS C:\>$q = "Select * from Win32_Process where Name = 'winword.exe' or Name = 'excel.exe'"
        PS C:\>Get-WmiObject -Query $q

Die Or-Anweisung kann mit mehr als zwei Bedingungen verwendet werden. In der folgenden Abfrage ruft die Or-Anweisung Winword.exe, Excel.exe oder Powershell.exe ab.

        $q = "Select * from Win32_Process where Name = 'winword.exe' or Name = 'excel.exe' or Name = 'powershell.exe'"

VERWENDEN DES AND-OPERATORS

Verwenden Sie das And-Schlüsselwort, um mehrere zusammenhängende Bedingungen anzugeben. Das And-Schlüsselwort befindet sich in der Where-Klausel. Es gibt die Elemente zurück, die sämtliche Bedingungen erfüllen.

Der And-Operator hat das folgende Format:

        Where <property> <operator> <value> and <property> <operator> <value> ...

Die folgenden Befehle rufen beispielsweise Prozesse mit dem Namen „Winword.exe“ und der Prozess-ID „6512“ ab.

Beachten Sie, dass die Befehle über das Get-CimInstance-Cmdlet verwenden.

        PS C:\>$q = "Select * from Win32_Process where Name = 'winword.exe' and ProcessID =6512"
        PS C:\> Get-CimInstance -Query $q
        ProcessId        Name             HandleCount      WorkingSetSize   VirtualSize
        ---------        ----             -----------      --------------   -----------
        6512             WINWORD.EXE      768              117170176        633028608

Alle Operatoren, einschließlich der Like-Operatoren, sind zusammen mit den Or- und And-Operatoren gültig. Und Sie können die Or- und And-Operatoren in einer einzelnen Abfrage kombinieren. Dazu verwenden Sie Klammern, die Windows PowerShell anweisen, welche Klauseln zuerst verarbeitet werden sollen.

Dieser Befehl verwendet das Windows PowerShell-Fortsetzungszeichen (`), um den Befehl in zwei Zeilen aufzuteilen.

        PS C:\> $q = "Select * from Win32_Process `
        where (Name = 'winword.exe' or Name = 'excel.exe') and HandleCount > 700"
        PS C:\> Get-CimInstance -Query $q
        ProcessId        Name             HandleCount      WorkingSetSize   VirtualSize
        ---------        ----             -----------      --------------   -----------
        6512             WINWORD.EXE      797              117268480        634425344
        9610             EXCEL.EXE        727               38858752        323227648

SUCHEN NACH NULL-WERTEN

Die Suche nach null-Werten in WMI ist schwierig, sie zu unvorhersehbaren Ergebnissen führen kann. Null ist nicht 0 (null) auch kein Äquivalent für eine leere Zeichenfolge. Einige Eigenschaften der WMI-Klasse werden initialisiert und andere nicht, sodass eine Suche nach Null möglicherweise nicht für alle Eigenschaften funktioniert.

Verwenden Sie zum Suchen nach Null-Werten den Is-Operator mit dem Wert „null“.

Die folgenden Befehle rufen beispielsweise Prozesse ab, die einen Null-Wert für die IntallDate-Eigenschaft aufweisen. Die Befehle geben viele Prozesse zurück.

PS C:\>$q = "Select * from Win32_Process where InstallDate is null"
        PS C:\>Get-WmiObject -Query $q

Im Gegensatz dazu ruft der folgende Befehl die Benutzerkonten ab, die einen Null-Wert für die Description-Eigenschaft aufweisen. Dieser Befehl gibt keine Benutzerkonten zurück, obwohl die meisten Benutzerkonten keinen Wert für die Description-Eigenschaft aufweisen.

        PS C:\>$q = "Select * from Win32_UserAccount where Description is null"
        PS C:\>Get-WmiObject -Query $q

Um die Benutzerkonten zu suchen, die keinen Wert für die Description-Eigenschaft aufweisen, verwenden Sie den Gleichheitsoperator, um eine leere Zeichenfolge abzurufen. Um die leere Zeichenfolge darzustellen, verwenden Sie zwei aufeinander folgende einfache Anführungszeichen.

        $q = "Select * from Win32_UserAccount where Description = '' "

VERWENDEN VON TRUE ODER FALSE

Um Boolesche Werte in den Eigenschaften von WMI-Objekten abzurufen, verwenden Sie True und False. Dabei spielt Groß-/Kleinschreibung keine Rolle.

Die folgende WQL-Abfrage gibt nur lokale Benutzerkonten von einem mit der Domäne verbundenen Computer zurück.

        PS C:\>$q = "Select * from Win32_UserAccount where LocalAccount = True"
        PS C:\>Get-CimInstance -Query $q

Um Domänenkonten zu finden, verwenden Sie den Wert „False“, wie im folgenden Beispiel gezeigt.

        PS C:\>$q = "Select * from Win32_UserAccount where LocalAccount = False"
        PS C:\>Get-CimInstance -Query $q

VERWENDEN DES ESCAPE-ZEICHENS

WQL verwendet den umgekehrten Schrägstrich (\) als das Escape-Zeichen. Darin unterscheidet es sich von Windows PowerShell, wo für diesen Zweck das Backtick-Zeichen (`) verwendet wird.

Anführungszeichen und die für Anführungszeichen verwendeten Zeichen müssen häufig mit Escape-Zeichen versehen werden, damit sie nicht fehlinterpretiert werden.

Um einen Benutzer zu suchen, dessen Name ein einfaches Anführungszeichen enthält, verwenden Sie einen umgekehrten Schrägstrich als Escape-Zeichen für das einfachen Anführungszeichen, wie im folgenden Befehl gezeigt.

        PS C:\> $q = "Select * from Win32_UserAccount where Name = 'Tim O\'Brian'"
        PS C:\> Get-CimInstance -Query $q
        Name             Caption          AccountType      SID              Domain
        ----             -------          -----------      ---              ------
        Tim O'Brian      FABRIKAM\TimO    512              S-1-5-21-1457... FABRIKAM

In manchen Fällen muss auch der umgekehrte Schrägstrich mit Escape-Zeichen versehen werden. Die folgenden Befehle verursachen z. B. einen Fehler vom Typ „Ungültige Abfrage“ aufgrund des umgekehrten Schrägstrichs im Caption-Wert.

        PS C:\> $q = "Select * from Win32_UserAccount where Caption = 'Fabrikam\TimO'"
        PS C:\> Get-CimInstance -Query $q
        Get-CimInstance : Invalid query
        At line:1 char:1
        + Get-CimInstance -Query $q
        + ~~~~~~~~~~~~~~~~~~~~~~~~~
            + CategoryInfo          : InvalidArgument: (:) [Get-CimInstance], CimException
            + FullyQualifiedErrorId : HRESULT 0x80041017,Microsoft.Management.Infrastructure.CimCmdlets

Verwenden Sie einen zweiten umgekehrten Schrägstrich, um den umgekehrten Schrägstrich mit Escape-Zeichen versehen, wie im Folgenden dargestellt.

        PS C:\> $q = "Select * from Win32_UserAccount where Caption = 'Fabrikam\\TimO'"
        PS C:\> Get-CimInstance -Query $q

SIEHE AUCH

about_Escape_Characters

about_Quoting_Rules

about_WMI

about_WMI_Cmdlets