Freigeben über


Select-Xml

Sucht Text in einer XML-Zeichenfolge oder einem XML-Dokument.

Syntax

Select-Xml
      [-Xml] <XmlNode[]>
      [-XPath] <String>
      [-Namespace <Hashtable>]
      [<CommonParameters>]
Select-Xml
      [-Path] <String[]>
      [-XPath] <String>
      [-Namespace <Hashtable>]
      [<CommonParameters>]
Select-Xml
      -LiteralPath <String[]>
      [-XPath] <String>
      [-Namespace <Hashtable>]
      [<CommonParameters>]
Select-Xml
      -Content <String[]>
      [-XPath] <String>
      [-Namespace <Hashtable>]
      [<CommonParameters>]

Beschreibung

Mit dem Cmdlet Select-Xml können Sie mit XPath-Abfragen nach Text in XML-Zeichenfolgen und Dokumenten suchen. Geben Sie eine XPath-Abfrage ein, und geben Sie mit dem Parameter Content, Path oder Xml die zu durchsuchende XML-Datei an.

Beispiele

Beispiel 1: Auswählen von AliasProperty-Knoten

PS C:\> $Path = "$Pshome\Types.ps1xml"
PS C:\> $XPath = "/Types/Type/Members/AliasProperty"
PS C:\> 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

In diesem Beispiel werden die Aliaseigenschaften in „Types.ps1xml“ abgerufen. (Weitere Informationen zu dieser Datei finden Sie unter about_Types.ps1xml.)

Der erste Befehl speichert den Pfad zur Datei „Types.ps1xml“ in der $Path-Variablen.

Der zweite Befehl speichert den XML-Pfad zum AliasProperty-Knoten in der $XPath-Variablen.

Der dritte Befehl verwendet das Select-Xml-Cmdlet zum Abrufen der AliasProperty-Knoten, die durch die XPath-Anweisung der Datei „Types.ps1xml“ identifiziert werden. Der Befehl verwendet einen Pipelineoperator, um die AliasProperty-Knoten an das Cmdlet Select-Object zu senden. Der ExpandProperty-Parameter erweitert das Node-Objekt und gibt die Eigenschaften Name und ReferencedMemberName zurück.

Das Ergebnis zeigt die Name-Eigenschaft und ReferencedMemberName-Eigenschaft jeder Aliaseigenschaft in der Datei „Types.ps1xml“ an. Beispielsweise gibt es eine Count-Eigenschaft , die ein Alias der Length-Eigenschaft ist.

Beispiel 2: Eingeben eines XML-Dokuments

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

In diesem Beispiel wird gezeigt, wie Sie mithilfe des XML-Parameters ein XML-Dokument für das Cmdlet Select-Xml bereitstellen.

Der erste Befehl verwendet das Cmdlet Get-Content, um den Inhalt der Datei Types.ps1xml abzurufen und in der variablen $Types zu speichern. [xml] wandelt die Variable als XML-Objekt um.

Der zweite Befehl verwendet das Select-Xml-Cmdlet zum Abrufen der MethodName-Knoten in der Datei „Types.ps1xml“. Der Befehl verwendet den Xml-Parameter, um den XML-Inhalt in der $Types-Variablen und den XPath-Parameter anzugeben, der den Pfad zum MethodName-Knoten festlegt.

Beispiel 3: Search PowerShell-Hilfedateien

PS C:\> $Namespace = @{command = "https://schemas.microsoft.com/maml/dev/command/2004/10"; maml = "https://schemas.microsoft.com/maml/2004/10"; dev = "https://schemas.microsoft.com/maml/dev/2004/10"}

The second command saves the path to the help files in the $Path variable.If there are no help files in this path on your computer, use the Update-Help cmdlet to download the help files. For more information about Updatable Help, see about_Updatable_Help (https://go.microsoft.com/fwlink/?LinkId=235801).
PS C:\> $Path = "$Pshome\en-us\*dll-Help.xml"

The third command uses the **Select-Xml** cmdlet to search the XML for cmdlet names by finding Command:Name element anywhere in the files. It saves the results in the $Xml variable.**Select-Xml** returns a **SelectXmlInfo** object that has a Node property, which is a **System.Xml.XmlElement** object. The Node property has an InnerXML property, which contains the actual XML that is retrieved.
PS C:\> $Xml = Select-Xml -Path $Path -Namespace $Namespace -XPath "//command:name"

The fourth command sends the XML in the $Xml variable to the Format-Table cmdlet. The **Format-Table** command uses a calculated property to get the Node.InnerXML property of each object in the $Xml variable, trim the white space before and after the text, and display it in the table, along with the path to the source file.
PS C:\> $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
...

In diesem Beispiel wird gezeigt, wie Sie mithilfe des Cmdlets Select-Xml die Hilfedateien des XML-basierten PowerShell-Cmdlets durchsuchen. In diesem Beispiel suchen wir den Cmdletnamen, der als Titel der einzelnen Hilfedateien dient, und den Pfad zur Hilfedatei.

Der erste Befehl erstellt eine Hashtabelle, die den für die Hilfedateien verwendeten XML-Namespace darstellt, und speichert sie in der $Namespace-Variablen.

Beispiel 4: Verschiedene Möglichkeiten zum Eingeben von XML

PS C:\> $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>
"@

The second command uses the *Content* parameter of **Select-Xml** to specify the XML in the $Xml variable.
PS C:\> Select-Xml -Content $Xml -XPath "//edition" | foreach {$_.node.InnerXML}

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

The third command is equivalent to the second. It uses a pipeline operator (|) to send the XML in the $Xml variable to the **Select-Xml** cmdlet.
PS C:\> $Xml | Select-Xml -XPath "//edition" | foreach {$_.node.InnerXML}

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

In diesem Beispiel werden zwei verschiedene Möglichkeiten zum Senden von XML an das Cmdlet Select-Xml gezeigt.

Mit dem ersten Befehl wird eine here-Zeichenfolge gespeichert, die XML in der variablen $Xml enthält. Weitere Informationen zu here-strings finden Sie unter about_Quoting_Rules.

Beispiel 5: Verwenden des xmlns-Standardnamespaces

PS C:\> $SnippetNamespace = @{snip = "https://schemas.microsoft.com/PowerShell/Snippets"}

The second command uses the **Select-Xml** cmdlet to get the content of the Title element of each snippet. It uses the *Path* parameter to specify the Snippets directory and the *Namespace* parameter to specify the namespace in the $SnippetNamespace variable. The value of the *XPath* parameter is the "snip" namespace key, a colon (:), and the name of the Title element.The command uses a pipeline operator (|) to send each **Node** property that **Select-Xml** returns to the ForEach-Object cmdlet, which gets the title in the value of the **InnerXml** property of the node.
PS C:\> Select-Xml -Path $Home\Documents\WindowsPowerShell\Snippets -Namespace $SnippetNamespace -XPath "//snip:Title" | foreach {$_.Node.Innerxml}

In diesem Beispiel wird gezeigt, wie Sie das Cmdlet Select-Xml mit XML-Dokumenten verwenden, die den xmlns-Standardnamespace verwenden. Im Beispiel werden die Titel der vom Benutzer erstellten Windows PowerShell ISE-Codeausschnittsdateien abgerufen. Weitere Informationen zu Codeausschnitten finden Sie unter New-IseSnippet.

Der erste Befehl erstellt eine Hashtabelle für den Standardnamespace, den Codeausschnitt-XML-Dateien verwenden, und weist sie der variablen $SnippetNamespace zu. Der Hashtabellenwert befindet sich im XMLNS-Schema-URI der XML-Codeausschnittsdatei. Der Name des Hashtabellenschlüssels, snip, ist beliebig. Sie können einen beliebigen Namen verwenden, der nicht reserviert ist, aber sie können keine xmlns verwenden.

Parameter

-Content

Gibt eine Zeichenfolge an, die den zu suchenden XML-Inhalt enthält. Sie können Zeichenfolgen auch an Select-Xml übergeben.

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

-LiteralPath

Gibt die Pfad- und Dateinamen der zu durchsuchenden XML-Dateien an. Im Gegensatz zu Path wird der Wert des LiteralPath-Parameters genauso verwendet, wie er eingegeben wurde. Es werden keine Zeichen als Platzhalter interpretiert. Wenn der Pfad Escapezeichen enthält, müssen Sie ihn in einfache Anführungszeichen einschließen. Einzelne Anführungszeichen weisen PowerShell an, keine Zeichen als Escapesequenzen zu interpretieren.

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

-Namespace

Gibt eine Hashtabelle der im XML-Inhalt verwendeten Namespaces an. Verwenden Sie das Format @{<namespaceName> = <namespaceValue>}.

Wenn der XML-Code den Standardnamespace verwendet, der mit xmlns beginnt, verwenden Sie einen beliebigen Schlüssel für den Namespacenamen. Sie können keine xmlns verwenden. Präfixieren Sie in der XPath-Anweisung jedem Knotennamen den Namespacenamen und einen Doppelpunkt, z. B. //namespaceName:Node.

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

-Path

Gibt die Pfad- und Dateinamen der zu durchsuchenden XML-Dateien an. Platzhalterzeichen sind zulässig.

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

-Xml

Gibt mindestens einen XML-Knoten an.

Ein XML-Dokument wird als eine Auflistung von XML-Knoten verarbeitet. Wenn Sie ein XML-Dokument an Select-Xml übergeben, wird jeder Dokumentknoten separat durchsucht, wenn er die Pipeline durchläuft.

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

-XPath

Gibt eine XPath-Suchabfrage an. Bei der Abfragesprache wird Groß-/Kleinschreibung beachtet. Dieser Parameter ist erforderlich.

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

Eingaben

System.String or System.Xml.XmlNode

Sie können einen Pfad oder XML-Knoten an dieses Cmdlet weiterleiten.

Ausgaben

SelectXmlInfo

Hinweise

XPath ist eine Standardsprache, die Teile eines XML-Dokuments identifiziert. Weitere Informationen zur XPath-Sprache finden Sie unter XPath-Referenz und im Abschnitt Auswahlfilter der Ereignisauswahl.