Select-Xml
Trova il testo in una stringa o in un documento XML.
Sintassi
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>]
Descrizione
Il Select-Xml
cmdlet consente di usare query XPath per cercare testo in stringhe e documenti XML.
Immettere una query XPath e usare il parametro Content, Path o Xml per specificare il codice XML da cercare.
Esempio
Esempio 1: Selezionare nodi AliasProperty
In questo esempio vengono recuperate le proprietà dell'alias nell'oggetto Types.ps1xml
. Per informazioni su questo file, vedere about_Types.ps1xml.
Il primo comando salva il percorso del Types.ps1xml
file nella $Path
variabile.
Il secondo comando salva il percorso XML nel nodo AliasProperty nella $XPath
variabile.
Il Select-Xml
cmdlet ottiene i nodi AliasProperty identificati dall'istruzione XPath dal Types.ps1xml
file. Il comando usa un operatore della pipeline (|
) per inviare i nodi AliasProperty al Select-Object
cmdlet. Il parametro ExpandProperty espande l'oggetto Node e restituisce le proprietà Name e 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
Il risultato mostra il nome e referencedMemberName di ogni proprietà alias nel Types.ps1xml
file. Ad esempio, esiste una proprietà Count che è un alias della proprietà Length .
Esempio 2: Immettere un documento XML
In questo esempio viene illustrato come usare il parametro XML per fornire un documento XML al Select-Xml
cmdlet.
Il Get-Content
cmdlet ottiene il contenuto del Types.ps1xml
file e lo salva nella $Types
variabile. Esegue [xml]
il cast della variabile come oggetto XML.
Il Select-Xml
cmdlet ottiene i nodi MethodName nel Types.ps1xml
file. Il comando usa il parametro Xml per specificare il contenuto XML nella $Types
variabile e il parametro XPath per specificare il percorso del nodo MethodName .
[xml]$Types = Get-Content $Pshome\Types.ps1xml
Select-Xml -Xml $Types -XPath "//MethodName"
Esempio 3: Search file della Guida di PowerShell
In questo esempio viene illustrato come usare il cmdlet per cercare i Select-Xml
file della Guida dei cmdlet basati su XML di PowerShell. In questo esempio viene cercato il nome del cmdlet che funge da titolo per ogni file della Guida e il percorso del file della Guida.
La $Namespace
variabile contiene una tabella hash che rappresenta lo spazio dei nomi XML usato per i file della Guida.
La $Path
variabile contiene il percorso dei file della Guida di PowerShell. Se nel computer non sono presenti file della Guida, usare il Update-Help
cmdlet per scaricare i file della Guida. Per altre informazioni sulla Guida aggiornabile, vedere about_Updatable_Help.
Il Select-Xml
cmdlet cerca i file XML per i nomi dei cmdlet trovando Command:Name
l'elemento ovunque nei file. I risultati vengono archiviati nella $Xml
variabile. Select-Xml
restituisce un oggetto SelectXmlInfo con una proprietà Node , ovvero un System.Xml. Oggetto XmlElement .
La proprietà Node ha una proprietà InnerXML contenente il codice XML effettivo recuperato.
La $Xml
variabile viene inviata tramite pipe al Format-Table
cmdlet. Il Format-Table
comando usa una proprietà calcolata per ottenere la proprietà Node.InnerXML di ogni oggetto nella $Xml
variabile, tagliare lo spazio vuoto prima e dopo il testo e visualizzarlo nella tabella, insieme al percorso del file di origine.
$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
...
Esempio 4: modi diversi per l'input XML
In questo esempio vengono illustrati due modi diversi per inviare XML al Select-Xml
cmdlet.
Il primo comando salva una stringa qui contenente XML nella $Xml
variabile. Per altre informazioni sulle stringhe qui, vedere about_Quoting_Rules.
Select-Xml
usa il parametro Content per specificare il codice XML nella $Xml
variabile.
Il terzo comando è lo stesso del secondo, ad eccezione del fatto che tt usa un operatore pipeline (|
) per inviare il codice XML nella $Xml
variabile al Select-Xml
cmdlet.
$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
Esempio 5: Usare lo spazio dei nomi xmlns predefinito
In questo esempio viene illustrato come usare il Select-Xml
cmdlet con documenti XML che usano lo spazio dei nomi xmlns predefinito. L'esempio ottiene i titoli dei file dei frammenti di codice creati dall'utente di Windows PowerShell ISE. Per informazioni sui frammenti, vedere New-IseSnippet.
La $SnippetNamespace
variabile contiene una tabella hash per lo spazio dei nomi predefinito usato dai file XML del frammento di codice. Il valore della tabella hash è l'URI dello schema XMLNS nell'XML del frammento di codice. Il nome della chiave della tabella hash, snip, è arbitrario. È possibile usare qualsiasi nome non riservato, ma non è possibile usare xmlns.
Il Select-Xml
cmdlet ottiene il contenuto dell'elemento Title di ogni frammento. Usa il parametro Path per specificare la directory Frammenti di codice e il parametro Spazio dei nomi per specificare lo spazio dei nomi nella $SnippetNamespace
variabile. Il valore del parametro XPath è .snip:Title
I risultati vengono inviati tramite pipe al ForEach-Object
cmdlet, che ottiene il titolo dal valore della proprietà InnerXml del nodo.
$SnippetNamespace = @{snip = "http://schemas.microsoft.com/PowerShell/Snippets"}
Select-Xml -Path $HOME\Documents\WindowsPowerShell\Snippets -Namespace $SnippetNamespace -XPath "//snip:Title" |
ForEach-Object {$_.Node.Innerxml}
Parametri
-Content
Specifica una stringa che contiene il file XML da cercare. È anche possibile inviare stringhe di pipe a Select-Xml
.
Type: | String[] |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-LiteralPath
Specifica i percorsi e i nomi file dei file XML da cercare. A differenza di Path, il valore del parametro LiteralPath viene usato esattamente com'è digitato. Nessun carattere viene interpretato come carattere jolly. Se il percorso include caratteri di escape, racchiuderlo tra virgolette singole. Le virgolette singole indicano a PowerShell di non interpretare i caratteri come sequenze di escape.
Type: | String[] |
Aliases: | PSPath, LP |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Namespace
Specifica una tabella hash degli spazi dei nomi usati nel file XML. Usare il formato@{<namespaceName> = <namespaceValue>}
.
Quando il codice XML usa lo spazio dei nomi predefinito, che inizia con xmlns, usa una chiave arbitraria per il nome dello spazio dei nomi. Non è possibile usare xmlns. Nell'istruzione XPath prefisso ogni nome del nodo con il nome dello spazio dei nomi e i due punti, ad esempio //namespaceName:Node
.
Type: | Hashtable |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Path
Specifica il percorso e i nomi file dei file XML da cercare. I caratteri jolly sono consentiti.
Type: | String[] |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | True |
-Xml
Specifica uno o più nodi XML.
Un documento XML verrà elaborato come una raccolta di nodi XML. Se si esegue la pipe di un documento XML in Select-Xml
, ogni nodo documento verrà eseguito separatamente durante la distribuzione della pipeline.
Type: | XmlNode[] |
Aliases: | Node |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-XPath
Specifica una query di ricerca XPath. Il linguaggio della query distingue tra maiuscole e minuscole. Questo parametro è obbligatorio.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Input
System.String or System.Xml.XmlNode
È possibile inviare un percorso o un nodo XML a questo cmdlet.
Output
Note
XPath è un linguaggio standard progettato per identificare le parti di un documento XML. Per altre informazioni sul linguaggio XPath, vedere Informazioni di riferimento su XPath e la sezione Filtri di selezione di Selezione eventi.