Select-Object
Selecciona objetos o propiedades de objeto.
Sintaxis
DefaultParameter (valor predeterminado)
Select-Object
[[-Property] <Object[]>]
[-InputObject <PSObject>]
[-ExcludeProperty <String[]>]
[-ExpandProperty <String>]
[-Unique]
[-Last <Int32>]
[-First <Int32>]
[-Skip <Int32>]
[-Wait]
[<CommonParameters>]
SkipLastParameter
Select-Object
[[-Property] <Object[]>]
[-InputObject <PSObject>]
[-ExcludeProperty <String[]>]
[-ExpandProperty <String>]
[-Unique]
[-SkipLast <Int32>]
[<CommonParameters>]
IndexParameter
Select-Object
[-InputObject <PSObject>]
[-Unique]
[-Wait]
[-Index <Int32[]>]
[<CommonParameters>]
Description
El cmdlet Select-Object selecciona las propiedades especificadas de un objeto o conjunto de objetos.
También puede seleccionar objetos únicos, un número especificado de objetos o objetos en una posición especificada en una matriz.
Para seleccionar objetos de una colección, use los parámetros First, Last, Unique, Skipy Index. Para seleccionar las propiedades del objeto, use el parámetro Select-Object devuelve nuevos objetos que solo tienen las propiedades especificadas.
A partir de Windows PowerShell 3.0, Select-Object incluye una característica de optimización que impide que los comandos creen y procesen objetos que no se usan.
Cuando se incluye un comando Select-Object con el First o parámetros index en una canalización de comandos, PowerShell detiene el comando que genera los objetos en cuanto se genera el número seleccionado de objetos, incluso cuando el comando que genera los objetos aparece antes del comando Select-Object de la canalización.
Para desactivar este comportamiento de optimización, use el parámetro wait
Ejemplos
Ejemplo 1: Selección de objetos por propiedad
Este comando crea objetos que tienen las propiedades Name, IDy working set (WS) de los objetos de proceso.
Get-Process | Select-Object -Property ProcessName, Id, WS
Ejemplo 2: Seleccionar objetos por propiedad y dar formato a los resultados
Este comando obtiene información sobre los módulos utilizados por los procesos del equipo.
Usa Get-Process cmdlet para obtener el proceso en el equipo.
Usa el cmdlet
El comando usa el parámetro Property ProcessNameNoteProperty a cada instancia de [System.Diagnostics.ProcessModule] y lo rellena con el valor de los procesos actuales propiedad ProcessName.
El comando usa el cmdlet Format-List para mostrar el nombre y los módulos de cada proceso de una lista.
Get-Process Explorer | Select-Object -Property ProcessName -ExpandProperty Modules | Format-List
ProcessName : explorer
ModuleName : explorer.exe
FileName : C:\WINDOWS\explorer.exe
BaseAddress : 140697278152704
ModuleMemorySize : 3919872
EntryPointAddress : 140697278841168
FileVersionInfo : File: C:\WINDOWS\explorer.exe
InternalName: explorer
OriginalFilename: EXPLORER.EXE.MUI
FileVersion: 10.0.17134.1 (WinBuild.160101.0800)
FileDescription: Windows Explorer
Product: Microsoft Windows Operating System
ProductVersion: 10.0.17134.1
...
Ejemplo 3: Selección de procesos con la mayor cantidad de memoria
Este comando obtiene los cinco procesos que usan más memoria.
El cmdlet Get-Process obtiene los procesos del equipo.
El cmdlet Sort-Object ordena los procesos según el uso de memoria (conjunto de trabajo) y el cmdlet Select-Object selecciona solo los cinco últimos miembros de la matriz resultante de objetos.
El parámetro wait Select-Object solo está disponible para los comandos que devuelven objetos individualmente a medida que se procesan.
Get-Process | Sort-Object -Property WS | Select-Object -Last 5
Handles NPM(K) PM(K) WS(K) VS(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
2866 320 33432 45764 203 222.41 1292 svchost
577 17 23676 50516 265 50.58 4388 WINWORD
826 11 75448 76712 188 19.77 3780 Ps
1367 14 73152 88736 216 61.69 676 Ps
1612 44 66080 92780 380 900.59 6132 INFOPATH
Ejemplo 4: Selección de caracteres únicos de una matriz
Este comando usa el parámetro Unique de Select-Object para obtener caracteres únicos de una matriz de caracteres.
"a","b","c","a","a","a" | Select-Object -Unique
a
b
c
Ejemplo 5: Selección de eventos más recientes y más antiguos en el registro de eventos
Estos comandos obtienen los primeros eventos (más recientes) y los últimos (más antiguos) del registro de eventos de Windows PowerShell.
El comando usa el cmdlet Get-EventLog para obtener todos los eventos en el registro de Windows PowerShell.
Los guarda en la variable $a.
El segundo comando usa un operador de canalización (|) para enviar los eventos de $a al cmdlet Select-Object.
El comando $a menos 1.
$a = Get-EventLog -LogName "Windows PowerShell"
$a | Select-Object -Index 0, ($A.count - 1)
Ejemplo 6: Seleccionar todo, pero el primer objeto
Este comando crea una nueva PSSession en cada uno de los equipos enumerados en los archivos Servers.txt, excepto el primero.
Este comando usa el cmdlet Select-Object para seleccionar todo, pero el primer equipo de una lista de nombres de equipo.
La lista resultante de equipos se establece como el valor del parámetro ComputerName de del cmdlet New-PSSession.
New-PSSession -ComputerName (Get-Content Servers.txt | Select-Object -Skip 1)
Ejemplo 7: Cambiar el nombre de los archivos y seleccionar varios para revisar
Este comando agrega un sufijo "-ro" a los nombres base de archivos de texto que tienen el atributo de solo lectura y, a continuación, muestra los cinco primeros archivos para que el usuario pueda ver un ejemplo del efecto.
El comando usa el readOnly parámetro dinámico del cmdlet Get-ChildItem for FileSystem para obtener archivos de solo lectura.
Usa un operador de canalización (|) para enviar los archivos al cmdlet Rename-Item, que cambia el nombre del archivo.
Usa el parámetro Passthru de Rename-Item para enviar los archivos cambiados al cmdlet Select-Object, que selecciona los primeros 5 para mostrar.
El parámetro wait de
Get-ChildItem *.txt -ReadOnly | Rename-Item -NewName {$_.BaseName + "-ro.txt"} -PassThru | Select-Object -First 5 -Wait
Ejemplo 8: Mostrar las complejidades del parámetro -ExpandProperty
En este ejemplo se muestran las complejidades del parámetro ExpandProperty.
Tenga en cuenta que la salida generada era una matriz de instancias de [System.Int32]. Las instancias se ajustan a las reglas de formato estándar de la vista de salida de .
Esto es cierto para las propiedades de expandidas de
# Create a custom object to use for the Select-Object example.
$object = [pscustomobject]@{Name="CustomObject";Expand=@(1,2,3,4,5)}
# Use the ExpandProperty parameter to Expand the property.
$object | Select-Object -ExpandProperty Expand -Property Name
1
2
3
4
5
# The output did not contain the Name property, but it was added successfully.
# Use Get-Member to confirm the Name property was added and populated.
$object | Select-Object -ExpandProperty Expand -Property Name | Get-Member
TypeName: System.Int32
Name MemberType Definition
---- ---------- ----------
CompareTo Method int CompareTo(System.Object value), int CompareTo(int value), int IComparable.CompareTo(System.Object obj)...
Equals Method bool Equals(System.Object obj), bool Equals(int obj), bool IEquatable[int].Equals(int other)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
GetTypeCode Method System.TypeCode GetTypeCode(), System.TypeCode IConvertible.GetTypeCode()
ToBoolean Method bool IConvertible.ToBoolean(System.IFormatProvider provider)
ToByte Method byte IConvertible.ToByte(System.IFormatProvider provider)
ToChar Method char IConvertible.ToChar(System.IFormatProvider provider)
ToDateTime Method datetime IConvertible.ToDateTime(System.IFormatProvider provider)
ToDecimal Method decimal IConvertible.ToDecimal(System.IFormatProvider provider)
ToDouble Method double IConvertible.ToDouble(System.IFormatProvider provider)
ToInt16 Method int16 IConvertible.ToInt16(System.IFormatProvider provider)
ToInt32 Method int IConvertible.ToInt32(System.IFormatProvider provider)
ToInt64 Method long IConvertible.ToInt64(System.IFormatProvider provider)
ToSByte Method sbyte IConvertible.ToSByte(System.IFormatProvider provider)
ToSingle Method float IConvertible.ToSingle(System.IFormatProvider provider)
ToString Method string ToString(), string ToString(string format), string ToString(System.IFormatProvider provider)...
ToType Method System.Object IConvertible.ToType(type conversionType, System.IFormatProvider provider)
ToUInt16 Method uint16 IConvertible.ToUInt16(System.IFormatProvider provider)
ToUInt32 Method uint32 IConvertible.ToUInt32(System.IFormatProvider provider)
ToUInt64 Method uint64 IConvertible.ToUInt64(System.IFormatProvider provider)
Name NoteProperty string Name=CustomObject
Ejemplo 9: Crear propiedades personalizadas en objetos
En el ejemplo siguiente se muestra el uso de Select-Object para agregar una propiedad personalizada a cualquier objeto.
Al especificar un nombre de propiedad que no existe, Select-Object crea esa propiedad como NoteProperty en cada objeto pasado.
$customObject = 1 | Select-Object -Property MyCustomProperty
$customObject.MyCustomProperty = "New Custom Property"
$customObject
MyCustomProperty
----------------
New Custom Property
Ejemplo 10: Crear propiedades calculadas para cada InputObject
En este ejemplo se muestra el uso de Select-Object para agregar propiedades calculadas a la entrada.
Pasar un scriptBlock de
De forma predeterminada, Select-Object usará la cadena ScriptBlock como nombre de la propiedad.
Con unhashtable de Select-Object.
# Create a calculated property called $_.StartTime.DayOfWeek
Get-Process | Select-Object -Property ProcessName,{$_.StartTime.DayOfWeek}
ProcessName $_.StartTime.DayOfWeek
---- ----------------------
alg Wednesday
ati2evxx Wednesday
ati2evxx Thursday
...
# Add a custom property to calculate the size in KiloBytes of each FileInfo object you pass in.
# Use the pipeline variable to divide each file's length by 1 KiloBytes
$size = @{label="Size(KB)";expression={$_.length/1KB}}
# Create an additional calculated property with the number of Days since the file was last accessed.
# You can also shorten the key names to be 'l', and 'e', or use Name instead of Label.
$days = @{l="Days";e={((Get-Date) - $_.LastAccessTime).Days}}
# You can also shorten the name of your label key to 'l' and your expression key to 'e'.
Get-ChildItem $PSHOME -File | Select-Object Name, $size, $days
Name Size(KB) Days
---- -------- ----
Certificate.format.ps1xml 12.5244140625 223
Diagnostics.Format.ps1xml 4.955078125 223
DotNetTypes.format.ps1xml 134.9833984375 223
Parámetros
-ExcludeProperty
Especifica las propiedades que este cmdlet excluye de la operación.
Se permiten los caracteres comodín.
Este parámetro solo es efectivo cuando el comando también incluye el parámetro property
Propiedades de parámetro
| Tipo: | String[] |
| Valor predeterminado: | None |
| Admite caracteres comodín: | True |
| DontShow: | False |
Conjuntos de parámetros
DefaultParameter
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
SkipLastParameter
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-ExpandProperty
Especifica una propiedad que se va a seleccionar e indica que se debe intentar expandir esa propiedad.
- Si la propiedad especificada es una matriz, cada valor de la matriz se incluye en la salida.
- Si la propiedad especificada es un objeto, las propiedades de los objetos se expanden para cada InputObject
En cualquier caso, el type
Si se especifica el parámetro Property
Advertencia
Si recibe el error: Seleccione : No se puede procesar la propiedad porque la propiedad <PropertyName> ya existe, tenga en cuenta lo siguiente.
Tenga en cuenta que al usar -ExpandProperty, Select-Object no puede reemplazar una propiedad existente.
Esto significa lo siguiente:
- Si el objeto expandido tiene una propiedad con el mismo nombre, se producirá un error.
- Si el objeto Selected tiene una propiedad con el mismo nombre que una propiedad expandida objetos, se producirá un error.
Propiedades de parámetro
| Tipo: | String |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
DefaultParameter
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
SkipLastParameter
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-First
Especifica el número de objetos que se van a seleccionar desde el principio de una matriz de objetos de entrada.
Propiedades de parámetro
| Tipo: | Int32 |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
DefaultParameter
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-Index
Selecciona objetos de una matriz en función de sus valores de índice. Escriba los índices en una lista separada por comas.
Los índices de una matriz comienzan por 0, donde 0 representa el primer valor y (n-1) representa el último valor.
Propiedades de parámetro
| Tipo: | Int32[] |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
IndexParameter
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-InputObject
Especifica los objetos que se van a enviar al cmdlet a través de la canalización.
Este parámetro permite canalizar objetos a Select-Object.
Al pasar objetos al parámetro InputObject, en lugar de usar la canalización, Select-Object trata el InputObject como un solo objeto, incluso si el valor es una colección. Se recomienda usar la canalización al pasar colecciones a Select-Object.
Propiedades de parámetro
| Tipo: | PSObject |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | True |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-Last
Especifica el número de objetos que se van a seleccionar desde el final de una matriz de objetos de entrada.
Propiedades de parámetro
| Tipo: | Int32 |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
DefaultParameter
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-Property
Especifica las propiedades que se van a seleccionar. Estas propiedades se agregan como NoteProperty miembros a los objetos de salida. Se permiten los caracteres comodín.
El valor del parámetro Property puede ser una nueva propiedad calculada. Para crear una propiedad calculada, use una tabla hash. Las claves válidas son:
- Nombre (o etiqueta):
<string> - Expresión
<string>o<script block>
Propiedades de parámetro
| Tipo: | Object[] |
| Valor predeterminado: | None |
| Admite caracteres comodín: | True |
| DontShow: | False |
Conjuntos de parámetros
DefaultParameter
| Posición: | 0 |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
SkipLastParameter
| Posición: | 0 |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-Skip
Omite (no selecciona) el número especificado de elementos.
De forma predeterminada, el parámetro Skip
A diferencia del parámetro Index
Propiedades de parámetro
| Tipo: | Int32 |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
DefaultParameter
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-SkipLast
Omite (no selecciona) el número especificado de elementos desde el final de la lista o matriz. Funciona de la misma manera que el uso de Skip junto con parámetro Last.
A diferencia del parámetro Index
Propiedades de parámetro
| Tipo: | Int32 |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
SkipLastParameter
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-Unique
Especifica que si un subconjunto de los objetos de entrada tiene propiedades y valores idénticos, solo se seleccionará un único miembro del subconjunto.
Este parámetro distingue mayúsculas de minúsculas. Como resultado, las cadenas que solo difieren en mayúsculas y minúsculas de caracteres se consideran únicas.
Propiedades de parámetro
| Tipo: | SwitchParameter |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-Wait
Indica que el cmdlet desactiva la optimización.
PowerShell ejecuta comandos en el orden en que aparecen en la canalización de comandos y les permite generar todos los objetos.
De forma predeterminada, si incluye un comando de Select-Object con el First o Index parámetros en una canalización de comandos, PowerShell detiene el comando que genera los objetos en cuanto se genera el número seleccionado de objetos.
Este parámetro se introdujo en Windows PowerShell 3.0.
Propiedades de parámetro
| Tipo: | SwitchParameter |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
DefaultParameter
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
IndexParameter
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
CommonParameters
Este cmdlet admite los parámetros comunes: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction y -WarningVariable. Para obtener más información, vea about_CommonParameters.
Entradas
PSObject
Puede canalizar cualquier objeto a Select-Object.
Salidas
PSObject
Notas
- También puede hacer referencia al cmdlet
Select-Objectpor su alias integrado,select. Para más información, vea about_Aliases. - La característica de optimización de
Select-Objectsolo está disponible para los comandos que escriben objetos en la canalización a medida que se procesan. No tiene ningún efecto en los comandos que almacena en búfer los objetos procesados y los escribe como una colección. Escribir objetos inmediatamente es un procedimiento recomendado de diseño de cmdlets. Para obtener más información, vea Escribir registros únicos en la canalización en Instrucciones de desarrollo fuertemente fomentadas en MSDN Library.