Compartilhar via


Select-Object

Seleciona objetos ou propriedades de objeto.

Sintaxe

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

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ê inclui um comando 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 é 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 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 para gerar uma matriz de instâncias de , conforme contido na propriedade módulos de cada saída de instância .

O parâmetro propriedade do cmdlet seleciona os nomes do processo. Isso adiciona uma NoteProperty a cada instância 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

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 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-EventLog 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-EventLog -LogName "Windows PowerShell"
$a | Select-Object -Index 0, ($A.count - 1)

Exemplo 7: 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 8: 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 9: Demonstrar os meandros do parâmetro -ExpandProperty

Este exemplo demonstra 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), 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 10: 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 11: 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 avalie a expressão em cada objeto passado e adicione os resultados à saída. NoScriptBlock, você pode usar a variável para referenciar o objeto atual no pipeline.

Por padrão, usará a cadeia de caracteres ScriptBlock como o nome da propriedade. Usando umhashable , 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

Parâmetros

-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 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 de saída de objetos corresponderá à tipo da propriedade expandida.

Se o parâmetro propriedade for especificado, tentará adicionar cada propriedade selecionada como um NoteProperty a cada objeto saída.

Aviso

Se você receber o erro: Selecione: A propriedade não pode ser processada porque a propriedade <PropertyName> 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, ocorrerá um erro.
  • Se o objeto Selected tiver uma propriedade com o mesmo nome de uma propriedade Expanded objects, ocorrerá 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.

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 matriz ou lista de objetos, mas se o comando usa o parâmetro Last, ele conta do final da lista ou da matriz.

Ao contrário do parâmetro Index, que começa a contar em 0, o parâmetro Skip começa em 1.

Tipo:Int32
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-SkipIndex

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.

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, somente um único membro do subconjunto 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.

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

PSObject

Você pode redirecionar qualquer objeto para Select-Object.

Saídas

PSObject

Observações

  • Você também pode consultar o cmdlet Select-Object por seu alias interno, select. Para obter mais informações, consulte about_Aliases.

  • 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.