Delen via


Select-Xml

Hiermee zoekt u tekst in een XML-tekenreeks of -document.

Syntaxis

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

Met de Select-Xml cmdlet kunt u XPath-query's gebruiken om te zoeken naar tekst in XML-tekenreeksen en -documenten. Voer een XPath-query in en gebruik de parameter Inhoud, Pad of Xml om de XML op te geven die moet worden doorzocht.

Voorbeelden

Voorbeeld 1: AliasProperty-knooppunten selecteren

In dit voorbeeld worden de aliaseigenschappen in de Types.ps1xml. Zie about_Types.ps1xml voor meer informatie over dit bestand.

Met de eerste opdracht wordt het pad naar het Types.ps1xml bestand in de $Path variabele opgeslagen.

Met de tweede opdracht wordt het XML-pad opgeslagen naar het knooppunt AliasProperty in de $XPath variabele.

De Select-Xml cmdlet haalt de AliasProperty-knooppunten op die worden geïdentificeerd door de XPath-instructie uit het Types.ps1xml bestand. De opdracht maakt gebruik van een pijplijnoperator (|) om de AliasProperty-knooppunten naar de Select-Object cmdlet te verzenden. De parameter ExpandProperty breidt het knooppuntobject uit en retourneert de eigenschappen Name en 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

Het resultaat toont de naam en referencedMemberName van elke aliaseigenschap in het Types.ps1xml bestand. Er is bijvoorbeeld een eigenschap Count die een alias is van de eigenschap Length .

Voorbeeld 2: Een XML-document invoeren

In dit voorbeeld ziet u hoe u de XML-parameter gebruikt om een XML-document aan de Select-Xml cmdlet op te geven.

De Get-Content cmdlet haalt de inhoud van het Types.ps1xml bestand op en slaat het op in de $Types variabele. De [xml] variabele wordt geconverteerd als een XML-object.

De Select-Xml cmdlet haalt de MethodName-knooppunten op in het Types.ps1xml bestand. De opdracht gebruikt de XML-parameter om de XML-inhoud in de $Types variabele en de XPath-parameter op te geven om het pad naar het MethodName-knooppunt op te geven.

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

Voorbeeld 3: PowerShell Help-bestanden zoeken

In dit voorbeeld ziet u hoe u de Select-Xml cmdlet gebruikt om de Help-bestanden van de PowerShell XML-cmdlet te doorzoeken. In dit voorbeeld zoeken we naar de naam van de cmdlet die fungeert als een titel voor elk Help-bestand en het pad naar het Help-bestand.

De $Namespace variabele bevat een hashtabel die de XML-naamruimte vertegenwoordigt die wordt gebruikt voor de Help-bestanden.

De $Path variabele bevat het pad naar de Help-bestanden van PowerShell. Als er geen Help-bestanden in dit pad op uw computer staan, gebruikt u de Update-Help cmdlet om de Help-bestanden te downloaden. Zie about_Updatable_Help voor meer informatie over Help bijwerken.

De Select-Xml cmdlet doorzoekt de XML-bestanden naar cmdlet-namen door het element overal in de bestanden te vinden Command:Name . De resultaten worden opgeslagen in de $Xml variabele. Select-Xml retourneert een SelectXmlInfo-object met een knooppunteigenschap , een System.Xml.XmlElement-object . De eigenschap Node heeft een InnerXML-eigenschap die de werkelijke XML bevat die wordt opgehaald.

De $Xml variabele wordt doorgesluisd naar de Format-Table cmdlet. De Format-Table opdracht maakt gebruik van een berekende eigenschap om de eigenschap Node.InnerXML van elk object in de $Xml variabele op te halen, de witruimte voor en na de tekst te knippen en weer te geven in de tabel, samen met het pad naar het bronbestand.

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

Voorbeeld 4: Verschillende manieren om XML in te voeren

In dit voorbeeld ziet u twee verschillende manieren om XML naar de Select-Xml cmdlet te verzenden.

Met de eerste opdracht wordt een hier-tekenreeks opgeslagen die XML in de $Xml variabele bevat. Zie about_Quoting_Rules voor meer informatie over deze tekenreeksen.

Select-Xml gebruikt de parameter Inhoud om de XML in de $Xml variabele op te geven.

De derde opdracht is hetzelfde als de tweede, behalve dat tt een pijplijnoperator (|) gebruikt om de XML in de $Xml variabele naar de Select-Xml cmdlet te verzenden.

$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

Voorbeeld 5: De standaard-XMLNS-naamruimte gebruiken

In dit voorbeeld ziet u hoe u de Select-Xml cmdlet gebruikt met XML-documenten die gebruikmaken van de standaard-XMLNS-naamruimte. In het voorbeeld worden de titels van door de gebruiker gemaakte codefragmentbestanden van Windows PowerShell ISE opgeslagen. Zie New-IseSnippet voor meer informatie over fragmenten.

De $SnippetNamespace variabele bevat een hash-tabel voor de standaardnaamruimte die XML-bestanden gebruiken. De hashtabelwaarde is de XMLNS-schema-URI in het XML-fragment-XML. De naam van de hash-tabelsleutel, knipsel, is willekeurig. U kunt elke naam gebruiken die niet is gereserveerd, maar u kunt geen XMLN's gebruiken.

De Select-Xml cmdlet haalt de inhoud van het element Titel van elk fragment op. Hierbij wordt de padparameter gebruikt om de map Fragmenten en de parameter Naamruimte op te geven om de naamruimte in de $SnippetNamespace variabele op te geven. De waarde van de XPath-parameter is de snip:Title. De resultaten worden doorgesluisd naar de ForEach-Object cmdlet, waarmee de titel wordt opgehaald uit de waarde van de eigenschap InnerXml van het knooppunt.

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

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

Parameters

-Content

Hiermee geeft u een tekenreeks op die de XML bevat om te zoeken. U kunt ook sluistekenreeksen naar Select-Xml.

Type:String[]
Position:Named
Default value:None
Vereist:True
Pijplijninvoer accepteren:True
Jokertekens accepteren:False

-LiteralPath

Hiermee geeft u de paden en bestandsnamen van de XML-bestanden te zoeken. In tegenstelling tot Path wordt de waarde van de parameter LiteralPath precies gebruikt zoals deze is getypt. Er worden geen tekens geïnterpreteerd als jokertekens. Als het pad escapetekens bevat, plaatst u het tussen enkele aanhalingstekens. Enkele aanhalingstekens geven PowerShell aan dat er geen tekens als escapereeksen moeten worden geïnterpreteerd.

Type:String[]
Aliassen:PSPath, LP
Position:Named
Default value:None
Vereist:True
Pijplijninvoer accepteren:True
Jokertekens accepteren:False

-Namespace

Hiermee geeft u een hash-tabel op van de naamruimten die worden gebruikt in de XML. Gebruik de indeling@{<namespaceName> = <namespaceValue>}.

Wanneer de XML gebruikmaakt van de standaardnaamruimte, die begint met XMLN's, gebruikt u een willekeurige sleutel voor de naamruimtenaam. U kunt geen XMLN's gebruiken. Geef in de XPath-instructie het voorvoegsel van elke knooppuntnaam met de naamruimtenaam en een dubbele punt, zoals //namespaceName:Node.

Type:Hashtable
Position:Named
Default value:None
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-Path

Hiermee geeft u het pad en de bestandsnamen van de XML-bestanden te zoeken. Jokertekens zijn toegestaan.

Type:String[]
Position:1
Default value:None
Vereist:True
Pijplijninvoer accepteren:True
Jokertekens accepteren:True

-Xml

Hiermee geeft u een of meer XML-knooppunten op.

Een XML-document wordt verwerkt als een verzameling XML-knooppunten. Als u een XML-document doorsluist naar Select-Xml, wordt elk documentknooppunt afzonderlijk doorzocht terwijl het via de pijplijn komt.

Type:XmlNode[]
Aliassen:Node
Position:1
Default value:None
Vereist:True
Pijplijninvoer accepteren:True
Jokertekens accepteren:False

-XPath

Hiermee geeft u een XPath-zoekquery op. De querytaal is hoofdlettergevoelig. Deze parameter is vereist.

Type:String
Position:0
Default value:None
Vereist:True
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

Invoerwaarden

System.String or System.Xml.XmlNode

U kunt een pad of XML-knooppunt doorsluisen naar deze cmdlet.

Uitvoerwaarden

SelectXmlInfo

Notities

XPath is een standaardtaal die is ontworpen om delen van een XML-document te identificeren. Zie XPath-verwijzing en de sectie Selectiefilters van Gebeurtenisselectie voor meer informatie over de XPath-taal.