about_WQL

업데이트 날짜: 2012년 10월

적용 대상: Windows PowerShell 2.0, Windows PowerShell 3.0

항목

about_WQL

간단한 설명

Windows PowerShell®에서 WMI 개체를 가져오는 데 사용할 수 있는 WQL(WMI Query Language)에 대해 설명합니다.

자세한 설명

WQL은 WMI에서 정보를 가져오는 데 사용되는 언어인 WMI(Windows Management Instrumentation) 쿼리 언어입니다.

Windows PowerShell에서 WMI 쿼리를 수행할 때는 WQL을 사용할 필요가 없습니다. 대신 Get-WmiObject 또는 Get-CimInstance cmdlet의 매개 변수를 사용할 수 있습니다. WQL 쿼리는 표준 Get-WmiObject 명령보다 약간 더 빠르며 향상된 성능은 명령이 수백 개의 시스템에서 실행될 때 확실히 나타납니다. 그러나 성공적인 WQL 쿼리를 작성하는 데 소요되는 시간이 성능 향상을 초과하지 않도록 해야 합니다.

WQL을 사용해야 하는 기본 WQL 문은 Select, Where 및 From입니다.

WQL을 사용하는 경우

WMI, 특히 WQL을 사용하여 작업할 때는 Windows PowerShell도 사용하고 있다는 점을 잊지 마세요. 종종 WQL 쿼리가 예상대로 작동하지 않을 경우 WQL 쿼리를 디버그하는 것보다 표준 Windows PowerShell 명령을 사용하는 것이 더 쉽습니다.

대역폭 제약 조건이 있는 원격 시스템에서 대량의 데이터를 반환하는 경우가 아니라면 약간 더 느리지만 동일한 작업을 수행하는 완벽하게 허용되는 Windows cmdlet이 있는 경우 복잡하고 뒤얽힌 WQL 쿼리를 완성하려고 몇 시간을 소비하는 것은 생산적이지 않습니다.

SELECT 문 사용

일반적인 WMI 쿼리는 WMI 클래스의 모든 속성이나 특정 속성을 가져오는 Select 문으로 시작됩니다. WMI 클래스의 모든 속성을 선택하려면 별표(*)를 사용합니다. From 키워드는 WMI 클래스를 지정합니다.

Select 문의 형식은 다음과 같습니다.

        Select <property> from <WMI-class>

예를 들어 다음 Select 문은 Win32_Bios WMI 클래스의 인스턴스에서 모든 속성(*)을 선택합니다.

        Select * from Win32_Bios

WMI 클래스의 특정 속성을 선택하려면 Select 및 From 키워드 사이에 속성 이름을 배치합니다.

다음 쿼리는 Win32_Bios WMI 클래스에서 BIOS의 이름만 선택합니다. 명령은 $queryName 변수에 쿼리를 저장합니다.

        Select Name from Win32_Bios

둘 이상의 속성을 선택하려면 쉼표를 사용하여 속성 이름을 구분합니다. 다음 WMI 쿼리는 Win32_Bios WMI 클래스의 이름 및 버전을 선택합니다. 명령은 $queryNameVersion 변수에 쿼리를 저장합니다.

        Select name, version from Win32_Bios

WQL 쿼리 사용

두 가지 방법으로 Windows PowerShell 명령에서 WQL 쿼리를 사용할 수 있습니다.

Get-WmiObject cmdlet 사용

Get-CimInstance cmdlet 사용

[wmisearcher] 유형 액셀러레이터 사용

GET-WMIOBJECT CMDLET 사용

WQL 쿼리를 사용하는 가장 기본적인 방법은 다음 예제와 같이 쿼리를 문자열처럼 큰따옴표로 묶은 다음 Get-WmiObject cmdlet의 Query 매개 변수 값으로 쿼리 문자열을 사용하는 것입니다.

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

또한 다음 명령과 같이 WQL 문을 변수에 저장한 다음 변수를 Query 매개 변수 값으로 사용할 수 있습니다.

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

WQL 문에서는 두 형식 중 하나를 사용할 수 있습니다. 다음 명령은 $queryName 변수의 쿼리를 사용하여 시스템 BIOS의 이름 및 버전 속성만 가져옵니다.

        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

Get-WmiObject cmdlet의 매개 변수를 사용하여 동일한 결과를 얻을 수 있습니다. 예를 들어 다음 명령은 Win32_Bios WMI 클래스 인스턴스의 Name 및 Version 속성 값도 가져옵니다.

        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

GET-CIMINSTANCE CMDLET 사용

Windows PowerShell 3.0부터는 Get-CimInstance cmdlet을 사용하여 WQL 쿼리를 실행할 수 있습니다.

Get-CimInstance는 WMI 클래스를 포함하여 CIM 규격 클래스의 인스턴스를 가져옵니다. Windows PowerShell 3.0에서 도입된 CIM cmdlet은 WMI cmdlet과 동일한 작업을 수행합니다. CIM cmdlet은 WSMan(WS-Management) 표준과 CIM(Common Information Model) 표준을 따르기 때문에 cmdlet이 동일한 기술을 사용하여 Windows 컴퓨터 및 다른 운영 체제를 실행하는 컴퓨터를 관리할 수 있습니다.

다음 명령은 Get-CimInstance cmdlet을 사용하여 WQL 쿼리를 실행합니다.

Get-WmiObject에서 사용할 수 있는 모든 WQL 쿼리는 Get-CimInstance에서도 사용할 수 있습니다.

        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는 Get-WmiObject가 반환하는 ManagementObject 대신 CimInstance 개체를 반환하지만 개체가 매우 유사합니다.

        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

[wmisearcher] 유형 액셀러레이터 사용

[wmisearcher] 유형 액셀러레이터는 WQL 문 문자열에서 ManagementObjectSearcher 개체를 만듭니다. ManagementObjectSearcher 개체에는 많은 속성 및 메서드가 있지만 가장 기본적인 메서드는 지정된 WMI 쿼리를 호출하고 결과 개체를 반환하는 Get 메서드입니다.

[wmisearcher]를 사용하면 ManagementObjectSearcher .NET Framework 클래스에 쉽게 액세스할 수 있습니다. 따라서 WMI를 쿼리하고 쿼리가 수행되는 방법을 구성할 수 있습니다.

[wmisearcher] 유형 액셀러레이터를 사용하려면

1. WQL 문자열을 ManagementObjectSearcher 개체로 캐스팅합니다.

2. ManagementObjectSearcher 개체의 Get 메서드를 호출합니다.

예를 들어 다음 명령은 "select all" 쿼리를 캐스팅하고 결과를 $bios 변수에 저장한 다음 $bios 변수에서 ManagementObjectSearcher 개체의 Get 메서드를 호출합니다.

        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

참고:

기본적으로 선택한 개체 속성만 표시됩니다. 이러한 속성은 Types.ps1xml 파일에 정의되어 있습니다.

[wmisearcher] 유형 액셀러레이터를 사용하여 쿼리 또는 변수를 캐스팅할 수 있습니다. 다음 예제에서 [wmisearcher] 유형 액셀러레이터는 변수를 캐스팅하는 데 사용됩니다. 결과는 동일합니다.

        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

[wmisearcher] 유형 액셀러레이터를 사용하면 다음 명령과 같이 쿼리 문자열이 ManagementObjectSearcher 개체로 변경됩니다.

        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

이 명령 형식은 모든 쿼리에서 작동합니다. 다음 명령은 Win32_Bios WMI 클래스의 Name 속성 값을 가져옵니다.

        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

명령은 해석하기 약간 더 어렵지만 단일 명령으로 이 작업을 수행할 수 있습니다.

이 형식으로 [wmisearcher] 유형 액셀러레이터를 사용하여 WQL 쿼리 문자열을 ManagementObjectSearcher로 캐스팅한 다음 개체에서 Get 메서드를 호출합니다. 이 작업은 모두 단일 명령으로 수행됩니다. 캐스팅된 문자열을 둘러싸는 괄호()는 메서드를 호출하기 전에 문자열을 캐스팅하도록 Windows PowerShell에 지시합니다.

        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

기본 WQL WHERE 문 사용

Where 문은 Select 문이 반환하는 데이터에 대한 조건을 설정합니다.

Where 문의 형식은 다음과 같습니다.

        where <property> <operator> <value>

예를 들면 다음과 같습니다.

        where Name = 'Notepad.exe'

다음 예제와 같이 Where 문은 Select 문과 함께 사용됩니다.

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

Where 문을 사용하는 경우 속성 이름과 값이 정확해야 합니다.

예를 들어 다음 명령은 로컬 컴퓨터에서 메모장 프로세스를 가져옵니다.

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

그러나 프로세스 이름에 ".exe" 파일 이름 확장명이 포함되어 있으므로 다음 명령은 실패합니다.

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

WHERE 문 비교 연산자

다음은 WQL Where 문에서 유효한 연산자입니다.

    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

다른 연산자도 있지만 이러한 연산자는 비교에 사용됩니다.

예를 들어 다음 쿼리는 Win32_Process 클래스의 프로세스에서 프로세스 우선 순위가 11보다 크거나 같은 Name 및 Priority 속성을 선택합니다. Get-WmiObject cmdlet은 쿼리를 실행합니다.

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

FILTER 매개 변수에서 WQL 연산자 사용

WQL 연산자는 Get-WmiObject 또는 Get-CimInstance cmdlet의 Query 매개 변수 값뿐만 아니라 이러한 cmdlet의 Filter 매개 변수 값에서도 사용할 수 있습니다.

예를 들어 다음 명령은 마지막 5개 프로세스에서 ProcessID 값이 1004보다 큰 Name 및 ProcessID 속성을 가져옵니다. 이 명령은 Filter 매개 변수를 사용하여 ProcessID 조건을 지정합니다.

        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

LIKE 연산자 사용

Like 연산자를 사용하면 와일드카드 문자를 사용하여 WQL 쿼리 결과를 필터링할 수 있습니다.

Like 연산자 설명

[]

범위의 문자 [a-f] 또는 문자 집합 [abcdef]입니다. 집합의 항목은 연속되거나 사전순으로 나열될 필요가 없습니다.

^

범위에 없는 문자 [^a-f] 또는 집합에 없는 문자 [^abcdef]입니다. 집합의 항목은 연속되거나 사전순으로 나열될 필요가 없습니다.

%

문자가 0개 이상인 문자열입니다.

_

하나의 문자입니다.

(밑줄)

참고:

쿼리 문자열에서 리터럴 밑줄을 사용하려면 대괄호([_])로 묶습니다.

와일드카드 문자나 범위 연산자 없이 Like 연산자를 사용할 경우 같음 연산자(=)처럼 동작하고 패턴과 정확히 일치하는 경우에만 개체를 반환합니다.

범위 작업을 백분율 와일드카드 문자와 결합하여 간단하지만 강력한 필터를 만들 수 있습니다.

LIKE 연산자 예제

예제 1: [<range>]

다음 명령은 메모장을 시작한 다음 이름이 "H"와 "N"(대/소문자 구분 안 함) 사이의 문자로 시작하는 Win32_Process 클래스의 인스턴스를 검색합니다.

쿼리는 Notepad.exe를 통해 Hotpad.exe에서 프로세스를 반환해야 합니다.

        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

예제 2: [<range>] 및 %

다음 명령은 이름이 A와 P(대/소문자 구분 안 함) 사이의 문자로 시작하고 그다음에 0개 이상의 문자 또는 문자 조합이 오는 모든 프로세스를 선택합니다.

Get-WmiObject cmdlet은 쿼리를 실행하고 Select-Object cmdlet은 Name 및 ProcessID 속성을 가져오며 Sort-Object cmdlet은 이름의 사전순으로 결과를 정렬합니다.

        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

예제 3: 범위에 없음(^)

다음 명령은 이름이 A, S, W, P, R, C, U, N 문자로 시작하지 않고 그다음에 0개 이상의 문자가 오는 프로세스를 가져옵니다.

        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

예제 4: 모든 문자는 -- 또는 없음(%)

다음 명령은 이름이 "calc"로 시작하는 프로세스를 가져옵니다. WQL의 % 기호는 정규식의 별표(*) 기호와 동일합니다.

        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

예제 5: 하나의 문자(_)

다음 명령은 이름이 "c_lc.exe" 패턴을 사용하는 프로세스를 가져옵니다. 여기서 밑줄 문자는 임의의 문자 하나를 나타냅니다. 이 패턴은 calc.exe부터 czlc.exe 또는 c9lc.exe까지의 이름과 일치하지만 "c" 및 "l"가 둘 이상의 문자로 구분되는 이름과는 일치하지 않습니다.

      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

예제 6: 정확히 일치

다음 명령은 WLIDSVC.exe라는 프로세스를 가져옵니다. 쿼리에서 Like 키워드를 사용하지만 값에 와일드카드 문자가 포함되어 있지 않으므로 정확히 일치해야 합니다.

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

OR 연산자 사용

여러 가지 독립적인 조건을 지정하려면 Or 키워드를 사용합니다. Or 키워드는 Where 절에 나타납니다. 이 키워드는 두 개 이상의 조건에서 포함 OR 연산을 수행하고 조건을 충족하는 항목을 반환합니다.

Or 연산자의 형식은 다음과 같습니다.

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

예를 들어 다음 명령은 Win32_Process WMI 클래스의 모든 인스턴스를 가져오지만 프로세스 이름이 winword.exe 또는 excel.exe인 경우에만 반환합니다.

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

Or 문은 세 개 이상의 조건에서 사용할 수 있습니다. 다음 쿼리에서 Or 문은 Winword.exe, Excel.exe 또는 Powershell.exe를 가져옵니다.

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

AND 연산자 사용

여러 가지 관련된 조건을 지정하려면 And 키워드를 사용합니다. And 키워드는 Where 절에 나타납니다. 이 키워드는 모든 조건을 충족하는 항목을 반환합니다.

And 연산자의 형식은 다음과 같습니다.

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

예를 들어 다음 명령은 이름이 "Winword.exe"이고 프로세스 ID가 6512인 프로세스를 가져옵니다.

이 명령은 Get-CimInstance cmdlet을 사용합니다.

        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

Like 연산자를 포함한 모든 연산자는 Or 및 And 연산자에서 사용할 수 있습니다. 또한 단일 쿼리의 Or 및 And 연산자를 괄호로 묶어 먼저 처리할 절을 Windows PowerShell에 알릴 수 있습니다.

이 명령은 Windows PowerShell 연속 문자(')를 사용하여 명령을 두 줄로 나눕니다.

        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

NULL 값 검색

WMI에서 null 값을 검색하면 예기치 않은 결과가 발생할 수 있으므로 어렵습니다. Null은 0이 아니며 빈 문자열과 동일하지 않습니다. 일부 WMI 클래스 속성은 초기화되고 일부는 초기화되지 않으므로 일부 속성에서는 null 검색이 작동하지 않을 수 있습니다.

null 값을 검색하려면 값이 "null"인 Is 연산자를 사용합니다.

예를 들어 다음 명령은 IntallDate 속성에 대해 null 값을 갖는 프로세스를 가져옵니다. 명령은 많은 프로세스를 반환합니다.

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

반면 다음 명령은 Description 속성에 대해 null 값을 갖는 사용자 계정을 가져옵니다. 이 명령은 대부분의 사용자 계정이 Description 속성에 대해 값을 갖지 않는 경우에도 사용자 계정을 반환하지 않습니다.

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

Description 속성에 대한 값이 없는 사용자 계정을 찾으려면 같음 연산자를 사용하여 빈 문자열을 가져옵니다. 빈 문자열을 나타내려면 두 개의 연속된 작은따옴표를 사용합니다.

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

TRUE 또는 FALSE 사용

WMI 개체의 속성에서 Boolean 값을 가져오려면 True와 False를 사용합니다. 이러한 값은 대/소문자를 구분하지 않습니다.

다음 WQL 쿼리는 도메인에 가입된 컴퓨터의 로컬 사용자 계정만 반환합니다.

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

도메인 계정을 찾으려면 다음 예제와 같이 False 값을 사용합니다.

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

이스케이프 문자 사용

WQL에서는 백슬래시(\)를 이스케이프 문자로 사용합니다. 이는 억음 문자(`)를 사용하는 Windows PowerShell과 다릅니다.

따옴표와 인용 부호에 사용되는 문자는 잘못 해석되지 않도록 이스케이프해야 하는 경우가 종종 있습니다.

이름에 작은따옴표가 포함된 사용자를 찾으려면 다음 명령과 같이 백슬래시를 사용하여 작은따옴표를 이스케이프합니다.

        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

경우에 따라 백슬래시도 이스케이프해야 합니다. 예를 들어 다음 명령은 Caption 값의 백슬래시로 인해 Invalid Query 오류를 생성합니다.

        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

백슬래시를 이스케이프하려면 다음 명령과 같이 두 번째 백슬래시 문자를 사용합니다.

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

참고 항목

about_Escape_Characters

about_Quoting_Rules

about_WMI

about_WMI_Cmdlets