Select-Object
Seleciona objetos ou propriedades de objetos.
Sintaxe
DefaultParameter (Predefinição)
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
O cmdlet Select-Object seleciona propriedades especificadas de um objeto ou conjunto de objetos.
Ele também pode selecionar objetos exclusivos, um número especificado de objetos ou objetos em uma posição especificada em uma matriz.
Para selecionar objetos de uma coleção, use os parâmetros First, Last, Unique, Skipe Index parâmetros. Para selecionar as propriedades do objeto, use o parâmetro Property.
Quando você seleciona propriedades, Select-Object retorna novos objetos que têm apenas as propriedades especificadas.
A partir do Windows PowerShell 3.0, Select-Object inclui um recurso de otimização que impede que comandos criem e processem objetos que não são usados.
Quando você inclui um comando Select-Object com os parâmetros First ou Index em um pipeline de comandos, o PowerShell interrompe o comando que gera os objetos assim que o número selecionado de objetos é gerado, mesmo quando o comando que gera os objetos aparece antes do comando Select-Object no pipeline.
Para desativar esse comportamento de otimização, use o parâmetro Wait.
Exemplos
Exemplo 1: Selecionar objetos por propriedade
Este comando cria objetos que têm as propriedades Name, IDe working set (WS) de objetos de processo.
Get-Process | Select-Object -Property ProcessName, Id, WS
Exemplo 2: Selecionar objetos por propriedade e formatar os resultados
Este comando obtém informações sobre os módulos usados pelos processos no computador.
Ele usa Get-Process cmdlet para obter o processo no computador.
Ele usa o cmdlet
O comando usa o parâmetro Property do cmdlet Select-Object para selecionar os nomes dos processos. Isso adiciona um ProcessNameNoteProperty a cada instância [System.Diagnostics.ProcessModule] e a preenche com o valor dos processos atuais propriedade ProcessName.
O comando usa o cmdlet Format-List para exibir o nome e os módulos de cada processo em uma 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
...
Exemplo 3: Selecionar processos usando mais memória
Este comando obtém os cinco processos que estão usando mais memória.
O cmdlet Get-Process obtém os processos no computador.
O cmdlet Sort-Object classifica os processos de acordo com o uso de memória (conjunto de trabalho) e o cmdlet Select-Object seleciona apenas os últimos cinco membros da matriz de objetos resultante.
O parâmetro Wait não é necessário em comandos que incluem o cmdlet Sort-Object porque Sort-Object processa todos os objetos e retorna uma coleção.
A otimização Select-Object está disponível apenas para comandos que retornam objetos individualmente à medida que são processados.
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
Exemplo 4: Selecionar caracteres exclusivos de uma matriz
Este comando usa o parâmetro Unique de Select-Object para obter caracteres exclusivos de uma matriz de caracteres.
"a","b","c","a","a","a" | Select-Object -Unique
a
b
c
Exemplo 5: Selecionar eventos mais recentes e mais antigos no log de eventos
Esses comandos obtém o primeiro (mais novo) e o último (mais antigo) eventos no log de eventos do Windows PowerShell.
O comando usa o cmdlet Get-EventLog para obter todos os eventos no log do Windows PowerShell.
Poupa-os na variável $a.
O segundo comando usa um operador de pipeline (|) para enviar os eventos em $a para o cmdlet Select-Object.
O comando Select-Object usa o parâmetro Index para selecionar eventos da matriz de eventos na variável $a. O índice do primeiro evento é 0.
O índice do último evento é o número de itens em $a menos 1.
$a = Get-EventLog -LogName "Windows PowerShell"
$a | Select-Object -Index 0, ($A.count - 1)
Exemplo 6: Selecionar todos, exceto o primeiro objeto
Este comando cria uma nova PSSession em cada um dos computadores listados nos arquivos Servers.txt, exceto para o primeiro.
Este comando usa o cmdlet Select-Object para selecionar todos, exceto o primeiro computador, em uma lista de nomes de computadores.
A lista resultante de computadores é definida como o valor do parâmetro ComputerName do cmdlet New-PSSession.
New-PSSession -ComputerName (Get-Content Servers.txt | Select-Object -Skip 1)
Exemplo 7: Renomeie arquivos e selecione vários para revisar
Este comando adiciona um sufixo "-ro" aos nomes base dos arquivos de texto que têm o atributo somente leitura e, em seguida, exibe os cinco primeiros arquivos para que o usuário possa ver uma amostra do efeito.
O comando usa o parâmetro dinâmico ReadOnly do cmdlet Get-ChildItem for FileSystem para obter arquivos somente leitura.
Ele usa um operador de pipeline (|) para enviar os arquivos para o cmdlet Rename-Item, que renomeia o arquivo.
Ele usa o parâmetro Passthru de Rename-Item para enviar os arquivos renomeados para o cmdlet Select-Object, que seleciona os 5 primeiros para exibição.
O parâmetro Wait do Select-Object impede que o PowerShell pare o cmdlet Get-ChildItem depois de obter os cinco primeiros arquivos de texto somente leitura.
Sem esse parâmetro, apenas os cinco primeiros arquivos somente leitura seriam renomeados.
Get-ChildItem *.txt -ReadOnly | Rename-Item -NewName {$_.BaseName + "-ro.txt"} -PassThru | Select-Object -First 5 -Wait
Exemplo 8: Demonstrar os meandros do parâmetro -ExpandProperty
Este exemplo demonstra as complexidades do parâmetro ExpandProperty.
Observe que a saída gerada foi uma matriz de [System.Int32] instâncias. As instâncias estão em conformidade com as regras de formatação padrão do Output View.
Isso é verdadeiro para qualquer propriedades de expandido. Se os objetos de saída tiverem um formato padrão específico, a propriedade expandida pode não estar visível.
# 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
Exemplo 9: Criar propriedades personalizadas em objetos
O exemplo a seguir demonstra o uso de Select-Object para adicionar uma propriedade personalizada a qualquer objeto.
Quando você especifica um nome de propriedade que não existe, Select-Object cria essa propriedade como um NoteProperty em cada objeto passado.
$customObject = 1 | Select-Object -Property MyCustomProperty
$customObject.MyCustomProperty = "New Custom Property"
$customObject
MyCustomProperty
----------------
New Custom Property
Exemplo 10: Criar propriedades calculadas para cada InputObject
Este exemplo demonstra o uso de Select-Object para adicionar propriedades calculadas à sua entrada.
Passar uma ScriptBlock $_ para fazer referência ao objeto atual no pipeline.
Por padrão, 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 as propriedades que esse cmdlet exclui da operação. Curingas são permitidos. Esse parâmetro só é efetivo quando o comando também inclui o parâmetro Property.
Propriedades dos parâmetros
| Tipo: | String[] |
| Default value: | None |
| Suporta carateres universais: | True |
| NãoMostrar: | False |
Conjuntos de parâmetros
DefaultParameter
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
SkipLastParameter
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-ExpandProperty
Especifica uma propriedade a ser selecionada e indica que deve ser feita uma tentativa de expandir essa propriedade.
- Se a propriedade especificada for uma matriz, cada valor da matriz será incluído na saída.
- Se a propriedade especificada for um objeto, as propriedades dos objetos serão expandidas para cada InputObject
Em ambos os casos, a saída
Se o parâmetro Property for especificado, Select-Object tentará adicionar cada propriedade selecionada como um NoteProperty a cada objeto produzido.
Advertência
Se você receber o erro: Selecione : A propriedade não pode ser processada porque a propriedade já <PropertyName> existe, considere o seguinte.
Observe que, ao usar -ExpandProperty, Select-Object não pode substituir uma propriedade existente.
Isto significa:
- Se o objeto expandido tiver uma propriedade com o mesmo nome, ocorrerá um erro.
- Se o objeto Selected tiver uma propriedade com o mesmo nome de uma propriedade Expanded objects, ocorrerá um erro.
Propriedades dos parâmetros
| Tipo: | String |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
DefaultParameter
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
SkipLastParameter
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-First
Especifica o número de objetos a serem selecionados desde o início de uma matriz de objetos de entrada.
Propriedades dos parâmetros
| Tipo: | Int32 |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
DefaultParameter
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-Index
Seleciona objetos de uma matriz com base em seus valores de índice. Insira os índices em uma lista separada por vírgula.
Os índices em uma matriz começam com 0, onde 0 representa o primeiro valor e (n-1) representa o último valor.
Propriedades dos parâmetros
| Tipo: | Int32[] |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
IndexParameter
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-InputObject
Especifica os objetos a serem enviados ao cmdlet por meio do pipeline.
Este parâmetro permite canalizar objetos para Select-Object.
Quando você passa objetos para o parâmetro InputObject, em vez de usar o pipeline, Select-Object trata o InputObject como um único objeto, mesmo que o valor seja uma coleção. É recomendável que você use o pipeline ao passar coleções para Select-Object.
Propriedades dos parâmetros
| Tipo: | PSObject |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
(All)
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | True |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-Last
Especifica o número de objetos a serem selecionados no final de uma matriz de objetos de entrada.
Propriedades dos parâmetros
| Tipo: | Int32 |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
DefaultParameter
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-Property
Especifica as propriedades a serem selecionadas. Essas propriedades são adicionadas como NoteProperty membros aos objetos de saída. Curingas são permitidos.
O valor do parâmetro Property pode ser uma nova propriedade calculada. Para criar uma propriedade calculada, use uma tabela de hash. As chaves válidas são:
- Nome (ou rótulo):
<string> - Expressão
<string>ou<script block>
Propriedades dos parâmetros
| Tipo: | Object[] |
| Default value: | None |
| Suporta carateres universais: | True |
| NãoMostrar: | False |
Conjuntos de parâmetros
DefaultParameter
| Position: | 0 |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
SkipLastParameter
| Position: | 0 |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-Skip
Ignora (não seleciona) o número especificado de itens. Por padrão, o parâmetro Ignorar conta desde o início da matriz ou lista de objetos, mas se o comando usar o parâmetro Última, ele contará a partir do final da lista ou matriz.
Ao contrário do parâmetro Index, que começa a contar em 0, o parâmetro Skip começa em 1.
Propriedades dos parâmetros
| Tipo: | Int32 |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
DefaultParameter
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-SkipLast
Ignora (não seleciona) o número especificado de itens do final da lista ou matriz. Funciona da mesma forma que usar Skip juntamente com parâmetro Last.
Ao contrário do parâmetro Index, que começa a contar em 0, o parâmetro SkipLast começa em 1.
Propriedades dos parâmetros
| Tipo: | Int32 |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
SkipLastParameter
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-Unique
Especifica que, se um subconjunto dos objetos de entrada tiver propriedades e valores idênticos, apenas um único membro do subconjunto será selecionado.
Este parâmetro diferencia maiúsculas de minúsculas. Como resultado, as cadeias de caracteres que diferem apenas na caixa de caracteres são consideradas exclusivas.
Propriedades dos parâmetros
| Tipo: | SwitchParameter |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
(All)
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-Wait
Indica que o cmdlet desativa a otimização.
O PowerShell executa comandos na ordem em que aparecem no pipeline de comandos e permite que eles gerem todos os objetos.
Por padrão, se você incluir um comando Select-Object com os parâmetros First ou Index em um pipeline de comandos, o PowerShell interromperá o comando que gera os objetos assim que o número selecionado de objetos for gerado.
Esse parâmetro foi introduzido no Windows PowerShell 3.0.
Propriedades dos parâmetros
| Tipo: | SwitchParameter |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
DefaultParameter
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
IndexParameter
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
CommonParameters
Este cmdlet suporta os parâmetros comuns: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Para obter mais informações, consulte about_CommonParameters.
Entradas
PSObject
Você pode canalizar qualquer objeto para Select-Object.
Saídas
PSObject
Notas
- Você também pode se referir ao cmdlet
Select-Objectpor seu alias interno,select. Para obter mais informações, consulte about_Aliases. - O recurso de otimização do
Select-Objectestá disponível apenas para comandos que gravam objetos no pipeline à medida que são processados. Ele não tem efeito sobre os comandos que armazenam objetos processados em buffer e os gravam como uma coleção. Escrever objetos imediatamente é uma prática recomendada de design de cmdlet. Para obter mais informações, consulte Gravar registros únicos no pipeline em Diretrizes de desenvolvimento fortemente encorajadas na biblioteca MSDN.