Select-Xml
Sucht Text in einer XML-Zeichenfolge oder einem XML-Dokument.
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>]
Beschreibung
Mit Select-Xml
dem Cmdlet 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
In diesem Beispiel werden die Aliaseigenschaften in abgerufen Types.ps1xml
. Informationen zu dieser Datei finden Sie unter about_Types.ps1xml.
Der erste Befehl speichert den Pfad zur Types.ps1xml
Datei in der $Path
Variablen.
Der zweite Befehl speichert den XML-Pfad zum AliasProperty-Knoten in der $XPath
Variablen.
Das Select-Xml
Cmdlet ruft die AliasProperty-Knoten ab, die durch die XPath-Anweisung identifiziert werden, aus der Types.ps1xml
Datei. Der Befehl verwendet einen Pipelineoperator (|
), um die AliasProperty-Knoten an das Select-Object
Cmdlet zu senden. Der ExpandProperty-Parameter erweitert das Node-Objekt und gibt die Eigenschaften Name und ReferencedMemberName zurück.
$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
Das Ergebnis zeigt name und ReferencedMemberName der einzelnen Aliaseigenschaften in der Types.ps1xml
Datei. Beispielsweise gibt es eine Count-Eigenschaft , die ein Alias der Length-Eigenschaft ist.
Beispiel 2: Eingeben eines XML-Dokuments
In diesem Beispiel wird gezeigt, wie Sie den XML-Parameter verwenden, um dem Select-Xml
Cmdlet ein XML-Dokument bereitzustellen.
Das Get-Content
Cmdlet ruft den Inhalt der Types.ps1xml
Datei ab und speichert ihn in der $Types
Variablen. Wandelt [xml]
die Variable in ein XML-Objekt um.
Das Select-Xml
Cmdlet ruft die MethodName-Knoten in der Types.ps1xml
Datei ab. Der Befehl verwendet den Xml-Parameter , um den XML-Inhalt in der $Types
Variablen anzugeben, und den XPath-Parameter , um den Pfad zum Knoten MethodName anzugeben.
[xml]$Types = Get-Content $Pshome\Types.ps1xml
Select-Xml -Xml $Types -XPath "//MethodName"
Beispiel 3: Search PowerShell-Hilfedateien
In diesem Beispiel wird gezeigt, wie Sie das Select-Xml
Cmdlet 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.
Die $Namespace
Variable enthält eine Hashtabelle, die den XML-Namespace darstellt, der für die Hilfedateien verwendet wird.
Die $Path
Variable enthält den Pfad zu den PowerShell-Hilfedateien. Wenn in diesem Pfad auf Ihrem Computer keine Hilfedateien vorhanden sind, verwenden Sie das Update-Help
Cmdlet, um die Hilfedateien herunterzuladen. Weitere Informationen zur aktualisierbaren Hilfe finden Sie unter about_Updatable_Help.
Das Select-Xml
Cmdlet durchsucht die XML-Dateien nach Cmdletnamen, indem das Element an einer beliebigen Stelle in den Dateien gefunden Command:Name
wird. Die Ergebnisse werden in der $Xml
Variablen gespeichert. Select-Xml
gibt ein SelectXmlInfo-Objekt zurück, das über eine Node-Eigenschaft verfügt, die ein System.Xml ist. XmlElement-Objekt .
Die Node-Eigenschaft verfügt über eine InnerXML-Eigenschaft , die den tatsächlich abgerufenen XML-Code enthält.
Die $Xml
Variable wird an das Format-Table
Cmdlet weitergeleitet. Der Format-Table
Befehl verwendet eine berechnete Eigenschaft, um die Node.InnerXML-Eigenschaft jedes Objekts in der $Xml
Variablen abzurufen, den Leerraum vor und nach dem Text zu kürzen und in der Tabelle zusammen mit dem Pfad zur Quelldatei anzuzeigen.
$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
...
Beispiel 4: Verschiedene Möglichkeiten zum Eingeben von XML
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 $Xml
Variablen enthält. Weitere Informationen zu hier-Zeichenfolgen finden Sie unter about_Quoting_Rules.
Select-Xml
verwendet den Content-Parameter , um den XML-Code in der $Xml
Variablen anzugeben.
Der dritte Befehl ist identisch mit dem zweiten, mit der Ausnahme, dass tt einen Pipelineoperator (|
) verwendet, um den XML-Code in der $Xml
Variablen an das Select-Xml
Cmdlet zu senden.
$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
Beispiel 5: Verwenden des xmlns-Standardnamespaces
In diesem Beispiel wird gezeigt, wie Sie das Select-Xml
Cmdlet 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.
Die $SnippetNamespace
Variable enthält eine Hashtabelle für den Standardnamespace, den CODEAUSSCHNITT-XML-Dateien verwenden. 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.
Das Select-Xml
Cmdlet ruft den Inhalt des Title-Elements jedes Codeausschnitts ab. Sie verwendet den Path-Parameter , um das Verzeichnis Snippets und den Namespace-Parameter anzugeben, um den Namespace in der $SnippetNamespace
Variablen anzugeben. Der Wert des XPath-Parameters ist .snip:Title
Die Ergebnisse werden an das ForEach-Object
Cmdlet weitergeleitet, das den Titel aus dem Wert der InnerXml-Eigenschaft des Knotens abruft.
$SnippetNamespace = @{snip = "http://schemas.microsoft.com/PowerShell/Snippets"}
Select-Xml -Path $HOME\Documents\WindowsPowerShell\Snippets -Namespace $SnippetNamespace -XPath "//snip:Title" |
ForEach-Object {$_.Node.Innerxml}
Parameter
-Content
Gibt eine Zeichenfolge an, die den zu suchenden XML-Inhalt enthält. Sie können auch Zeichenfolgen an übergeben Select-Xml
.
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, 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. Xmlns können nicht verwendet werden. Präfixieren Sie in der XPath-Anweisung jedem Knotennamen den Namespacenamen und einen Doppelpunkt, z //namespaceName:Node
. B. .
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
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.