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 XPath-Abfragen verwenden, um in XML-Zeichenfolgen und -Dokumenten nach Text zu suchen. Geben Sie eine XPath-Abfrage ein, und verwenden Sie den Parameter Content, Path oder Xml , um den zu durchsuchenden XML-Code anzugeben.

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 den XML-Parameter verwenden, um ein XML-Dokument für das Select-Xml-Cmdlet bereitzustellen.

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 in ein 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 das Cmdlet Select-Xml verwenden, um die Hilfedateien des XML-basierten PowerShell-Cmdlets zu 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 Select-Xml-Cmdlet gezeigt.

Der erste Befehl speichert eine here-Zeichenfolge, 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 Select-Xml-Cmdlet mit XML-Dokumenten verwenden, die den standardmäßigen xmlns-Namespace 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 Schlüsselname der Hashtabelle, 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 auch Zeichenfolgen 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. Einfache Anführungszeichen weisen PowerShell an, keine Zeichen als Escapesequenzen zu interpretieren.

Type:String[]
Aliases:PSPath
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. Xmlns können nicht verwendet werden. 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 es 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 übergeben.

Ausgaben

SelectXmlInfo

Hinweise

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