Select-Xml
Sucht Text in einer XML-Zeichenfolge oder einem Dokument.
Syntax
Xml (Standard)
Select-Xml
[-Xml] <XmlNode[]>
[-XPath] <String>
[-Namespace <Hashtable>]
[<CommonParameters>]
Path
Select-Xml
[-Path] <String[]>
[-XPath] <String>
[-Namespace <Hashtable>]
[<CommonParameters>]
LiteralPath
Select-Xml
[-XPath] <String>
-LiteralPath <String[]>
[-Namespace <Hashtable>]
[<CommonParameters>]
Content
Select-Xml
[-XPath] <String>
-Content <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 Content, Pathoder XML- Parameter, 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 der Datei "Types.ps1xml" abgerufen. (Weitere Informationen zu dieser Datei finden Sie unter about_Types.ps1xml.)
Mit dem ersten Befehl wird der Pfad zur Datei Types.ps1xml in der Variablen $Path gespeichert.
Mit dem zweiten Befehl wird der XML-Pfad zum Knoten AliasProperty in der Variablen $XPath gespeichert.
Der dritte Befehl verwendet das Cmdlet Select-Xml , um die AliasProperty-Knoten abzurufen, die durch die XPath-Anweisung aus 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 den Namen und den ReferencedMemberName der einzelnen Aliaseigenschaften in der Datei Types.ps1xml an. Beispielsweise gibt es eine Count-Eigenschaft, die ein Alias der eigenschaft Length 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 der XML-Parameter verwendet wird, um ein XML-Dokument für das Cmdlet Select-Xml 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 Cmdlet Select-Xml , um die MethodName-Knoten in der Datei Types.ps1xml abzurufen. Der Befehl verwendet den Parameter Xml , um den XML-Inhalt in der Variablen $Types anzugeben, und den XPath-Parameter , um den Pfad zum Knoten MethodName anzugeben.
Beispiel 3: Durchsuchen von 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 XML-basierten PowerShell-Cmdlet-Hilfedateien zu durchsuchen. In diesem Beispiel suchen wir nach dem Cmdlet-Namen, der als Titel für jede Hilfedatei und den Pfad zur Hilfedatei dient.
Mit dem ersten Befehl wird eine Hashtabelle erstellt, die den XML-Namespace darstellt, der für die Hilfedateien verwendet wird, und in der Variablen $Namespace gespeichert.
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.
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 das Cmdlet Select-Xml mit XML-Dokumenten verwendet wird, die den xmlns-Standardnamespace verwenden. Das Beispiel ruft die Titel der vom Benutzer erstellten Codeausschnittdateien von Windows PowerShell ISE ab. Weitere Informationen zu Codeausschnitten finden Sie unter New-IseSnippet.
Mit dem ersten Befehl wird eine Hashtabelle für den Standardnamespace erstellt, der von XML-Codeausschnittdateien verwendet wird, und sie der Variablen $SnippetNamespace zugewiesen. Der Hashtabellenwert ist der XMLNS-Schema-URI im Codeausschnitt-XML. Der Schlüsselname der Hash-Tabelle, snip, ist beliebig. Sie können einen beliebigen Namen verwenden, der nicht reserviert ist, aber Sie können xmlns nicht verwenden.
Parameter
-Content
Gibt eine Zeichenfolge an, die den zu durchsuchenden XML-Code enthält. Sie können Zeichenfolgen auch über die Pipeline an Select-Xml übergeben.
Parametereigenschaften
| Typ: | String[] |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
Content
| Position: | Named |
| Obligatorisch: | True |
| Wert aus Pipeline: | True |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-LiteralPath
Gibt die Pfade und Dateinamen der zu durchsuchenden XML-Dateien an. Im Gegensatz zu Path wird der Wert des LiteralPath-Parameters genau so verwendet, wie er eingegeben wurde. Es werden keine Zeichen als Wildcards interpretiert. Wenn der Pfad Escapezeichen enthält, müssen Sie ihn in einfache Anführungszeichen einschließen. Einfache Anführungszeichen signalisieren PowerShell, dass keine Zeichen als Escapesequenzen interpretiert werden sollen.
Parametereigenschaften
| Typ: | String[] |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
| Aliase: | PSPath |
Parametersätze
LiteralPath
| Position: | Named |
| Obligatorisch: | True |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | True |
| Wert aus verbleibenden Argumenten: | False |
-Namespace
Gibt eine Hashtabelle der namespaces an, die im XML-Code verwendet werden. 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. Stellen Sie in der XPath-Anweisung jedem Knotennamen den Namen des Namespaces und einen Doppelpunkt voran, z. B. //namespaceName:Node.
Parametereigenschaften
| Typ: | Hashtable |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
(All)
| Position: | Named |
| Obligatorisch: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-Path
Gibt den Pfad und dateinamen der zu durchsuchenden XML-Dateien an. Platzhalterzeichen sind zulässig.
Parametereigenschaften
| Typ: | String[] |
| Standardwert: | None |
| Unterstützt Platzhalter: | True |
| Nicht anzeigen: | False |
Parametersätze
Path
| Position: | 1 |
| Obligatorisch: | True |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | True |
| Wert aus verbleibenden Argumenten: | False |
-Xml
Gibt mindestens einen XML-Knoten an.
Ein XML-Dokument wird als Sammlung von XML-Knoten verarbeitet. Wenn Sie ein XML-Dokument über die Pipeline an Select-Xml übergeben, wird jeder Dokumentknoten separat durchsucht, wenn er die Pipeline durchläuft.
Parametereigenschaften
| Typ: | XmlNode[] |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
| Aliase: | Knoten |
Parametersätze
Xml
| Position: | 1 |
| Obligatorisch: | True |
| Wert aus Pipeline: | True |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | True |
| Wert aus verbleibenden Argumenten: | False |
-XPath
Gibt eine XPath-Suchabfrage an. Bei der Abfragesprache wird die Groß-/Kleinschreibung beachtet. Dieser Parameter ist erforderlich.
Parametereigenschaften
| Typ: | String |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
(All)
| Position: | 0 |
| Obligatorisch: | True |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
CommonParameters
Dieses Cmdlet unterstützt die allgemeinen Parameter -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction und -WarningVariable. Weitere Informationen findest du unter about_CommonParameters.
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 zum Identifizieren von Teilen eines XML-Dokuments entwickelt wurde. Weitere Informationen zur XPath-Sprache finden Sie unter XPath Reference und im Abschnitt "Auswahlfilter" des ereignisauswahl- in der MSDN Library.