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-Object
per produrre un array di istanze come contenuto nella proprietà Modules di ogni
System.Diagnostics.Process
instanceoutput 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-ChildItem
dopo 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
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 |
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 -ExpandProperty
Select-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 |
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 |
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 |
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 |
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 |
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 (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 |
Type: | Int32 |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
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 |
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 |
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 al
Select-Object
cmdlet 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