Share via


Select-Xml

XML 문자열 또는 문서에서 텍스트를 찾습니다.

Syntax

Select-Xml
      [-XPath] <string>
      [-Xml] <XmlNode[]>
      [-Namespace <hashtable>]
      [<CommonParameters>]
Select-Xml
      [-XPath] <string>
      [-Path] <string[]>
      [-Namespace <hashtable>]
      [<CommonParameters>]
Select-Xml
      [-XPath] <string>
      -LiteralPath <string[]>
      [-Namespace <hashtable>]
      [<CommonParameters>]
Select-Xml
      [-XPath] <string>
      -Content <string[]>
      [-Namespace <hashtable>]
      [<CommonParameters>]

Description

cmdlet Select-Xml 을 사용하면 XPath 쿼리를 사용하여 XML 문자열 및 문서에서 텍스트를 검색할 수 있습니다. XPath 쿼리를 입력하고 Content, Path 또는 Xml 매개 변수를 사용하여 검색할 XML을 지정합니다.

예제

예제 1: AliasProperty 노드 선택

이 예제에서는 .의 Types.ps1xml별칭 속성을 가져옵니다. 이 파일에 대한 자세한 내용은 about_Types.ps1xml을 참조 하세요.

첫 번째 명령은 파일 경로를 변수에 Types.ps1xml$Path 저장합니다.

두 번째 명령은 변수의 AliasProperty 노드 $XPathXML 경로를 저장합니다.

cmdlet은 Select-Xml 파일에서 XPath 문으로 식별되는 AliasProperty 노드를 Types.ps1xml 가져옵니다. 이 명령은 파이프라인 연산자(|)를 사용하여 AliasProperty 노드를 cmdlet으로 Select-Object 보냅니다. ExpandProperty 매개 변수는 Node 개체를 확장하고 NameReferencedMemberName 속성을 반환합니다.

$Path = "$Pshome\Types.ps1xml"
$XPath = "/Types/Type/Members/AliasProperty"
Select-Xml -Path $Path -XPath $Xpath | Select-Object -ExpandProperty Node

Name                 ReferencedMemberName
----                 --------------------
Count                Length
Name                 Key
Name                 ServiceName
RequiredServices     ServicesDependedOn
ProcessName          Name
Handles              Handlecount
VM                   VirtualSize
WS                   WorkingSetSize
Name                 ProcessName
Handles              Handlecount
VM                   VirtualMemorySize
WS                   WorkingSet
PM                   PagedMemorySize
NPM                  NonpagedSystemMemorySize
Name                 __Class
Namespace            ModuleName

결과는 파일에 있는 각 별칭 속성의 Name 및 ReferencedMemberNameTypes.ps1xml 보여 줍니다. 예를 들어 Length 속성의 별칭인 Count 속성이 있습니다.

예제 2: XML 문서 입력

이 예제에서는 XML 매개 변수를 사용하여 cmdlet에 XML 문서를 Select-Xml 제공하는 방법을 보여줍니다.

cmdlet은 Get-Content 파일의 Types.ps1xml 내용을 가져오고 변수에 $Types 저장합니다. 변수 [xml] 를 XML 개체로 캐스팅합니다.

cmdlet은 Select-Xml 파일의 MethodName 노드를 Types.ps1xml 가져옵니다. 이 명령은 Xml 매개 변수를 사용하여 변수의 $Types XML 콘텐츠를 지정하고 XPath 매개 변수를 사용하여 MethodName 노드의 경로를 지정합니다.

[xml]$Types = Get-Content $Pshome\Types.ps1xml
Select-Xml -Xml $Types -XPath "//MethodName"

예제 3: PowerShell 도움말 파일 검색

이 예제에서는 cmdlet을 Select-Xml 사용하여 PowerShell XML 기반 cmdlet 도움말 파일을 검색하는 방법을 보여줍니다. 이 예제에서는 각 도움말 파일의 제목으로 사용되는 cmdlet 이름과 도움말 파일의 경로를 검색합니다.

변수에는 $Namespace 도움말 파일에 사용되는 XML 네임스페이스를 나타내는 해시 테이블이 포함되어 있습니다.

변수에는 $Path PowerShell 도움말 파일의 경로가 포함됩니다. 컴퓨터의 이 경로에 도움말 파일이 없는 경우 cmdlet을 Update-Help 사용하여 도움말 파일을 다운로드합니다. Updatable 도움말에 대한 자세한 내용은 about_Updatable_Help 참조하세요.

cmdlet은 Select-Xml 파일의 아무 곳이나 요소를 찾아 Command:Name XML 파일에서 cmdlet 이름을 검색합니다. 결과는 변수에 $Xml 저장됩니다. Select-XmlSystem.Xml.XmlElement 개체인 Node 속성이 있는 SelectXmlInfo 개체를 반환합니다. Node 속성에는 검색되는 실제 XML을 포함하는 InnerXML 속성이 있습니다.

변수는 $Xml cmdlet에 Format-Table 파이프됩니다. 이 Format-Table 명령은 계산된 속성을 사용하여 변수에 있는 $Xml 각 개체의 Node.InnerXML 속성을 가져와 텍스트 앞과 뒤의 공백을 트리밍하고 원본 파일의 경로와 함께 표에 표시합니다.

$Namespace = @{
    command = "http://schemas.microsoft.com/maml/dev/command/2004/10"
    maml = "http://schemas.microsoft.com/maml/2004/10"
    dev = "http://schemas.microsoft.com/maml/dev/2004/10"
}

$Path = "$Pshome\en-us\*dll-Help.xml"
$Xml = Select-Xml -Path $Path -Namespace $Namespace -XPath "//command:name"
$Xml | Format-Table @{Label="Name"; Expression= {($_.node.innerxml).trim()}}, Path -AutoSize

Name                    Path
----                    ----
Export-Counter          C:\Windows\system32\WindowsPowerShell\v1.0\en-us\Microsoft.PowerShell.Commands.Diagnostics.dll-Help.xml
Get-Counter             C:\Windows\system32\WindowsPowerShell\v1.0\en-us\Microsoft.PowerShell.Commands.Diagnostics.dll-Help.xml
Get-WinEvent            C:\Windows\system32\WindowsPowerShell\v1.0\en-us\Microsoft.PowerShell.Commands.Diagnostics.dll-Help.xml
Import-Counter          C:\Windows\system32\WindowsPowerShell\v1.0\en-us\Microsoft.PowerShell.Commands.Diagnostics.dll-Help.xml
Add-Computer            C:\Windows\system32\WindowsPowerShell\v1.0\en-us\Microsoft.PowerShell.Commands.Management.dll-Help.xml
Add-Content             C:\Windows\system32\WindowsPowerShell\v1.0\en-us\Microsoft.PowerShell.Commands.Management.dll-Help.xml
Checkpoint-Computer     C:\Windows\system32\WindowsPowerShell\v1.0\en-us\Microsoft.PowerShell.Commands.Management.dll-Help.xml
...

예제 4: XML을 입력하는 다양한 방법

이 예제에서는 cmdlet에 XML Select-Xml 을 보내는 두 가지 방법을 보여줍니다.

첫 번째 명령은 변수에 XML이 포함된 here 문자열을 $Xml 저장합니다. 여기 문자열에 대한 자세한 내용은 about_Quoting_Rules 참조하세요.

Select-Xml는 Content 매개 변수를 사용하여 변수에서 XML을 지정합니다$Xml.

세 번째 명령은 tt가 파이프라인 연산자(|)를 사용하여 변수 Select-Xml 의 XML $Xml 을 cmdlet으로 보내는 것을 제외하고 두 번째 명령과 동일합니다.

$Xml = @"
<?xml version="1.0" encoding="utf-8"?>
<Book>
  <projects>
    <project name="Book1" date="2009-01-20">
      <editions>
        <edition language="English">En.Book1.com</edition>
        <edition language="German">Ge.Book1.Com</edition>
        <edition language="French">Fr.Book1.com</edition>
        <edition language="Polish">Pl.Book1.com</edition>
      </editions>
    </project>
  </projects>
</Book>
"@

Select-Xml -Content $Xml -XPath "//edition" | foreach {$_.node.InnerXML}

En.Book1.com
Ge.Book1.Com
Fr.Book1.com
Pl.Book1.com

$Xml | Select-Xml -XPath "//edition" | foreach {$_.node.InnerXML}

En.Book1.com
Ge.Book1.Com
Fr.Book1.com
Pl.Book1.com

예제 5: 기본 xmlns 네임스페이스 사용

이 예제에서는 기본 xmlns 네임스페이 Select-Xml 스를 사용하는 XML 문서와 함께 cmdlet을 사용하는 방법을 보여 줍니다. 이 예제에서는 Windows PowerShell ISE 사용자가 만든 코드 조각 파일의 제목을 가져옵니다. 코드 조각에 대한 자세한 내용은 New-IseSnippet을 참조하세요.

변수에는 $SnippetNamespace XML 파일 조각에서 사용하는 기본 네임스페이스에 대한 해시 테이블이 포함되어 있습니다. 해시 테이블 값은 조각 XML의 XMLNS 스키마 URI입니다. 해시 테이블 키 이름인 스니프는 임의입니다. 예약되지 않은 이름은 사용할 수 있지만 xmlns를 사용할 수는 없습니다.

cmdlet은 Select-Xml 각 코드 조각의 Title 요소 콘텐츠를 가져옵니다. Path 매개 변수를 사용하여 코드 조각 디렉터리와 네임스페이스 매개 변수를 지정하여 변수에 네임스페이 $SnippetNamespace 스를 지정합니다. XPath 매개 변수의 값은 .입니다snip:Title. 결과는 노드의 ForEach-Object InnerXml 속성 값에서 제목을 가져오는 cmdlet으로 파이프됩니다.

$SnippetNamespace = @{snip = "http://schemas.microsoft.com/PowerShell/Snippets"}

Select-Xml -Path $HOME\Documents\WindowsPowerShell\Snippets -Namespace $SnippetNamespace -XPath "//snip:Title" |
    ForEach-Object {$_.Node.Innerxml}

매개 변수

-Content

검색할 XML이 포함된 문자열을 지정합니다. 문자열을 .에 파이프할 Select-Xml수도 있습니다.

Type:String[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-LiteralPath

검색할 XML 파일의 경로 및 파일 이름을 지정합니다. Path와 달리 LiteralPath 매개 변수의 값은 입력된 대로 정확하게 사용됩니다. 어떤 문자도 야생으로 해석되지 카드. 경로에 이스케이프 문자가 포함된 경우 작은따옴표로 묶습니다. 작은따옴표는 PowerShell에 문자를 이스케이프 시퀀스로 해석하지 않도록 지시합니다.

Type:String[]
Aliases:PSPath, LP
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Namespace

XML에 사용되는 네임스페이스의 해시 테이블을 지정합니다. @{<namespaceName> = <namespaceValue>} 형식을 사용합니다.

XML에서 xmlns로 시작하는 기본 네임스페이스를 사용하는 경우 네임스페이스 이름에 임의의 키를 사용합니다. xmlns를 사용할 수 없습니다. XPath 문에서 각 노드 이름 앞에 네임스페이스 이름과 콜론(예: .)을 접두사로 //namespaceName:Node지정합니다.

Type:Hashtable
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

검색할 XML 파일의 경로 및 파일 이름을 지정합니다. 와일드카드 문자를 사용할 수 있습니다.

Type:String[]
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-Xml

하나 이상의 XML 노드를 지정합니다.

XML 문서는 XML 노드의 컬렉션으로 처리됩니다. XML 문서를 파이프하는 Select-Xml경우 각 문서 노드는 파이프라인을 통해 제공되므로 별도로 검색됩니다.

Type:XmlNode[]
Aliases:Node
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-XPath

XPath 검색 쿼리를 지정합니다. 쿼리 언어는 대/소문자를 구분합니다. 이 매개 변수는 필수입니다.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

입력

System.String or System.Xml.XmlNode

경로 또는 XML 노드를 이 cmdlet으로 파이프할 수 있습니다.

출력

SelectXmlInfo

참고

XPath는 XML 문서의 일부를 식별하도록 설계된 표준 언어입니다. XPath 언어에 대한 자세한 내용은 이벤트 선택의 XPath 참조 및 선택 필터 섹션을 참조하세요.