Select-Object
Seleziona oggetti o proprietà di oggetti.
Sintassi
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>]
Descrizione
Il Select-Object
cmdlet seleziona le proprietà specificate di un oggetto o di un set di oggetti.
Può inoltre selezionare oggetti univoci, un numero specificato di oggetti o gli oggetti che si trovano in una posizione specificata all'interno di una matrice.
Per selezionare oggetti di una raccolta, usare i parametri First, Last, Unique, Skip e Index. Per selezionare proprietà di oggetti, usare il parametro Property.
Quando si selezionano le proprietà, Select-Object
restituisce nuovi oggetti con solo le proprietà specificate.
A partire da Windows PowerShell 3.0, Select-Object
include una funzionalità di ottimizzazione che impedisce ai comandi di creare ed elaborare oggetti non usati.
Quando si include un Select-Object
comando con i parametri First o Index in una pipeline di comandi, PowerShell arresta il comando che genera gli oggetti non appena viene generato il numero selezionato di oggetti, anche quando il comando che genera gli oggetti viene visualizzato prima del Select-Object
comando nella pipeline.
Per disattivare questo comportamento di ottimizzazione, usare il parametro Wait.
Esempio
Esempio 1: Selezionare gli oggetti per proprietà
Questo comando 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 comando ottiene informazioni sui moduli usati dai processi nel computer.
Usa il Get-Process
cmdlet per ottenere il processo nel computer.
Usa il Select-Object
cmdlet per restituire una matrice di [System.Diagnostics.ProcessModule]
istanze come contenuto nella proprietà Modules di ogni System.Diagnostics.Process
output dell'istanza da Get-Process
.
Il comando usa il parametro Property del Select-Object
cmdlet per selezionare i nomi dei processi. Questo aggiunge un oggetto ProcessName
NoteProperty
a ogni [System.Diagnostics.ProcessModule]
istanza e lo popola con il valore della proprietà ProcessName dei processi correnti.
Il comando usa il Format-List
cmdlet per visualizzare il nome e i moduli in ogni processo in un elenco.
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
...
Esempio 3: Selezionare i processi usando la maggior parte della memoria
Questo comando ottiene i cinque processi che stanno usando la maggior parte della memoria.
Il Get-Process
cmdlet ottiene i processi nel computer.
Il Sort-Object
cmdlet ordina i processi in base all'utilizzo della memoria (working set) e il Select-Object
cmdlet seleziona solo gli ultimi cinque membri della matrice di oggetti risultante.
Il parametro Wait non è obbligatorio nei comandi che includono il Sort-Object
cmdlet 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 durante l'elaborazione.
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
Esempio 4: Selezionare caratteri univoci da una matrice
Questo comando usa il parametro Unique di Select-Object
per ottenere caratteri univoci da una matrice di caratteri.
"a","b","c","a","a","a" | Select-Object -Unique
a
b
c
Esempio 5: Selezionare gli eventi più recenti e meno recenti nel registro eventi
Questi comandi ottengono i primi (più recenti) e gli ultimi eventi (meno recenti) nel registro eventi Windows PowerShell.
Il comando usa il Get-EventLog
cmdlet per ottenere tutti gli eventi nel log di Windows PowerShell.
Li salva nella $a
variabile .
Il secondo comando usa un operatore pipeline (|) per inviare gli eventi al $a
Select-Object
cmdlet .
Il Select-Object
comando usa il parametro Index per selezionare gli eventi dalla matrice di eventi nella $a
variabile . L'indice del primo evento è 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 ma il primo oggetto
Questo comando crea una nuova sessione PSSession in ognuno dei computer elencati nel file Servers.txt, ad eccezione del primo.
Questo comando usa il Select-Object
cmdlet per selezionare tutto, ma il primo computer in un elenco di nomi di computer.
L'elenco risultante dei computer viene impostato come valore del parametro ComputerName del New-PSSession
cmdlet.
New-PSSession -ComputerName (Get-Content Servers.txt | Select-Object -Skip 1)
Esempio 7: Rinominare i file e selezionare diversi da rivedere
Questo comando aggiunge un suffisso "-ro" ai nomi di base dei file di testo per cui è impostato l'attributo di sola lettura e visualizza quindi i primi cinque file per mostrare all'utente un esempio dell'effetto.
Il comando usa il parametro dinamico ReadOnly del Get-ChildItem
cmdlet per FileSystem per ottenere i file di sola lettura.
Usa un operatore pipeline (|) per inviare i file al Rename-Item
cmdlet , che rinomina il file.
Usa il parametro Passthru di Rename-Item
per inviare i file rinominati al Select-Object
cmdlet , che seleziona il primo 5 per la visualizzazione.
Il parametro Wait di Select-Object
impedisce a PowerShell di arrestare il Get-ChildItem
cmdlet dopo che ottiene i primi cinque file di testo di sola lettura.
Senza questo parametro verrebbero rinominati solo i primi cinque file di sola lettura.
Get-ChildItem *.txt -ReadOnly | Rename-Item -NewName {$_.BaseName + "-ro.txt"} -PassThru | Select-Object -First 5 -Wait
Esempio 8: Illustrare le complessità del parametro -ExpandProperty
In questo esempio vengono illustrate le complessità del parametro ExpandProperty .
Si noti che l'output generato è una matrice di [System.Int32]
istanze. Le istanze sono conformi alle regole di formattazione standard della visualizzazione output.
Ciò vale per tutte le proprietà Espanse . Se gli oggetti restituiti hanno un formato standard specifico, la proprietà espansa potrebbe non essere visibile.
# 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
Esempio 9: Create proprietà personalizzate sugli oggetti
Nell'esempio seguente viene illustrato l'utilizzo Select-Object
di per aggiungere una proprietà personalizzata a qualsiasi oggetto .
Quando si specifica un nome di proprietà che non esiste, Select-Object
crea tale proprietà come NotaProperty per ogni oggetto passato.
$customObject = 1 | Select-Object -Property MyCustomProperty
$customObject.MyCustomProperty = "New Custom Property"
$customObject
MyCustomProperty
----------------
New Custom Property
Esempio 10: Create proprietà calcolate per ogni InputObject
In questo esempio viene illustrato l'uso Select-Object
di per aggiungere proprietà calcolate all'input.
Il passaggio di un oggetto ScriptBlock al parametro Property determina Select-Object
la valutazione dell'espressione in ogni oggetto passato e l'aggiunta dei risultati all'output. All'interno di ScriptBlock è possibile usare la $_
variabile per fare riferimento all'oggetto corrente nella pipeline.
Per impostazione predefinita, Select-Object
userà la stringa ScriptBlock come nome della proprietà.
Usando una tabella Hash, è possibile etichettare l'output di ScriptBlock come proprietà personalizzata aggiunta a ogni oggetto. È possibile aggiungere più proprietà calcolate a ogni oggetto passato a 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
Parametri
-ExcludeProperty
Specifica le proprietà che questo cmdlet esclude dall'operazione. I caratteri jolly sono consentiti. Questo parametro è valido solo quando il comando include anche il parametro Property.
Type: | String[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-ExpandProperty
Specifica una proprietà da selezionare e indica che deve essere effettuato un tentativo di espandere tale proprietà.
- Se la proprietà specificata è una matrice, ogni valore della matrice viene incluso nell'output.
- Se la proprietà specificata è un oggetto, le proprietà degli oggetti vengono espanse per ogni InputObject
In entrambi i casi, l'output Tipo di oggetti corrisponderà al tipo della proprietà espansa.
Se viene specificato il parametro Property , Select-Object
tenterà di aggiungere ogni proprietà selezionata come NotaProperty a ogni oggetto restituito.
Avviso
Se viene visualizzato l'errore: Selezionare : Impossibile elaborare la proprietà perché la proprietà <PropertyName>
esiste già, tenere presente quanto segue.
Si noti che quando si usa -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 Selected ha una proprietà con lo stesso nome di una proprietà Oggetti espansi , si verificherà un errore.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-First
Specifica il numero di oggetti da selezionare dall'inizio di una matrice di oggetti di input.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Index
Seleziona gli oggetti di una matrice in base ai valori di indice. Immettere gli indici in un elenco delimitato da virgole.
Gli indici in una matrice iniziano per 0, dove 0 rappresenta il primo valore e (n-1) rappresenta l'ultimo valore.
Type: | Int32[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Specifica gli oggetti da inviare al cmdlet tramite la pipeline.
Questo parametro consente di inviare tramite pipe gli oggetti a Select-Object
.
Quando si passano oggetti al parametro InputObject , anziché usare la pipeline, Select-Object
considera InputObject come un singolo oggetto, anche se il valore è una raccolta. È consigliabile usare la pipeline quando si passano raccolte a Select-Object
.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Last
Specifica il numero di oggetti da selezionare dalla fine di una matrice di oggetti di input.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Property
Specifica le proprietà da selezionare. Queste proprietà vengono aggiunte come membri NoteProperty agli oggetti di output. I caratteri jolly sono consentiti.
Il valore del parametro Property può essere una nuova proprietà calcolata. Per creare una proprietà calcolata, usare una tabella hash. Le chiavi valide sono:
- Nome (o Etichetta):
<string>
- Espressione
<string>
o<script block>
Type: | Object[] |
Position: | 0 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-Skip
Ignora (non seleziona) il numero specificato di elementi. Per impostazione predefinita, il parametro Skip conta dall'inizio della matrice o dell'elenco di oggetti, ma se il comando usa il parametro Last , viene conteggiato dalla fine dell'elenco o della matrice.
A differenza del parametro Index, che inizia il conteggio da 0, il parametro Skip inizia da 1.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SkipLast
Ignora (non seleziona) il numero specificato di elementi dalla fine dell'elenco o della matrice. Funziona allo stesso modo dell'uso di Skip insieme al parametro Last .
A differenza del parametro Index , che inizia il conteggio a 0, il parametro SkipLast inizia da 1.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Unique
Specifica che se un subset degli oggetti di input ha proprietà e valori identici, verrà selezionato solo un membro del subset.
In questo parametro viene fatta distinzione tra maiuscole e minuscole. Di conseguenza, le stringhe che differiscono solo nell'uso delle maiuscole e minuscole vengono considerate univoche.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Wait
Indica che il cmdlet disattiva l'ottimizzazione.
PowerShell esegue i comandi nell'ordine in cui vengono visualizzati nella pipeline di comando e consente di generare tutti gli oggetti.
Per impostazione predefinita, se si include un Select-Object
comando con i parametri First o Index in una pipeline di comando, PowerShell arresta il comando che genera gli oggetti non appena viene generato il numero selezionato di oggetti.
Questo parametro è stato introdotto in Windows PowerShell 3.0.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Input
È possibile inviare tramite pipe qualsiasi oggetto a Select-Object
.
Output
Note
- È anche possibile fare riferimento al cmdlet tramite il
Select-Object
relativo alias predefinito,select
. Per altre informazioni, vedere about_Aliases. - La funzionalità di ottimizzazione di
Select-Object
è disponibile solo per i comandi che scrivono oggetti nella pipeline durante l'elaborazione. Non ha alcun effetto sui comandi che memorizzano nel buffer gli oggetti elaborati e li scrivono come una raccolta. La scrittura immediata degli oggetti è una procedura consigliata di progettazione dei cmdlet. Per altre informazioni, vedere Scrivere record singoli nella pipeline in Linee guida per lo sviluppo fortemente consigliate in MSDN Library.