Freigeben über


about_WQL

Kurze Beschreibung

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

Lange Beschreibung

WQL ist die WMI-Abfragesprache (Windows Management Instrumentation), die zum Abrufen von Informationen aus WMI verwendet wird.

Sie müssen WQL nicht zum Ausführen einer WMI-Abfrage in Windows PowerShell verwenden. Stattdessen können Sie die Parameter der Get-WmiObject Oder Get-CimInstance Cmdlets verwenden. WQL-Abfragen sind etwas schneller als Standardbefehle Get-WmiObject , und die verbesserte Leistung ist offensichtlich, wenn die Befehle auf Hunderten von Systemen ausgeführt werden. Achten Sie jedoch darauf, dass die Zeit zum Schreiben einer erfolgreichen WQL-Abfrage die Leistungsverbesserung nicht überwiegt.

Die grundlegenden WQL-Anweisungen, die Sie für die Verwendung von WQL benötigen, sind SELECT, WHEREund FROM.

Wann WQL verwendet werden soll

Vergessen Sie nicht, dass Sie auch Windows PowerShell verwenden, wenn Sie mit WMI und insbesondere mit WQL arbeiten. Wenn eine WQL-Abfrage nicht wie erwartet funktioniert, ist es einfacher, einen standardmäßigen Windows PowerShell-Befehl zu verwenden, als die WQL-Abfrage zu debuggen.

Es sei denn, Sie geben massive Datenmengen aus bandbreitenbeschränkten Remotesystemen zurück, es ist selten produktiv, stundenlang zu verbringen, um eine komplizierte WQL-Abfrage zu perfektionieren, wenn ein akzeptables PowerShell-Cmdlet vorhanden ist, das dasselbe tut.

Verwenden der SELECT-Anweisung

Eine typische WMI-Abfrage beginnt mit einer SELECT Anweisung, die alle Eigenschaften oder bestimmte Eigenschaften einer WMI-Klasse abruft. Um alle Eigenschaften einer WMI-Klasse auszuwählen, verwenden Sie ein Sternchen (*). Die FROM Schlüsselwort (keyword) gibt die WMI-Klasse an.

Eine SELECT Anweisung weist das folgende Format auf:

SELECT <property> FROM <WMI-class>

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

SELECT * FROM Win32_Bios

Hinweis

PowerShell zeigt nur die Standardobjekteigenschaften an. Diese Eigenschaften werden in der Types.ps1xml Datei definiert. Verwenden Sie das Select-Object Cmdlet oder ein Format-* Cmdlet, um zusätzliche Eigenschaften anzuzeigen.

Wenn Sie eine bestimmte Eigenschaft einer WMI-Klasse auswählen möchten, platzieren Sie den Eigenschaftsnamen zwischen den SELECT und FROM Schlüsselwort (keyword)s.

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

Wenn Sie mehrere Eigenschaften auswählen möchten, trennen Sie die Eigenschaftennamen mithilfe von Kommas. 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 drei Möglichkeiten zum Verwenden der WQL-Abfrage im Windows PowerShell-Befehl.

  • Verwenden des Cmdlets Get-WmiObject
  • Verwenden des Cmdlets Get-CimInstance
  • Verwenden Sie die [wmisearcher] Zugriffstaste.

Verwenden des Cmdlets "Get-WmiObject"

Die einfachste Methode zum Verwenden der WQL-Abfrage besteht darin, sie in Anführungszeichen (als Zeichenfolge) einzuschließen und dann die Abfragezeichenfolge als Wert des Abfrageparameters des Get-WmiObject Cmdlets zu verwenden, wie im folgenden Beispiel gezeigt.

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 dann die Variable als Wert des Query-Parameters verwenden, wie im folgenden Befehl gezeigt.

$query = "SELECT * FROM Win32_Bios"
Get-WmiObject -Query $query

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

$queryNameVersion = "SELECT Name, Version FROM Win32_Bios"
Get-WmiObject -Query $queryNameVersion
__GENUS          : 2
__CLASS          : Win32_BIOS
__SUPERCLASS     :
__DYNASTY        :
__RELPATH        :
__PROPERTY_COUNT : 2
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
Name             : S03KT39A
Version          : LENOVO - 1270
PSComputerName   :

Denken Sie daran, dass Sie die Parameter des Get-WmiObject Cmdlets verwenden können, um dasselbe Ergebnis zu erhalten. Der folgende Befehl ruft beispielsweise auch die Werte der Eigenschaften Name und Version von Instanzen der Win32_Bios WMI-Klasse ab.

Get-WmiObject -Class Win32_Bios -Property Name, Version
__GENUS          : 2
__CLASS          : Win32_BIOS
__SUPERCLASS     :
__DYNASTY        :
__RELPATH        :
__PROPERTY_COUNT : 2
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
Name             : S03KT39A
Version          : LENOVO - 1270
PSComputerName   :

Verwenden des Cmdlets "Get-CimInstance"

Ab Windows PowerShell 3.0 können Sie das Get-CimInstance Cmdlet verwenden, um WQL-Abfragen auszuführen.

Get-CimInstance ruft Instanzen von CIM-kompatiblen Klassen ab, einschließlich WMI-Klassen. Die CIM-Cmdlets, die Windows PowerShell 3.0 eingeführt haben, führen dieselben Aufgaben wie die WMI-Cmdlets aus. Die CIM-Cmdlets entsprechen den WS-Management -Standards (WSMan) und dem Standard Common Information Model (CIM), mit dem die Cmdlets dieselben Techniken zum Verwalten von Windows-Computern und Computern verwenden können, auf denen andere Betriebssysteme ausgeführt werden.

Der folgende Befehl verwendet das Get-CimInstance Cmdlet, um eine WQL-Abfrage auszuführen.

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

Get-CimInstance -Query "SELECT * FROM Win32_Bios"
SMBIOSBIOSVersion : S03KT39A
Manufacturer      : LENOVO
Name              : S03KT39A
SerialNumber      : MJ0AETTX
Version           : LENOVO - 1270

Get-CimInstance gibt ein CimInstance -Objekt zurück, anstelle des managementObject , das Get-WmiObject zurückgegeben wird, aber die Objekte sind ziemlich ähnlich.

PS> (Get-CimInstance -Query "SELECT * FROM Win32_Bios").GetType().FullName
Microsoft.Management.Infrastructure.CimInstance

PS> (Get-WmiObject -Query "SELECT * FROM Win32_Bios").GetType().FullName
System.Management.ManagementObject

Verwenden der wmisearcher-Typbeschleuniger

Die [wmisearcher] Typbeschleuniger erstellt ein ManagementObjectSearcher-Objekt aus einer WQL-Anweisungszeichenfolge. Das ManagementObjectSearcher-Objekt verfügt über viele Eigenschaften und Methoden, aber die einfachste Methode ist die Get-Methode, die die angegebene WMI-Abfrage aufruft und die resultierenden Objekte zurückgibt.

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

So verwenden Sie die [wmisearcher] Typbeschleuniger:

  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 z. B. die Abfrage "Alle auswählen" um, speichert das Ergebnis in der $bios Variablen und ruft dann die Get() Methode des ManagementObjectSearcher-Objekts in der $bios Variablen auf.

$bios = [wmisearcher]"SELECT * FROM Win32_Bios"
$bios.Get()
SMBIOSBIOSVersion : 8BET56WW (1.36 )
Manufacturer      : LENOVO
Name              : Default System BIOS
SerialNumber      : R9FPY3P
Version           : LENOVO - 1360

Sie können die [wmisearcher] Typbeschleuniger verwenden, um die Abfrage oder die Variable zu umwandeln. Im folgenden Beispiel wird die [wmisearcher] Typbeschleuniger verwendet, um die Variable zu umwandeln. Das Ergebnis ist identisch.

[wmisearcher]$bios = "SELECT * FROM Win32_Bios"
$bios.Get()
SMBIOSBIOSVersion : S03KT39A
Manufacturer      : LENOVO
Name              : S03KT39A
SerialNumber      : MJ0AETTX
Version           : LENOVO - 1270

Wenn Sie die [wmisearcher] Typbeschleuniger verwenden, ändert sie die Abfragezeichenfolge in ein ManagementObjectSearcher-Objekt , wie in den folgenden Befehlen dargestellt.

$a = "SELECT * FROM Win32_Bios"
$a.GetType().FullName
System.String

$a = [wmisearcher]"SELECT * FROM Win32_Bios"
$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.

$biosname = [wmisearcher]"Select Name from Win32_Bios"
$biosname.Get()
__GENUS          : 2
__CLASS          : Win32_BIOS
__SUPERCLASS     :
__DYNASTY        :
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
Name             : S03KT39A
PSComputerName   :

Verwenden der grundlegenden WQL WHERE-Anweisung

Eine WHERE Anweisung legt Bedingungen für die Daten fest, die eine SELECT Anweisung zurückgibt.

Die WHERE Anweisung weist das folgende Format auf:

WHERE <property> <operator> <value>

Zum Beispiel:

WHERE Name = 'Notepad.exe'

Die WHERE Anweisung wird mit der SELECT Anweisung verwendet, wie im folgenden Beispiel gezeigt.

SELECT * FROM Win32_Process WHERE Name = 'Notepad.exe'

Bei Verwendung der WHERE Anweisung muss der Eigenschaftsname und der Wert korrekt sein.

Beispielsweise ruft der folgende Befehl die Editor Prozesse auf dem lokalen Computer ab.

Get-WmiObject -Query "SELECT * FROM Win32_Process WHERE name='Notepad.exe'"

Der folgende Befehl schlägt jedoch fehl, da der Prozessname die .exe Dateierweiterung enthält.

Get-WmiObject -Query "SELECT * FROM Win32_Process WHERE name='Notepad'"

WHERE-Anweisungsvergleichsoperatoren

Die folgenden Operatoren sind in einer WQL-Anweisung WHERE 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 andere Operatoren, aber dies sind diejenigen, die zum Erstellen von Vergleichen verwendet werden.

Die folgende Abfrage wählt beispielsweise die Eigenschaften "Name " und "Priority " aus Prozessen in der Win32_Process Klasse aus, wobei 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 Parameter "-Filter"

Die WQL-Operatoren können auch im Wert des Filterparameters der Get-WmiObject Cmdlets sowie Get-CimInstance im Wert der Abfrageparameter dieser Cmdlets verwendet werden.

Mit dem folgenden Befehl werden beispielsweise die Eigenschaften Name und ProcessID der letzten fünf Prozesse mit ProcessID-Werten größer als 1004 angezeigt. Der Befehl verwendet den Parameter "Filter ", um die ProcessID-Bedingung anzugeben.

$getWmiObjectSplat = @{
    Class = 'Win32_Process'
    Property = 'Name', 'ProcessID'
    Filter = "ProcessID >= 1004"
}
Get-WmiObject @getWmiObjectSplat |
    Sort-Object ProcessID |
    Select-Object 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 wild Karte Zeichen verwenden, um die Ergebnisse einer WQL-Abfrage zu filtern.

Like Operator  Description
--------------------------------------------------
[]             Character in a range [a-f] or a set
               of characters [abcdef]. The items in
               a set don't need to be consecutive or
               listed in alphabetical order.

^              Character not in a range [^a-f] or
               not in a set [^abcdef]. The items in
               a set don't need to be consecutive or
               listed in alphabetical order.

%              A string of zero or more characters

_              One character.
(underscore)   NOTE: To use a literal underscore
               in a query string, enclose it in
               square brackets [_].

Wenn der LIKE Operator ohne Wild Karte Zeichen oder Bereichsoperatoren verwendet wird, verhält er sich wie der Gleichheitsoperator (=) und gibt Nur Objekte zurück, wenn sie eine genaue Übereinstimmung für das Muster sind.

Sie können den Bereichsvorgang mit dem Zeichen "Prozent" () (%) kombinieren Karte um einfache und dennoch leistungsstarke Filter zu erstellen.

LIKE-Operatorbeispiele

Beispiel 1: [<Bereich>]

Die folgenden Befehle starten Editor und suchen dann nach einer Instanz der Win32_Process Klasse mit einem Namen, der mit einem Buchstaben zwischen "H" und "N" beginnt (Groß-/Kleinschreibung wird nicht beachtet).

Die Abfrage sollte jeden Prozess von Hotepad.exe bis zu Notepad.exe.

Notepad   # Starts Notepad
$query = "SELECT * FROM Win32_Process WHERE Name LIKE '[H-N]otepad.exe'"
Get-WmiObject -Query $query | Select Name, ProcessID
Name                                ProcessID
----                                ---------
notepad.exe                              1740

Beispiel 2: [<Bereich>] und %

Mit den folgenden Befehlen werden alle Prozesse ausgewählt, die einen Namen haben, der mit einem Buchstaben zwischen A und P beginnt (Groß-/Kleinschreibung wird nicht beachtet), gefolgt von null oder mehr Buchstaben in einer beliebigen Kombination.

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

$query = "SELECT * FROM Win32_Process WHERE name LIKE '[A-P]%'"
Get-WmiObject -Query $query |
    Select-Object -Property Name, ProcessID |
    Sort-Object -Property Name

Beispiel 3: Nicht im Bereich (^)

Der folgende Befehl ruft Prozesse ab, deren Namen nicht mit einem der folgenden Buchstaben beginnen: A, S, W, P, R, C, U, N

und gefolgt von null oder mehr Buchstaben.

$query = "SELECT * FROM Win32_Process WHERE name LIKE '[^ASWPRCUN]%'"
Get-WmiObject -Query $query |
    Select-Object -Property Name, ProcessID |
    Sort-Object -Property Name

Beispiel 4: Beliebige Zeichen -- oder keines (%)

Mit den folgenden Befehlen werden Prozesse mit Namen abgerufen, die mit calc. Das Prozentsymbol (%) ist das WQL-Zeichen "Wild Karte". Es entspricht dem Sternchen (*) in PowerShell Karte.

$query = "SELECT * FROM Win32_Process WHERE Name LIKE 'calc%'"
Get-WmiObject -Query $query | Select-Object -Property Name, ProcessID
Name                               ProcessID
----                               ---------
calc.exe                                4424

Beispiel 5: Ein Zeichen (_)

Mit den folgenden Befehlen werden Prozesse mit Namen abgerufen, die das folgende Muster aufweisen, c_lc.exe wobei das Unterstrichzeichen ein beliebiges Zeichen darstellt. Dieses Muster entspricht einem beliebigen Namen von durch calc.execzlc.exeoder c9lc.exe, aber nicht mit Namen, in denen "c" und "l" durch mehrere Zeichen voneinander getrennt sind.

$query = "SELECT * FROM Win32_Process WHERE Name LIKE 'c_lc.exe'"
Get-WmiObject -Query $query | Select-Object -Property Name, ProcessID
Name                                 ProcessID
----                                 ---------
calc.exe                                  4424

Beispiel 6: Genaue Übereinstimmung

Mit den folgenden Befehlen werden Prozesse mit dem Namen abgerufen WLIDSVC.exe. Obwohl die Abfrage die LIKE Schlüsselwort (keyword) verwendet, ist eine genaue Übereinstimmung erforderlich, da der Wert keine wilden zeichen Karte enthält.

$query = "SELECT * FROM Win32_Process WHERE name LIKE 'WLIDSVC.exe'"
Get-WmiObject -Query $query | Select-Object -Property Name, ProcessID
```powershell

```output
Name                                 ProcessID
----                                 ---------
WLIDSVC.exe                                84

Verwenden des OR-Operators

Verwenden Sie die OR Schlüsselwort (keyword), um mehrere unabhängige Bedingungen anzugeben. Die OR Schlüsselwort (keyword) wird in der WHERE Klausel angezeigt. Sie führt einen inklusiven OR Vorgang mit zwei (oder mehr) Bedingungen aus und gibt Elemente zurück, die eine der Bedingungen erfüllen.

Der OR Operator weist das folgende Format auf:

WHERE <property> <operator> <value> OR <property> <operator> <value> ...

Die folgenden Befehle rufen beispielsweise alle Instanzen der Win32_Process WMI-Klasse ab, geben sie jedoch nur zurück, wenn der Prozessname lautet winword.exe oder excel.exe.

$q = "SELECT * FROM Win32_Process WHERE Name='winword.exe'" +
  " OR Name='excel.exe'"
Get-WmiObject -Query $q

Die OR Anweisung kann mit mehr als zwei Bedingungen verwendet werden. In der folgenden Abfrage ruft die OR Anweisung , , Excel.exeoder Powershell.exe.Winword.exe

$q = "SELECT * FROM Win32_Process WHERE Name='winword.exe'" +
  " OR Name='excel.exe' OR Name='powershell.exe'"

Verwenden des AND-Operators

Verwenden Sie die AND Schlüsselwort (keyword), um mehrere verwandte Bedingungen anzugeben. Die AND Schlüsselwort (keyword) wird in der WHERE Klausel angezeigt. Es werden Elemente zurückgegeben, die alle Bedingungen erfüllen.

Der AND Operator weist das folgende Format auf:

WHERE <property> <operator> <value> `AND` <property> <operator> <value> ...

Die folgenden Befehle rufen z. B. Prozesse ab, die einen Namen Winword.exe und die Prozess-ID von 6512 aufweisen.

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

$q = "SELECT * FROM Win32_Process WHERE Name = 'winword.exe' " +
  "AND ProcessID =6512"
Get-CimInstance -Query $q
ProcessId   Name             HandleCount      WorkingSetSize   VirtualSize
---------   ----             -----------      --------------   -----------
# 6512      WINWORD.EXE      768              117170176        633028608

Alle Operatoren, einschließlich der LIKE Operatoren, sind mit den OR Operatoren gültig AND . Außerdem können Sie die OR Operatoren und AND Operatoren in einer einzelnen Abfrage mit Klammern kombinieren, die WMI mitteilen, welche Klauseln zuerst verarbeitet werden sollen.

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

Suchen nach Nullwerten

Die Suche nach NULL-Werten in WMI ist eine Herausforderung, da sie zu unvorhersehbaren Ergebnissen führen kann. Null ist nicht null und entspricht nicht einer leeren Zeichenfolge. Einige WMI-Klasseneigenschaften werden initialisiert und andere nicht, daher funktioniert eine Suche nach NULL möglicherweise nicht für alle Eigenschaften.

Um nach Nullwerten zu suchen, verwenden Sie den Is-Operator mit einem Wert von null.

Die folgenden Befehle rufen z. B. Prozesse ab, die einen Nullwert für die IntallDate-Eigenschaft aufweisen. Die Befehle geben viele Prozesse zurück.

$q = "SELECT * FROM Win32_Process WHERE InstallDate is null"
Get-WmiObject -Query $q

Im Gegensatz dazu ruft der folgende Befehl Benutzerkonten mit einem Nullwert für die Description-Eigenschaft ab. Dieser Befehl gibt keine Benutzerkonten zurück, obwohl die meisten Benutzerkonten keinen Wert für die Description-Eigenschaft haben.

$q = "SELECT * FROM Win32_UserAccount WHERE Description is null"
Get-WmiObject -Query $q

Um die Benutzerkonten zu finden, die keinen Wert für die Description-Eigenschaft haben, 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 True und False. Ihre Groß-/Kleinschreibung wird nicht beachtet.

Die folgende WQL-Abfrage gibt nur lokale Benutzerkonten von einem do Standard verbundenen Computer zurück.

$q = "SELECT * FROM Win32_UserAccount WHERE LocalAccount = True"
Get-CimInstance -Query $q

Verwenden Sie zum Suchen nach Standard Konten den Wert "False", wie im folgenden Beispiel gezeigt.

$q = "SELECT * FROM Win32_UserAccount WHERE LocalAccount = False"
Get-CimInstance -Query $q

Verwenden des Escapezeichens

WQL verwendet den umgekehrten Schrägstrich (\) als Escapezeichen. Dies unterscheidet sich von Windows PowerShell, das das Backtick-Zeichen (`) verwendet.

Anführungszeichen und die zeichen, die für Anführungszeichen verwendet werden, müssen häufig mit Escapezeichen versehen werden, damit sie nicht falsch interpretiert werden.

Um einen Benutzer zu finden, dessen Name ein einfaches Anführungszeichen enthält, verwenden Sie einen umgekehrten Schrägstrich, um das einfache Anführungszeichen zu escapen, wie im folgenden Befehl gezeigt.

$q = "SELECT * FROM Win32_UserAccount WHERE Name = 'Tim O\'Brian'"
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 der umgekehrte Schrägstrich ebenfalls escapet werden. Beispielsweise generieren die folgenden Befehle einen Fehler "Ungültige Abfrage" aufgrund des umgekehrten Schrägstrichs im Caption-Wert.

$q = "SELECT * FROM Win32_UserAccount WHERE Caption = 'Fabrikam\TimO'"
Get-CimInstance -Query $q
Get-CimInstance : Invalid query
At line:1 char:1
+ Get-CimInstance -Query $q
+ ~~~~~~~~~~~
  + CategoryInfo          : InvalidArgument: (:) [Get-CimInstance], CimExcep
  + FullyQualifiedErrorId : HRESULT 0x80041017,Microsoft.Management.Infrastr

Um den umgekehrten Schrägstrich zu escapen, verwenden Sie ein zweites umgekehrtes Schrägstrich, wie im folgenden Befehl dargestellt.

$q = "SELECT * FROM Win32_UserAccount WHERE Caption = 'Fabrikam\\TimO'"
Get-CimInstance -Query $q

Weitere Informationen