Select-Xml
Busca texto en un documento o una cadena XML.
Syntax
Select-Xml
[-Xml] <XmlNode[]>
[-XPath] <String>
[-Namespace <Hashtable>]
[<CommonParameters>]
Select-Xml
[-Path] <String[]>
[-XPath] <String>
[-Namespace <Hashtable>]
[<CommonParameters>]
Select-Xml
-LiteralPath <String[]>
[-XPath] <String>
[-Namespace <Hashtable>]
[<CommonParameters>]
Select-Xml
-Content <String[]>
[-XPath] <String>
[-Namespace <Hashtable>]
[<CommonParameters>]
Description
El cmdlet Select-Xml permite usar consultas XPath para buscar texto en cadenas y documentos XML. Escriba una consulta XPath y use el parámetro Content, Path o Xml para especificar el XML que se va a buscar.
Ejemplos
Ejemplo 1: Seleccionar nodos AliasProperty
PS C:\> $Path = "$Pshome\Types.ps1xml"
PS C:\> $XPath = "/Types/Type/Members/AliasProperty"
PS C:\> 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
Este ejemplo obtiene las propiedades de alias del archivo Types.ps1xml. (Para obtener información acerca de este archivo, consulte about_Types.ps1xml).
El primer comando guarda la ruta de acceso al archivo Types.ps1xml en la variable $Path.
El segundo comando guarda la ruta de acceso XML al nodo AliasProperty en la variable $XPath.
El tercer comando usa el cmdlet Select-Xml para obtener los nodos AliasProperty que se identifican mediante la instrucción XPath desde el archivo Types.ps1xml. El comando usa un operador de canalización para enviar los nodos AliasProperty al cmdlet Select-Object. El parámetro ExpandProperty expande el objeto Node y devuelve sus propiedades Name y ReferencedMemberName.
El resultado muestra los valores de Name y ReferencedMemberName de cada propiedad de alias en el archivo Types.ps1xml. Por ejemplo, hay una propiedad Count que es un alias de la propiedad Length .
Ejemplo 2: Entrada de un documento XML
PS C:\> [xml]$Types = Get-Content $Pshome\Types.ps1xml
PS C:\> Select-Xml -Xml $Types -XPath "//MethodName"
En este ejemplo se muestra cómo usar el parámetro XML para proporcionar un documento XML al cmdlet Select-Xml .
El primer comando usa el cmdlet Get-Content para obtener el contenido del archivo Types.ps1xml y guardarlo en la variable $Types. [xml] convierte la variable como un objeto XML.
El segundo comando usa el cmdlet Select-Xml para obtener los nodos MethodName del archivo Types.ps1xml. El comando utiliza el parámetro Xml para especificar el contenido XML de la variable $Types y el parámetro XPath para especificar la ruta de acceso al nodo MethodName.
Ejemplo 3: Búsqueda archivos de ayuda de PowerShell
PS C:\> $Namespace = @{command = "https://schemas.microsoft.com/maml/dev/command/2004/10"; maml = "https://schemas.microsoft.com/maml/2004/10"; dev = "https://schemas.microsoft.com/maml/dev/2004/10"}
The second command saves the path to the help files in the $Path variable.If there are no help files in this path on your computer, use the Update-Help cmdlet to download the help files. For more information about Updatable Help, see about_Updatable_Help (https://go.microsoft.com/fwlink/?LinkId=235801).
PS C:\> $Path = "$Pshome\en-us\*dll-Help.xml"
The third command uses the **Select-Xml** cmdlet to search the XML for cmdlet names by finding Command:Name element anywhere in the files. It saves the results in the $Xml variable.**Select-Xml** returns a **SelectXmlInfo** object that has a Node property, which is a **System.Xml.XmlElement** object. The Node property has an InnerXML property, which contains the actual XML that is retrieved.
PS C:\> $Xml = Select-Xml -Path $Path -Namespace $Namespace -XPath "//command:name"
The fourth command sends the XML in the $Xml variable to the Format-Table cmdlet. The **Format-Table** command uses a calculated property to get the Node.InnerXML property of each object in the $Xml variable, trim the white space before and after the text, and display it in the table, along with the path to the source file.
PS C:\> $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
...
En este ejemplo se muestra cómo usar el cmdlet Select-Xml para buscar en los archivos de ayuda del cmdlet basado en XML de PowerShell. En este ejemplo se mostrará cómo buscar el nombre del cmdlet que se utiliza como título para cada archivo de ayuda y la ruta de acceso al archivo de ayuda.
El primer comando crea una tabla hash que representa el espacio de nombres XML utilizado para los archivos de ayuda y la guarda en la variable $Namespace.
Ejemplo 4: Diferentes formas de introducir XML
PS C:\> $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>
"@
The second command uses the *Content* parameter of **Select-Xml** to specify the XML in the $Xml variable.
PS C:\> Select-Xml -Content $Xml -XPath "//edition" | foreach {$_.node.InnerXML}
En.Book1.com
Ge.Book1.Com
Fr.Book1.com
Pl.Book1.com
The third command is equivalent to the second. It uses a pipeline operator (|) to send the XML in the $Xml variable to the **Select-Xml** cmdlet.
PS C:\> $Xml | Select-Xml -XPath "//edition" | foreach {$_.node.InnerXML}
En.Book1.com
Ge.Book1.Com
Fr.Book1.com
Pl.Book1.com
En este ejemplo se muestran dos maneras diferentes de enviar XML al cmdlet Select-Xml .
El primer comando guarda una cadena here que contiene XML en la variable $Xml. (Para obtener más información sobre las cadenas de tipo "here-string", consulte about_Quoting_Rules).
Ejemplo 5: Usar el espacio de nombres xmlns predeterminado
PS C:\> $SnippetNamespace = @{snip = "https://schemas.microsoft.com/PowerShell/Snippets"}
The second command uses the **Select-Xml** cmdlet to get the content of the Title element of each snippet. It uses the *Path* parameter to specify the Snippets directory and the *Namespace* parameter to specify the namespace in the $SnippetNamespace variable. The value of the *XPath* parameter is the "snip" namespace key, a colon (:), and the name of the Title element.The command uses a pipeline operator (|) to send each **Node** property that **Select-Xml** returns to the ForEach-Object cmdlet, which gets the title in the value of the **InnerXml** property of the node.
PS C:\> Select-Xml -Path $Home\Documents\WindowsPowerShell\Snippets -Namespace $SnippetNamespace -XPath "//snip:Title" | foreach {$_.Node.Innerxml}
En este ejemplo se muestra cómo usar el cmdlet Select-Xml con documentos XML que usan el espacio de nombres xmlns predeterminado. En el ejemplo se obtienen los títulos de los archivos de fragmentos de código creados por el usuario de Windows PowerShell ISE. Para obtener información acerca de los fragmentos de código, consulte New-IseSnippet.
El primer comando crea una tabla hash para el espacio de nombres predeterminado que usan los archivos XML de fragmento de código y los asigna a la variable $SnippetNamespace. El valor de la tabla hash es el URI de esquema XMLNS del XML de fragmentos de código. El nombre de la clave de tabla hash, snip, es arbitrario. Puede usar cualquier nombre que no esté reservado, pero no puede usar xmlns.
Parámetros
-Content
Especifica una cadena que contiene el XML que se debe buscar. También puede canalizar cadenas a Select-Xml.
Type: | String[] |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-LiteralPath
Especifica las rutas de acceso y los nombres de los archivos XML en los que se debe realizar la búsqueda. A diferencia de Path, el valor del parámetro LiteralPath se utiliza exactamente como se escribe. Ninguno de los caracteres se interpreta como caracteres comodín. Si la ruta de acceso contiene caracteres de escape, escríbalos entre comillas simples. Las comillas simples indican a PowerShell que no interprete ningún carácter como secuencias de escape.
Type: | String[] |
Aliases: | PSPath |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Namespace
Especifica una tabla hash de los espacios de nombres utilizados en el XML. Use el formato @{<namespaceName> = <namespaceValue>}.
Cuando el XML usa el espacio de nombres predeterminado, que comienza con xmlns, use una clave arbitraria para el nombre del espacio de nombres. No se pueden usar xmlns. En la instrucción XPath, anteponga cada nombre de nodo con el nombre del espacio de nombres y dos puntos, como //namespaceName:Node.
Type: | Hashtable |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Path
Especifica la ruta de acceso y los nombres de los archivos XML en los que se va a realizar la búsqueda. Se permite el uso de caracteres comodín.
Type: | String[] |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | True |
-Xml
Especifica uno o varios nodos XML.
Un documento XML se procesará como una colección de nodos XML. Si canaliza un documento XML a Select-Xml, cada nodo de documento se buscará por separado a medida que pasa por la canalización.
Type: | XmlNode[] |
Aliases: | Node |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-XPath
Especifica una consulta de búsqueda XPath. El lenguaje de consulta distingue mayúsculas de minúsculas. Este parámetro es obligatorio.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Entradas
System.String or System.Xml.XmlNode
Puede canalizar una ruta de acceso o un nodo XML a este cmdlet.
Salidas
Notas
- XPath es un lenguaje estándar diseñado para identificar las partes de un documento XML. Para obtener más información sobre el lenguaje XPath, vea Referencia de XPath y la sección Filtros de selección de la selección de eventos en MSDN Library.