Select-Xml

Sucht Text in einer XML-Zeichenfolge oder einem Dokument.

Syntax

Xml (Standard)

Select-Xml
    [-XPath] <string>
    [-Xml] <XmlNode[]>
    [-Namespace <hashtable>]
    [<CommonParameters>]

Path

Select-Xml
    [-XPath] <string>
    [-Path] <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 Select-Xml Cmdlet können Sie XPath-Abfragen verwenden, um nach Text in XML-Zeichenfolgen und -Dokumenten 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 der Types.ps1xml. Informationen zu dieser Datei finden Sie unter about_Types.ps1xml.

Der erste Befehl speichert den Pfad zur Datei in der Types.ps1xml$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 von der XPath-Anweisung aus der Types.ps1xml Datei identifiziert werden. Der Befehl verwendet einen Pipelineoperator (|), um die AliasProperty-Knoten an das Select-Object Cmdlet zu senden. Der Parameter ExpandProperty erweitert das Node-Objekt und gibt seine 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 den Namen und den VerweisdMemberName jeder Aliaseigenschaft in der Types.ps1xml Datei an. 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 sie in der $Types Variablen. Die [xml] Variable wird als XML-Objekt umgegossen.

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 und den XPath-Parameter anzugeben, um den Pfad zum MethodName-Knoten anzugeben.

[xml]$Types = Get-Content $PSHOME\Types.ps1xml
Select-Xml -Xml $Types -XPath "//MethodName"

Beispiel 3: Durchsuchen von PowerShell-Hilfedateien

In diesem Beispiel wird gezeigt, wie Sie mithilfe des Select-Xml Cmdlets die Hilfedateien des XML-basierten PowerShell-Cmdlets durchsuchen. In diesem Beispiel suchen wir nach dem Cmdlet-Namen, der als Titel für jede Hilfedatei und den Pfad zur Hilfedatei dient.

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 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 Cmdlet-Namen, 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 mit einer Node -Eigenschaft zurück, bei dem es sich um ein System.Xml.XmlElement -Objekt handelt. Die Node-Eigenschaft verfügt über eine InnerXml-Eigenschaft , die den tatsächlichen XML-Code enthält, der abgerufen wird.

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

Dieses Beispiel zeigt zwei verschiedene Methoden zum Senden von XML an das Select-Xml Cmdlet.

Der erste Befehl speichert eine here-Zeichenfolge, die XML in der $Xml Variablen enthält. Weitere Informationen zu here-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 der 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 Standardnamespace xmlns verwenden. Im Beispiel werden die Titel Windows vom Benutzer erstellten PowerShell ISE-Codeausschnittdateien angezeigt. Informationen zu Codeausschnitten finden Sie unter New-IseSnippet.

Die $SnippetNamespace Variable enthält eine Hashtabelle für den Standardnamespace, den XML-Codeausschnittdateien verwenden. Der Hashtabellenwert ist der XMLNS-Schema-URI im Codeausschnitt-XML. Der Schlüsselname der Hashtabelle, " Snip", ist beliebig. Sie können einen beliebigen Namen verwenden, der nicht reserviert ist, aber keine XMLNs verwenden können.

Das Select-Xml Cmdlet ruft den Inhalt des Title-Elements jedes Codeausschnitts ab. Er verwendet den Path-Parameter , um das Codeausschnittverzeichnis und den Namespaceparameter anzugeben, um den Namespace in der $SnippetNamespace Variablen anzugeben. Der Wert des XPath-Parameters ist der 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 durchsuchenden XML-Code enthält. Sie können auch Zeichenfolgen an Select-Xml.

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, EP

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 Namespacenamen und einen Doppelpunkt voran, z //namespaceName:Node. B. .

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 an Select-Xmleine Pipeline weitergeleitet haben, wird jeder Dokumentknoten separat durchsucht, wie es durch die Pipeline geht.

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 im Abschnitt "XPath-Referenz " und im Abschnitt "Auswahlfilter" der Ereignisauswahl.