Select-Xml

Söker efter text i en XML-sträng eller ett 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>]

Description

Med Select-Xml cmdleten kan du använda XPath-frågor för att söka efter text i XML-strängar och dokument. Ange en XPath-fråga och använd parametern Innehåll, Sökväg eller XML för att ange den XML som ska sökas igenom.

Exempel

Exempel 1: Välj AliasProperty-noder

Det här exemplet hämtar aliasegenskaperna Types.ps1xmli . Information om den här filen finns i about_Types.ps1xml.

Det första kommandot sparar sökvägen till Types.ps1xml filen i variabeln $Path .

Det andra kommandot sparar XML-sökvägen till noden AliasProperty i variabeln $XPath .

Cmdleten Select-Xml hämtar de AliasProperty-noder som identifieras av XPath-instruktionen Types.ps1xml från filen. Kommandot använder en pipelineoperator (|) för att skicka AliasProperty-noderna till cmdleten Select-Object . Parametern ExpandProperty expanderar Node-objektet och returnerar egenskaperna Name och ReferencedMemberName .

$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

Resultatet visar Namn och ReferencedMemberName för varje aliasegenskap i Types.ps1xml filen. Det finns till exempel en count-egenskap som är ett alias för egenskapen Längd .

Exempel 2: Ange ett XML-dokument

Det här exemplet visar hur du använder XML-parametern för att tillhandahålla ett XML-dokument till cmdleten Select-Xml .

Cmdleten Get-Content hämtar innehållet i Types.ps1xml filen och sparar den i variabeln $Types . Variabeln [xml] omvandlas till ett XML-objekt.

Cmdleten Select-Xmlhämtar MethodName-noderna i Types.ps1xml filen. Kommandot använder XML-parametern för att ange XML-innehållet i variabeln $Types och XPath-parametern för att ange sökvägen till noden MethodName .

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

Exempel 3: Sök i PowerShell-hjälpfiler

Det här exemplet visar hur du använder cmdleten Select-Xml för att söka i powershell XML-baserade cmdlet-hjälpfiler. I det här exemplet söker vi efter cmdlet-namnet som fungerar som en rubrik för varje hjälpfil och sökvägen till hjälpfilen.

Variabeln $Namespace innehåller en hash-tabell som representerar DET XML-namnområde som används för hjälpfilerna.

Variabeln $Path innehåller sökvägen till PowerShell-hjälpfilerna. Om det inte finns några hjälpfiler i den här sökvägen på datorn använder du cmdleten Update-Help för att ladda ned hjälpfilerna. Mer information om uppdateringsbar hjälp finns i about_Updatable_Help.

Cmdleten Select-Xml söker i XML-filerna efter cmdlet-namn genom att söka efter Command:Name element var som helst i filerna. Resultaten lagras i variabeln $Xml . Select-Xml returnerar ett SelectXmlInfo-objekt som har en Node-egenskap , som är ett System.Xml.XmlElement-objekt . Egenskapen Node har en InnerXML-egenskap som innehåller den faktiska XML som hämtas.

Variabeln $Xml skickas till cmdleten Format-Table . Kommandot Format-Table använder en beräknad egenskap för att hämta egenskapen Node.InnerXML för varje objekt i variabeln $Xml , trimma det tomma utrymmet före och efter texten och visa det i tabellen, tillsammans med sökvägen till källfilen.

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

Exempel 4: Olika sätt att mata in XML

Det här exemplet visar två olika sätt att skicka XML till cmdleten Select-Xml .

Det första kommandot sparar en here-string som innehåller XML i variabeln $Xml . Mer information om här-strängar finns i about_Quoting_Rules.

Select-Xml använder parametern Innehåll för att ange XML i variabeln $Xml .

Det tredje kommandot är samma som det andra, förutom att tt använder en pipelineoperator (|) för att skicka XML i variabeln $Xml till cmdleten Select-Xml .

$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

Exempel 5: Använd xmlns-standardnamnområdet

Det här exemplet visar hur du använder cmdleten Select-Xml med XML-dokument som använder xmlns-standardnamnområdet. I exemplet hämtas rubrikerna för Windows PowerShell ISE-användarskapade kodfragmentfiler. Information om kodfragment finns i New-IseSnippet.

Variabeln $SnippetNamespace innehåller en hash-tabell för standardnamnområdet som kodfragment-XML-filer använder. Värdet för hashtabellen är XMLNS-schema-URI:n i kodfragmentets XML. Hash-tabellnyckelnamnet, kodfragmentet, är godtyckligt. Du kan använda valfritt namn som inte är reserverat, men du kan inte använda xmlns.

Cmdleten Select-Xml hämtar innehållet i elementet Rubrik i varje kodfragment. Den använder parametern Sökväg för att ange katalogen Kodfragment och parametern Namnområde för att ange namnområdet i variabeln $SnippetNamespace . Värdet för XPath-parametern är snip:Title. Resultatet skickas till cmdleten ForEach-Object , som hämtar rubriken från värdet för egenskapen InnerXml för noden.

$SnippetNamespace = @{snip = "http://schemas.microsoft.com/PowerShell/Snippets"}

Select-Xml -Path $HOME\Documents\WindowsPowerShell\Snippets -Namespace $SnippetNamespace -XPath "//snip:Title" |
    ForEach-Object {$_.Node.Innerxml}

Parametrar

-Content

Anger en sträng som innehåller DEN XML som ska sökas efter. Du kan också skicka rörsträngar till Select-Xml.

Type:String[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-LiteralPath

Anger sökvägarna och filnamnen för XML-filerna som ska sökas. Till skillnad från Path används värdet för parametern LiteralPath precis som det skrivs. Inga tecken tolkas som jokertecken. Om sökvägen innehåller escape-tecken omger du den med enkla citattecken. Enkla citattecken gör att PowerShell inte tolkar några tecken som escape-sekvenser.

Type:String[]
Aliases:PSPath, LP
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Namespace

Anger en hash-tabell med de namnområden som används i XML-koden. Använd formatet@{<namespaceName> = <namespaceValue>}.

När XML använder standardnamnområdet, som börjar med xmlns, använder du en godtycklig nyckel för namnområdesnamnet. Du kan inte använda xmlns. I XPath-instruktionen prefixar du varje nodnamn med namnområdesnamnet och ett kolon, till exempel //namespaceName:Node.

Type:Hashtable
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

Anger sökvägen och filnamnen för XML-filerna som ska sökas. Jokertecken tillåts.

Type:String[]
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-Xml

Anger en eller flera XML-noder.

Ett XML-dokument bearbetas som en samling XML-noder. Om du skickar ett XML-dokument till Select-Xmlgenomsöks varje dokumentnod separat när det kommer via pipelinen.

Type:XmlNode[]
Aliases:Node
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-XPath

Anger en XPath-sökfråga. Frågespråket är skiftlägeskänsligt. Den här parametern krävs.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

Indata

System.String or System.Xml.XmlNode

Du kan skicka en sökväg eller XML-nod till den här cmdleten.

Utdata

SelectXmlInfo

Kommentarer

XPath är ett standardspråk som är utformat för att identifiera delar av ett XML-dokument. Mer information om XPath-språket finns i XPath-referens och avsnittet Urvalsfilter i Händelseval.