Select-Object
Selecciona objetos o propiedades de objeto.
Syntax
Select-Object
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-ExcludeProperty <String[]>]
[-ExpandProperty <String>]
[-Unique]
[-Last <Int32>]
[-First <Int32>]
[-Skip <Int32>]
[-Wait]
[<CommonParameters>]
Select-Object
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-ExcludeProperty <String[]>]
[-ExpandProperty <String>]
[-Unique]
[-SkipLast <Int32>]
[<CommonParameters>]
Select-Object
[-InputObject <PSObject>]
[-Unique]
[-Wait]
[-Index <Int32[]>]
[<CommonParameters>]
Select-Object
[-InputObject <PSObject>]
[-Unique]
[-SkipIndex <Int32[]>]
[<CommonParameters>]
Description
El Select-Object
cmdlet selecciona las propiedades especificadas de un objeto o un conjunto de objetos. También puede seleccionar objetos únicos, un número especificado de objetos u objetos en una posición determinada en una matriz.
Para seleccionar objetos de una colección, use los parámetros First, Last, Unique, Skip e Index. Para seleccionar propiedades de objeto, use el parámetro Property. Al seleccionar propiedades, 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 Select-Object
comando con los parámetros First o Index en una canalización de comandos, PowerShell detiene el comando que genera los objetos tan pronto como se genera el número seleccionado de objetos, incluso cuando el comando que genera los objetos aparece antes del Select-Object
comando en la canalización. Para desactivar este comportamiento de optimización, use el parámetro Wait.
Ejemplos
Ejemplo 1: Seleccionar objetos por propiedad
En este ejemplo se crean objetos que tienen las propiedades Name, ID y 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
En este ejemplo se obtiene información sobre los módulos usados por los procesos del equipo. Usa Get-Process
el cmdlet para obtener el proceso en el equipo.
Usa el Select-Object
cmdlet para generar una matriz de [System.Diagnostics.ProcessModule]
instancias como se incluye en la propiedad Modules de cada System.Diagnostics.Process
salida de instancia por Get-Process
.
El parámetro Property del Select-Object
cmdlet selecciona los nombres de proceso. Esto agrega una ProcessName
propiedad NoteProperty a cada [System.Diagnostics.ProcessModule]
instancia y la rellena con el valor de la propiedad ProcessName del proceso actual.
Por último, Format-List
el cmdlet se usa para mostrar el nombre y los módulos de cada proceso en 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
En este ejemplo se obtienen los cinco procesos que usan la mayor cantidad de memoria. El Get-Process
cmdlet obtiene los procesos del equipo. El Sort-Object
cmdlet ordena los procesos según el uso de memoria (conjunto de trabajo) y el Select-Object
cmdlet selecciona solo los cinco últimos miembros de la matriz resultante de objetos.
El parámetro Wait no es necesario en los comandos que incluyen el Sort-Object
cmdlet porque Sort-Object
procesa todos los objetos y, a continuación, devuelve una colección. La Select-Object
optimización 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: Seleccionar caracteres únicos de una matriz
En este ejemplo se 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: Uso de "-Unique" con otros parámetros
El parámetro Unique filtra los valores después de aplicar otros Select-Object
parámetros. Por ejemplo, si usa el parámetro First para seleccionar el primer número de elementos de una matriz, Unique solo se aplica a los valores seleccionados y no a toda la matriz.
"a","a","b","c" | Select-Object -First 2 -Unique
a
En este ejemplo, First selecciona "a","a"
como los primeros 2 elementos de la matriz. Unique se aplica a "a","a"
y devuelve a
como valor único.
Ejemplo 6: Selección de eventos más recientes y más antiguos en el registro de eventos
En este ejemplo se obtienen los primeros eventos (más recientes) y los últimos (más antiguos) del registro de eventos de Windows PowerShell.
Get-EventLog
obtiene todos los eventos del registro de Windows PowerShell y los guarda en la $a
variable .
A continuación, $a
se canaliza al Select-Object
cmdlet . El Select-Object
comando usa el parámetro Index para seleccionar eventos de la matriz de eventos de la $a
variable . El índice del primer evento es 0. El índice del último evento es el número de elementos de $a
menos 1.
$a = Get-EventLog -LogName "Windows PowerShell"
$a | Select-Object -Index 0, ($A.count - 1)
Ejemplo 7: Seleccionar todo, pero el primer objeto
En este ejemplo se crea una nueva PSSession en cada uno de los equipos enumerados en los archivos Servers.txt, excepto en el primero.
Select-Object
selecciona todo menos el primer equipo de una lista de nombres de equipo. La lista resultante de equipos se establece como el valor del parámetro ComputerName del New-PSSession
cmdlet .
New-PSSession -ComputerName (Get-Content Servers.txt | Select-Object -Skip 1)
Ejemplo 8: Cambiar el nombre de los archivos y seleccionar varios para revisar
En este ejemplo se agrega un sufijo "-ro" a los nombres base de archivos de texto que tienen el atributo de solo lectura y, a continuación, se muestran los cinco primeros archivos para que el usuario pueda ver un ejemplo del efecto.
Get-ChildItem
usa el parámetro dinámico ReadOnly para obtener archivos de solo lectura. Los archivos resultantes se canalizan al Rename-Item
cmdlet , que cambia el nombre del archivo. Usa el parámetro Passthru de Rename-Item
para enviar los archivos cuyo nombre se ha cambiado al Select-Object
cmdlet , que selecciona el primer 5 para mostrar.
El parámetro Wait de Select-Object
impide que PowerShell detenga el Get-ChildItem
cmdlet después de obtener los cinco primeros archivos de texto de solo lectura. Sin este parámetro, solo se puede cambiar el nombre de los cinco primeros archivos de solo lectura.
Get-ChildItem *.txt -ReadOnly |
Rename-Item -NewName {$_.BaseName + "-ro.txt"} -PassThru |
Select-Object -First 5 -Wait
Ejemplo 9: 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 [System.Int32]
instancias. Las instancias se ajustan a las reglas de formato estándar de la vista de salida. Esto es así para las propiedades expandidas . Si los objetos de salida tienen un formato estándar específico, es posible que la propiedad expandida no sea visible.
# 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 10: Creación de propiedades personalizadas en objetos
En el ejemplo siguiente se muestra cómo usar Select-Object
para agregar una propiedad personalizada a cualquier objeto .
Cuando se especifica un nombre de propiedad que no existe, Select-Object
crea esa propiedad como una propiedad NoteProperty en cada objeto pasado.
$customObject = 1 | Select-Object -Property MyCustomProperty
$customObject.MyCustomProperty = "New Custom Property"
$customObject
MyCustomProperty
----------------
New Custom Property
Ejemplo 11: Crear propiedades calculadas para cada InputObject
En este ejemplo se muestra cómo usar Select-Object
para agregar propiedades calculadas a la entrada. Pasar un ScriptBlock al parámetro Property hace Select-Object
que evalúe la expresión en cada objeto pasado y agregue los resultados a la salida. Dentro de ScriptBlock, puede usar la $_
variable para hacer referencia al objeto actual en la canalización.
De forma predeterminada, Select-Object
usará la cadena ScriptBlock como nombre de la propiedad. Con una tabla Hash, puede etiquetar la salida de ScriptBlock como una propiedad personalizada agregada a cada objeto. Puede agregar varias propiedades calculadas a cada objeto pasado a 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.
A partir de PowerShell 6, ya no es necesario incluir el parámetro Property para que ExcludeProperty funcione.
Type: | String[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-ExpandProperty
Especifica una propiedad para seleccionarla e indica que se debe realizar un intento para 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, la salida Tipo de objetos coincidirá con el Tipo de la propiedad expandida.
Si se especifica el parámetro Property , Select-Object
intentará agregar cada propiedad seleccionada como noteProperty a cada objeto generado.
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 cuando se usa -ExpandProperty
, Select-Object
no se 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 De objetos expandidos , se producirá un error.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-First
Especifica el número de objetos para seleccionar desde el principio de una matriz de objetos de entrada.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Index
Selecciona objetos de una matriz basándose en 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.
Type: | Int32[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | 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
.
Cuando se pasan objetos al parámetro InputObject , en lugar de usar la canalización, Select-Object
se trata InputObject como un único objeto, incluso si el valor es una colección. Se recomienda usar la canalización al pasar colecciones a Select-Object
.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Last
Especifica el número de objetos que se van a seleccionar desde el final de una matriz de objetos de entrada.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Property
Especifica las propiedades que se van a seleccionar. Estas propiedades se agregan como miembros NoteProperty 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, utilice una tabla hash.
Las claves válidas son:
- Nombre (o etiqueta):
<string>
- Expresión:
<string>
o<script block>
Para obtener más información, consulte about_Calculated_Properties.
Type: | Object[] |
Position: | 0 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-Skip
Omite (no selecciona) el número de elementos especificado. De forma predeterminada, el parámetro Skip cuenta desde el principio de la matriz o lista de objetos, pero si el comando usa el parámetro Last , cuenta desde el final de la lista o matriz.
A diferencia del parámetro Index, que comienza a contar en 0, el parámetro Skip comienza en 1.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SkipIndex
Type: | Int32[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SkipLast
Omite (no selecciona) el número especificado de elementos del final de la lista o matriz. Funciona de la misma manera que usar Skip junto con el parámetro Last .
A diferencia del parámetro Index , que comienza a contar en 0, el parámetro SkipLast comienza en 1.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Unique
Especifica que si un subconjunto de los objetos de entrada tiene valores y propiedades idénticos, se seleccionará un solo miembro del subconjunto.
Unique selecciona valores después de aplicar otros parámetros de filtrado.
Este parámetro distingue mayúsculas de minúsculas. Como resultado, las cadenas que solo difieren en las mayúsculas y minúsculas se consideran únicas.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | 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 Select-Object
comando con los parámetros First o 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.
Este parámetro se incorporó en Windows PowerShell 3.0.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Entradas
Puede canalizar cualquier objeto a Select-Object
.
Salidas
Notas
También puede hacer referencia al
Select-Object
cmdlet mediante su alias integrado,select
. Para obtener más información, consulte about_Aliases.La característica de optimización de
Select-Object
solo está disponible para los comandos que escriben objetos en la canalización a medida que se procesan. No tiene ningún efecto sobre los comandos que almacenan en búfer los objetos procesados y los escriben como una colección. Durante el diseño de los cmdlets, se recomienda escribir los objetos inmediatamente. Para obtener más información, vea Escribir registros únicos en la canalización en Instrucciones de desarrollo muy recomendables.