Select-Object

Modulo: Microsoft.PowerShell.Utility

Seleziona oggetti o proprietà dell’oggetto.

Sintassi

Select-Object >] 
Select-Object >] 

Descrizione

Il cmdlet Select-Object seleziona le proprietà specificate di un oggetto o di un insieme di oggetti. Può anche selezionare oggetti univoci, un numero specificato di oggetti o oggetti in una posizione specificata in anarray.

Per selezionare gli oggetti da una raccolta, utilizzare i parametri First, Last, Unique, Skip eindex. Per selezionare le proprietà dell’oggetto, utilizzare il parametro Proprietà. Quando si selezionaproperties,Select-Object restituisce nuovi oggetti che hanno solo le proprietà specificate.

A partire da Windows PowerShell 3.0,Select-Object include una funzione di ottimizzazione che impedisce ai comandi di creare ed elaborare oggetti non utilizzati.

Quando si include un comandoSelect-Object con i parametri First o Index in commandpipeline, PowerShell interrompe il comando che genera gli oggetti non appena viene generato il numero selezionato di oggetti, anche quando il comando che genera gli oggetti appare prima del comandoSelect-Object nella pipeline. Per disattivare questo comportamento di ottimizzazione, utilizzare Waitparameter.

Esempi

Esempio 1: Selezionare gli oggetti per proprietà

Questo esempio crea oggetti con le proprietà Name, ID e working Set (WS) degli oggetti processo.

Get-Process | Select-Object -Property ProcessName, Id, WS

Esempio 2: Selezionare gli oggetti per proprietà e formattare i risultati

Questo esempio ottiene informazioni sui moduli utilizzati dai processi sul computer. UtilizzaGet-Process cmdlet per ottenere il processo sul computer.

Utilizza il cmdlet Select-Objectper produrre un array di istanze come contenuto nella proprietà Modules di ogni System.Diagnostics.Processinstanceoutput di Get-Process.

Il parametro di proprietà del cmdlet Select-Object seleziona i nomi dei processi. Questo aggiunge unProcessName NoteProperty a ogni istanza e popolatesit con il valore della proprietà ProcessName del processo corrente.

Infine, Format-List cmdlet viene utilizzato per visualizzare il nome e i moduli di ciascun processo in un elenco.

Esempio 3: Selezionare i processi che utilizzano più memoria

Questo esempio ottiene i cinque processi che utilizzano più memoria. Il cmdletGet-Process ottiene i processi sul computer. Il cmdletSort-Object ordina i processi in base all’utilizzo della memoria(working set) e il cmdletSelect-Object seleziona solo gli ultimi cinque membri dell’array di oggetti risultante.

Il parametro Wait non è richiesto nei comandi che includono il cmdlet Sort-Object perchéSort-Object elabora tutti gli oggetti e quindi restituisce una raccolta. L’ottimizzazione Select-Object è disponibile solo per i comandi che restituiscono oggetti singolarmente mentre vengono elaborati.

Esempio 4: Selezionare caratteri univoci da un array

Questo esempio utilizza il parametro univoco diSelect-Object per ottenere caratteri univoci da un array di caratteri.

"a","b","c","a","a","a" | Select-Object -Uniqueabc

Esempio 5: Selezionare gli eventi più recenti e meno recenti nel registro eventi

Questo esempio ottiene il primo (più recente) e l’ultimo (più vecchio) eventi nel registro eventi di Windows PowerShell.

Get-EventLog ottiene tutti gli eventi nel registro di Windows PowerShell e li salva nella variabile $a.Quindi, $a viene convogliato nel cmdlet Select-Object. Il comandoSelect-Object utilizza Indexparameter per selezionare gli eventi dalla matrice di eventi nella variabile$a. L’indice del firstevent è 0. L’indice dell’ultimo evento è il numero di elementi in $a meno 1.

$a = Get-EventLog -LogName "Windows PowerShell"$a | Select-Object -Index 0, ($A.count - 1)

Esempio 6: Selezionare tutto tranne il primo oggetto

Questo esempio crea una nuova sessione PS su ciascuno dei computer elencati nei Server.file txt,ad eccezione del primo.

Select-Object seleziona tutti i computer tranne il primo in un elenco di nomi di computer. L’elenco risultante dei computer viene impostato come valore del parametro ComputerName del cmdletNew-PSSession.

New-PSSession -ComputerName (Get-Content Servers.txt | Select-Object -Skip 1)

Esempio 7: Rinominare i file e selezionarne diversi per rivedere

Questo esempio aggiunge un suffisso “-ro” ai nomi di base dei file di testo che hanno l’attributo di sola lettura e quindi visualizza i primi cinque file in modo che l’utente possa vedere un esempio dell’effetto.

Get-ChildItem utilizza il parametro ReadOnly dynamic per ottenere file di sola lettura. I file risultatisono reindirizzati al cmdletRename-Item, che rinomina il file. Utilizza il parametro Passthru di Rename-Item per inviare i file rinominati al cmdlet Select-Object, che seleziona i primi 5 perdisplay.

Il parametro Wait diSelect-Object impedisce a PowerShell di arrestare il cmdletGet-ChildItemdopo aver ottenuto i primi cinque file di testo di sola lettura. Senza questo parametro, solo i primicinque file di sola lettura verrebbero rinominati.

Get-ChildItem *.txt -ReadOnly | Rename-Item -NewName {$_.BaseName + "-ro.txt"} -PassThru | Select-Object -First 5 -Wait

Esempio 8: Dimostrare la complessità del parametro-ExpandProperty

Questo esempio mostra la complessità del parametro ExpandProperty.

Si noti che l’output generato era un array di istanze. Le istanze sono conformi alle regole di formattazione standard della vista di output. Questo è vero per qualsiasi proprietà espansa. Se gli oggetti outputted hanno un formato standard specifico, la proprietà espansa potrebbe non essere visibile.

# Create a custom object to use for the Select-Object example.$object = @{Name="CustomObject";Expand=@(1,2,3,4,5)}# Use the ExpandProperty parameter to Expand the property.$object | Select-Object -ExpandProperty Expand -Property Name12345# 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-MemberTypeName: System.Int32Name 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.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

Esempio 9: Creare proprietà personalizzate sugli oggetti

L’esempio seguente mostra l’uso diSelect-Object per aggiungere una proprietà personalizzata a qualsiasi oggetto.Quando si specifica un nome di proprietà che non esiste,Select-Object crea tale proprietà come aNoteProperty su ogni oggetto passato.

Esempio 10: Crea proprietà calcolate per ogni InputObject

Questo esempio dimostra l’uso diSelect-Object per aggiungere proprietà calcolate al tuo input. Passinga ScriptBlock al parametro della proprietà fa sì che Select-Object valuti l’espressione unoach oggetto passato e aggiunga i risultati all’output. All’interno di ScriptBlock, è possibile utilizzare la variabile$_ per fare riferimento all’oggetto corrente nella pipeline.

Per impostazione predefinita, Select-Object utilizzerà la stringa ScriptBlock come nome della proprietà. Usando aHashtable, puoi etichettare l’output del tuo ScriptBlock come una proprietà personalizzata aggiunta a eachobject. È possibile aggiungere più proprietà calcolate a ciascun oggetto passato a Select-Object.

Parametri

-ExcludeProperty

Specifica le proprietà che questo cmdlet esclude dall’operazione. I caratteri jolly sono consentiti.

A partire da PowerShell 6, non è più necessario includere il parametro della proprietà forExcludeProperty per funzionare.

Tipo: String
Posizione: Nome
valore Predefinito: Nessuno
Accettare l’input della pipeline: False
Accetta i caratteri jolly: True
-ExpandProperty

Specifica una proprietà da selezionare e indica che è necessario tentare di espandere thatproperty.

  • Se la proprietà specificata è un array, ogni valore dell’array è incluso nell’output.
  • Se la proprietà specificata è un oggetto, le proprietà degli oggetti vengono espanse per everyInputObject

In entrambi i casi, il Tipo di output degli oggetti corrisponderà al Tipo della proprietà espansa.

Se viene specificato il parametro della proprietà, Select-Object tenterà di aggiungere ogni selectedproperty come NoteProperty a ogni oggetto emesso.

Warning

Se si riceve l’errore: Select : La proprietà non può essere elaborata perché la proprietà<PropertyName> esiste già, considerare quanto segue.Si noti che quando si utilizza -ExpandPropertySelect-Object non può sostituire una proprietà esistente.Ciò significa:

  • Se l’oggetto espanso ha una proprietà con lo stesso nome, si verificherà un errore.
  • Se l’oggetto selezionato ha una proprietà con lo stesso nome di una proprietà Expanded objects, si verificherà un errore.
Tipo: String
Posizione: Nome
valore di Default: Nessuno
Accettare input: False
Accetta i caratteri jolly: False
Prima

Specifica il numero di oggetti per selezionare l’inizio di un array di oggetti di input.

Tipo: Int32
Posizione: Nome
valore Predefinito: Nessuno
Accettare l’input della pipeline: False
Accetta i caratteri jolly: False
Indice

Seleziona gli oggetti da una matrice basata sui loro valori di indice. Inserisci gli indici in un elenco separato da virgoleelenco. Gli indici in un array iniziano con 0, dove 0 rappresenta il primo valore e (n-1) rappresenta l’ultimo valore.

Type: Int32
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-InputObject

Specifies objects to send to the cmdlet through the pipeline. This parameter enables you to pipeobjects to Select-Object.

Quando si passano oggetti al parametro InputObject, invece di utilizzare la pipeline,Select-Object considera InputObject come un singolo oggetto, anche se il valore è una raccolta. Si consiglia di utilizzare la pipeline quando si passano raccolte a Select-Object.

Tipo: PSObject
Posizione: Nome
valore Predefinito: Nessuno
Accettare l’input della pipeline: True
Accetta i caratteri jolly: False
-Last

Specifies the number of objects to select from the end of an array of input objects.

Type: Int32
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-Property

Specifies the properties to select. Queste proprietà vengono aggiunte come membri NoteProperty agli oggetti output. I caratteri jolly sono consentiti.

Il valore del parametro Proprietà può essere una nuova proprietà calcolata. Per creare una proprietà calcolata, utilizzare una tabella hash.

le chiavi Valide sono:

  • Nome (o Etichetta) – <string>
  • Espressione <string> o <script block>

Per ulteriori informazioni, seeabout_Calculated_Properties.

Tipo: Oggetto
Posizione: 0
valore Predefinito: Nessuno
Accettare input: False
Accetta i caratteri jolly: True
Salta

Salta (non selezionare) il numero specificato di elementi. Per impostazione predefinita, il parametro Skip contadall’inizio dell’array o dell’elenco di oggetti, ma se il comando utilizza l’ultimo parametro,conta dalla fine dell’elenco o dell’array.

A differenza del parametro Index, che inizia a contare a 0, il parametro Skip inizia a 1.

Tipo: Int32
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-SkipIndex
Type: Int32
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-SkipLast

Salta (non seleziona) il numero specificato di elementi dalla fine dell’elenco o dell’array. Funziona nello stesso modo in cui si usa Skip insieme all’ultimo parametro.

A differenza del parametro Index, che inizia a contare a 0, il parametro SkipLast inizia a 1.

Tipo: Int32
Posizione: Nome
valore Predefinito: Nessuno
Accettare l’input della pipeline: False
Accetta i caratteri jolly: False
Unico

Specifica che se un sottoinsieme degli oggetti di ingresso ha le stesse proprietà e valori, solo un singlemember del sottoinsieme saranno selezionati.

Questo parametro è case-sensitive. Di conseguenza, le stringhe che differiscono solo per l’involucro dei caratteri sonoconsiderato unico.

Tipo: SwitchParameter
Posizione: Denominato
Valore predefinito: None
Accept pipeline input: False
Accept wildcard characters: False
-Wait

Indica che il cmdlet disattiva l’ottimizzazione. PowerShell esegue i comandi nell’ordine in cui appaiono nella pipeline dei comandi e consente loro di generare tutti gli oggetti. Per impostazione predefinita, se si include un comandoSelect-Object con i primi parametri o Indice in una pipeline di comandi, PowerShell interrompe il comando che genera gli oggetti non appena viene generato il numero selezionato di oggetti.

Questo parametro è stato introdotto in Windows PowerShell 3.0.

Tipo: SwitchParameter
Posizione: Nome
valore Predefinito: Nessuno
Accettare l’input della pipeline: False
Accetta i caratteri jolly: False

Ingressi

PSObject

È possibile eseguire il pipe di qualsiasi oggetto a Select-Object.

Uscite

PSObject

Note

  • È anche possibile fare riferimento alSelect-Objectcmdlet dal suo alias incorporato,select. Per ulteriori informazioni, vedere about_Aliases.

  • La funzione di ottimizzazione di Select-Object è disponibile solo per i comandi che scrivono oggetti alla pipeline mentre vengono elaborati. Non ha alcun effetto sui comandi che bufferizzano gli oggetti elaborati e li scrivono come una raccolta. Scrivere oggetti immediatamente è una best practice di progettazione cmdlet. Per ulteriori informazioni, vedere Scrivere singoli record nella pipeline Linee guida di sviluppo fortemente incoraggiate.

  • about_Calculated_Properties
  • Group-Object
  • Sort-Object
  • Where-Object

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *