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
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.