Select-Object
Seleciona objetos ou propriedades de objeto.
Sintaxe
Select-Object
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-ExcludeProperty <String[]>]
[-ExpandProperty <String>]
[-Unique]
[-CaseInsensitive]
[-Last <Int32>]
[-First <Int32>]
[-Skip <Int32>]
[-Wait]
[<CommonParameters>]
Select-Object
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-ExcludeProperty <String[]>]
[-ExpandProperty <String>]
[-Unique]
[-CaseInsensitive]
[-Skip <Int32>]
[-SkipLast <Int32>]
[<CommonParameters>]
Select-Object
[-InputObject <PSObject>]
[-Unique]
[-CaseInsensitive]
[-Wait]
[-Index <Int32[]>]
[<CommonParameters>]
Select-Object
[-InputObject <PSObject>]
[-Unique]
[-CaseInsensitive]
[-SkipIndex <Int32[]>]
[<CommonParameters>]
Description
O cmdlet Select-Object
seleciona as 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. Para selecionar propriedades de objeto, use o parâmetro propriedade. 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 os comandos criem e processem objetos que não são usados.
Quando você usa Select-Object
com os parâmetros First ou Index em um pipeline de comando, o PowerShell interrompe o comando que gera os objetos assim que o número selecionado de objetos é atingido. Para desativar esse comportamento de otimização, use o parâmetro Wait.
Exemplos
Exemplo 1: Selecionar objetos por propriedade
Este exemplo cria objetos que têm as propriedades Name, IDe conjunto de trabalho (WS) de objetos de processo.
Get-Process | Select-Object -Property ProcessName, Id, WS
Exemplo 2: Selecionar objetos por propriedade e formatar os resultados
Este exemplo 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 Select-Object
para gerar uma matriz de instâncias de [System.Diagnostics.ProcessModule]
, conforme contido na propriedade módulos de cada saída de instância System.Diagnostics.Process
Get-Process
.
O parâmetro propriedade do cmdlet Select-Object
seleciona os nomes do processo. Isso adiciona umaProcessName
NoteProperty a cada instância [System.Diagnostics.ProcessModule]
e a preenche com o valor da propriedade ProcessName do processo atual.
Por fim, Format-List
cmdlet é usado 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 a maior parte da memória
Este exemplo 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 resultante de objetos.
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 de 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 exemplo 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
A
Exemplo 5: Usando '-Unique' com outros parâmetros
O parâmetro Unique filtra valores depois que outros parâmetros Select-Object
são aplicados. Por exemplo, se você usar o parâmetro First para selecionar o primeiro número de itens em uma matriz, Exclusivo será aplicado apenas aos valores selecionados e não à matriz inteira.
"a","a","b","c" | Select-Object -First 2 -Unique
a
Neste exemplo, First seleciona "a","a"
como os dois primeiros itens na matriz.
Exclusivo é aplicado a "a","a"
e retorna a
como o valor exclusivo.
Exemplo 6: selecionar cadeias de caracteres exclusivas usando o parâmetro '-CaseInsensitive'
Este exemplo usa comparações que não diferenciam maiúsculas de minúsculas para obter cadeias de caracteres exclusivas de uma matriz de cadeias de caracteres.
"aa", "Aa", "Bb", "bb" | Select-Object -Unique -CaseInsensitive
aa
Bb
Exemplo 7: Selecionar eventos mais recentes e mais antigos no log de eventos
Este exemplo obtém os primeiros (mais recentes) e os últimos eventos (mais antigos) no log de eventos do Windows PowerShell.
Get-WinEvent
obtém todos os eventos no log do Windows PowerShell e os salva na variável $a
.
Em seguida, $a
é canalizado 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-WinEvent -LogName "Windows PowerShell"
$a | Select-Object -Index 0, ($a.count - 1)
Exemplo 8: Selecionar todos, exceto o primeiro objeto
Este exemplo cria uma nova PSSession em cada um dos computadores listados nos arquivos Servers.txt, exceto no primeiro.
Select-Object
seleciona todos, exceto o primeiro computador em uma lista de nomes de computador. 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 9: renomear arquivos e selecionar vários para revisar
Este exemplo adiciona um sufixo "-ro" aos nomes base de arquivos de texto que têm o atributo somente leitura e exibe os cinco primeiros arquivos para que o usuário possa ver um exemplo do efeito.
Get-ChildItem
usa o parâmetro dinâmico ReadOnly para obter arquivos somente leitura. Os arquivos resultantes são canalizados 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 cinco primeiros para exibição.
O parâmetro Wait de 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 10: Mostrar os meandros do parâmetro -ExpandProperty
Este exemplo mostra os meandros do parâmetro ExpandProperty.
Observe que a saída gerada era uma matriz de instâncias de [System.Int32]
. As instâncias estão em conformidade com as regras de formatação padrão da exibição de saída . Isso é verdadeiro para quaisquer propriedades de expandidas. Se os objetos gerados tiverem um formato padrão específico, a propriedade expandida poderá 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), ...
Equals Method bool Equals(System.Object obj), bool Equals(int obj), bool IEq...
GetHashCode Method int GetHashCode()
GetType Method type GetType()
GetTypeCode Method System.TypeCode GetTypeCode(), System.TypeCode IConvertible.Ge...
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 ToS...
ToType Method System.Object IConvertible.ToType(type conversionType, System...
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 11: 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 12: Criar propriedades calculadas para cada InputObject
Este exemplo demonstra o uso de Select-Object
para adicionar propriedades calculadas à sua entrada. Passar um ScriptBlock para o parâmetro Property faz com que Select-Object
avalie a expressão em cada objeto passado e adicione os resultados à saída. No ScriptBlock, você pode usar a variável $_
para referenciar o objeto atual no pipeline.
Por padrão, Select-Object
usa a cadeia de caracteres ScriptBlock como o nome da propriedade. Usando um hashable, você pode rotular a saída do scriptBlock como uma propriedade personalizada adicionada a cada objeto. Você pode adicionar várias propriedades calculadas a cada objeto passado para 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
Exemplo 13: Selecionar chaves de hash sem usar propriedades calculadas
A partir do PowerShell 6, o Select-Object
dá suporte à seleção das chaves de entrada de hashable como propriedades. O exemplo a seguir seleciona as teclas weight
e name
em um hash de entrada e exibe a saída.
@{ name = 'a' ; weight = 7 } | Select-Object -Property name, weight
name weight
---- ------
a 7
Exemplo 14: ExpandProperty altera o objeto original
Este exemplo demonstra o efeito colateral do uso do parâmetro ExpandProperty. Quando você usa ExpandProperty, Select-Object
adiciona as propriedades selecionadas ao objeto original como membros NoteProperty.
PS> $object = [PSCustomObject]@{
name = 'USA'
children = [PSCustomObject]@{
name = 'Southwest'
}
}
PS> $object
name children
---- --------
USA @{name=Southwest}
# Use the ExpandProperty parameter to expand the children property
PS> $object | Select-Object @{n="country"; e={$_.name}} -ExpandProperty children
name country
---- -------
Southwest USA
# The original object has been altered
PS> $object
name children
---- --------
USA @{name=Southwest; country=USA}
Como você pode ver, a propriedade país foi adicionada ao filho objeto depois de usar o parâmetro ExpandProperty.
Exemplo 15: Criar um novo objeto com propriedades expandidas sem alterar o objeto de entrada
Você pode evitar o efeito colateral de usar o parâmetro ExpandProperty criando um novo objeto e copiando as propriedades do objeto de entrada.
PS> $object = [PSCustomObject]@{
name = 'USA'
children = [PSCustomObject]@{
name = 'Southwest'
}
}
PS> $object
name children
---- --------
USA @{name=Southwest}
# Create a new object with selected properties
PS> $newobject = [PSCustomObject]@{
country = $object.name
children = $object.children
}
PS> $newobject
country children
------- --------
USA @{name=Southwest}
# $object remains unchanged
PS> $object
name children
---- --------
USA @{name=Southwest}
Parâmetros
-CaseInsensitive
Por padrão, quando você usa o parâmetro Unique, o cmdlet usa comparações que diferenciam maiúsculas de minúsculas. Quando você usa esse parâmetro, o cmdlet usa comparações que não diferenciam maiúsculas de minúsculas.
Esse parâmetro foi adicionado no PowerShell 7.4.
Tipo: | SwitchParameter |
Cargo: | Named |
Valor padrão: | False |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-ExcludeProperty
Especifica as propriedades que esse cmdlet exclui da operação. Curingas são permitidos.
A partir do PowerShell 6, não é mais necessário incluir o parâmetro Property para excludeProperty funcionar.
Tipo: | String[] |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | True |
-ExpandProperty
Especifica uma propriedade a ser selecionada e indica que uma tentativa deve ser feita para expandir essa propriedade. Se o pipeline de objeto de entrada não tiver a propriedade nomeada, Select-Object
retornará um erro.
- 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, o tipo de dos objetos de saída corresponde à tipo deda propriedade expandida.
Nota
Há um efeito colateral ao usar ExpandProperty . O Select-Object
adiciona as propriedades selecionadas ao objeto original como membros NoteProperty.
Se o parâmetro Property for especificado, Select-Object
tentará adicionar cada propriedade selecionada como um NoteProperty a cada objeto gerado.
Aviso
Se você receber um erro de que uma propriedade não pode ser processada porque uma propriedade com esse nome já existe, considere o seguinte. Observe que, ao usar ExpandProperty, Select-Object
não pode substituir uma propriedade existente. Isso significa:
- Se o objeto expandido tiver uma propriedade de mesmo nome, o comando retornará um erro.
- Se o objeto Selected tiver uma propriedade de mesmo nome que uma propriedade de Expanded object, o comando retornará um erro.
Tipo: | String |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-First
Especifica o número de objetos a serem selecionados desde o início de uma matriz de objetos de entrada.
Tipo: | Int32 |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-Index
Seleciona objetos de uma matriz com base em seus valores de índice. Insira os índices em uma lista separada por vírgulas. Os índices em uma matriz começam com 0, em que 0 representa o primeiro valor e (n-1) representa o último valor.
Tipo: | Int32[] |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-InputObject
Especifica objetos a serem enviados para o cmdlet por meio do pipeline. Esse parâmetro permite que você redirecione 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
.
Tipo: | PSObject |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | True |
Aceitar caracteres curinga: | False |
-Last
Especifica o número de objetos a serem selecionados no final de uma matriz de objetos de entrada.
Tipo: | Int32 |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-Property
Especifica as propriedades a serem selecionadas. Essas propriedades são adicionadas como membros do NoteProperty aos objetos de saída. Curingas são permitidos. Se o objeto de entrada não tiver a propriedade nomeada, o valor do novo NoteProperty será definido como $null
.
O valor do parâmetro da Propriedade 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>
Para obter mais informações, consulte about_Calculated_Properties.
Tipo: | Object[] |
Cargo: | 0 |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | True |
-Skip
Ignora (não seleciona) o número especificado de itens. Por padrão, o parâmetro Skip conta desde o início da coleção de objetos. Se o comando usar o parâmetro Last, ele conta do final da coleção.
Ao contrário do parâmetro Index, que começa a contar em 0, o parâmetro Skip começa em 1.
A partir do PowerShell 7.4, você pode usar o parâmetro Skip com o parâmetro SkipLast para ignorar itens do início e do final da coleção.
Tipo: | Int32 |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-SkipIndex
Ignora (não seleciona) os objetos de uma matriz com base em seus valores de índice. Insira os índices em uma lista separada por vírgulas. Os índices em uma matriz começam com 0, em que 0 representa o primeiro valor e (n-1) representa o último valor.
Esse parâmetro foi introduzido no Windows PowerShell 6.0.
Tipo: | Int32[] |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-SkipLast
Ignora (não seleciona) o número especificado de itens do final da lista ou da matriz. Funciona da mesma forma que usar Ignorar junto com o 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.
A partir do PowerShell 7.4, você pode usar o parâmetro Skip com o parâmetro SkipLast para ignorar itens do início e do final da coleção.
Tipo: | Int32 |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-Unique
Especifica que, se um subconjunto dos objetos de entrada tiver propriedades e valores idênticos, apenas um único membro do subconjunto deverá ser selecionado.
Exclusivo seleciona valores depois que outros parâmetros de filtragem são aplicados.
Esse 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. Adicione o parâmetro CaseInsensitive para executar comparações que não diferenciam maiúsculas de minúsculas.
Tipo: | SwitchParameter |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-Wait
Indica que o cmdlet desativa a otimização. O PowerShell executa comandos na ordem em que eles aparecem no pipeline de comando 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 comando, 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.
Tipo: | SwitchParameter |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
Entradas
Você pode redirecionar objetos para este cmdlet.
Saídas
Esse cmdlet retorna os objetos de entrada com apenas as propriedades selecionadas.
Observações
O PowerShell inclui os seguintes aliases para Select-Object
:
- Todas as plataformas:
select
O recurso de otimização de Select-Object
está 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 altamente incentivadas.