Select-Object
Sélectionne des objets ou des propriétés d'objet.
Syntax
Select-Object
[[-Property] <Object[]>]
[-InputObject <psobject>]
[-ExcludeProperty <string[]>]
[-ExpandProperty <string>]
[-Unique]
[-Last <int>]
[-First <int>]
[-Skip <int>]
[-Wait]
[<CommonParameters>]
Select-Object
[[-Property] <Object[]>]
[-InputObject <psobject>]
[-ExcludeProperty <string[]>]
[-ExpandProperty <string>]
[-Unique]
[-SkipLast <int>]
[<CommonParameters>]
Select-Object
[-InputObject <psobject>]
[-Unique]
[-Wait]
[-Index <int[]>]
[<CommonParameters>]
Select-Object
[-InputObject <psobject>]
[-Unique]
[-SkipIndex <int[]>]
[<CommonParameters>]
Description
L’applet Select-Object
de commande sélectionne les propriétés spécifiées d’un objet ou d’un ensemble d’objets. Elle peut également sélectionner des objets uniques, un nombre spécifié d'objets ou des objets à une position spécifiée dans un tableau.
Pour sélectionner des objets dans une collection, utilisez les paramètres First, Last, Unique, Skip et Index. Pour sélectionner des propriétés d'objet, utilisez le paramètre Property. Lorsque vous sélectionnez des propriétés, Select-Object
retourne de nouveaux objets qui ont uniquement les propriétés spécifiées.
À compter de Windows PowerShell 3.0, Select-Object
inclut une fonctionnalité d’optimisation qui empêche les commandes de créer et de traiter des objets qui ne sont pas utilisés.
Lorsque vous utilisez Select-Object
avec les paramètres First ou Index dans un pipeline de commandes, PowerShell arrête la commande qui génère les objets dès que le nombre d’objets sélectionné est atteint. Pour désactiver ce comportement d'optimisation, utilisez le paramètre Wait.
Exemples
Exemple 1 : Sélectionner des objets par propriété
Cet exemple crée des objets qui ont les propriétés Name, ID et working set (WS) des objets de processus.
Get-Process | Select-Object -Property ProcessName, Id, WS
Exemple 2 : Sélectionner des objets par propriété et mettre en forme les résultats
Cet exemple obtient des informations sur les modules utilisés par les processus sur l’ordinateur. Il utilise l’applet Get-Process
de commande pour obtenir le processus sur l’ordinateur.
Il utilise l’applet Select-Object
de commande pour générer un tableau d’instances [System.Diagnostics.ProcessModule]
comme contenu dans la propriété Modules de chaque System.Diagnostics.Process
instance sortie par Get-Process
.
Le paramètre Property de l’applet Select-Object
de commande sélectionne les noms de processus. Cela ajoute une ProcessName
propriété NoteProperty à chaque [System.Diagnostics.ProcessModule]
instance et la remplit avec la valeur de la propriété ProcessName du processus actuel.
Enfin, Format-List
l’applet de commande permet d’afficher le nom et les modules de chaque processus dans une liste.
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
...
Exemple 3 : Sélectionner des processus qui utilisent le plus de mémoire
Cet exemple obtient les cinq processus qui utilisent le plus de mémoire. L’applet Get-Process
de commande obtient les processus sur l’ordinateur. L’applet Sort-Object
de commande trie les processus en fonction de l’utilisation de la mémoire (ensemble de travail), et l’applet Select-Object
de commande sélectionne uniquement les cinq derniers membres du tableau d’objets résultant.
Le paramètre Wait n’est pas obligatoire dans les commandes qui incluent l’applet de Sort-Object
commande, car Sort-Object
traite tous les objets, puis retourne une collection. L’optimisation Select-Object
est disponible uniquement pour les commandes qui retournent des objets individuellement au fur et à mesure qu’ils sont traités.
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
Exemple 4 : Sélectionner des caractères uniques à partir d’un tableau
Cet exemple utilise le paramètre Unique de pour obtenir des Select-Object
caractères uniques à partir d’un tableau de caractères.
"a","b","c","a","a","a" | Select-Object -Unique
a
b
c
Exemple 5 : utilisation de « -Unique » avec d’autres paramètres
Le paramètre Unique filtre les valeurs après l’application d’autres Select-Object
paramètres. Par exemple, si vous utilisez le paramètre First pour sélectionner le premier nombre d’éléments d’un tableau, Unique est appliqué uniquement aux valeurs sélectionnées et non à l’ensemble du tableau.
"a","a","b","c" | Select-Object -First 2 -Unique
a
Dans cet exemple, first sélectionne "a","a"
comme les 2 premiers éléments du tableau. Unique est appliqué à "a","a"
et retourne a
comme valeur unique.
Exemple 6 : Sélectionner les événements les plus récents et les plus anciens dans le journal des événements
Cet exemple obtient les premiers (les plus récents) et les derniers (les plus anciens) événements dans le journal des événements Windows PowerShell.
Get-WinEvent
obtient tous les événements dans le journal Windows PowerShell et les enregistre dans la $a
variable.
Ensuite, $a
est dirigé vers l’applet de Select-Object
commande. La Select-Object
commande utilise le paramètre Index pour sélectionner des événements dans le tableau d’événements de la $a
variable. L'index du premier événement est 0. L’index du dernier événement est le nombre d’éléments en $a
moins 1.
$a = Get-WinEvent -LogName "Windows PowerShell"
$a | Select-Object -Index 0, ($a.count - 1)
Exemple 7 : sélectionner tout sauf le premier objet
Cet exemple crée une session PSSession sur chacun des ordinateurs répertoriés dans les fichiers Servers.txt, à l’exception du premier.
Select-Object
sélectionne tous les ordinateurs sauf le premier dans une liste de noms d’ordinateurs. La liste d’ordinateurs résultante est définie comme valeur du paramètre ComputerName de l’applet New-PSSession
de commande.
New-PSSession -ComputerName (Get-Content Servers.txt | Select-Object -Skip 1)
Exemple 8 : Renommer des fichiers et en sélectionner plusieurs à examiner
Cet exemple montre comment ajouter un suffixe « -ro » aux noms de base des fichiers texte qui ont l’attribut lecture seule, puis afficher les cinq premiers fichiers afin que l’utilisateur puisse voir un exemple de l’effet.
Get-ChildItem
utilise le paramètre dynamique ReadOnly pour obtenir des fichiers en lecture seule. Les fichiers résultants sont dirigés vers l’applet Rename-Item
de commande, qui renomme le fichier. Il utilise le paramètre PassThru de Rename-Item
pour envoyer les fichiers renommés à l’applet Select-Object
de commande, qui sélectionne les 5 premiers pour l’affichage.
Le paramètre Wait de Select-Object
empêche PowerShell d’arrêter l’applet Get-ChildItem
de commande une fois qu’il obtient les cinq premiers fichiers texte en lecture seule. Sans ce paramètre, seuls les cinq premiers fichiers en lecture seule seraient renommés.
Get-ChildItem *.txt -ReadOnly |
Rename-Item -NewName {$_.BaseName + "-ro.txt"} -PassThru |
Select-Object -First 5 -Wait
Exemple 9 : Afficher les subtilités du paramètre -ExpandProperty
Cet exemple montre les subtilités du paramètre ExpandProperty .
Notez que la sortie générée était un tableau d’instances [System.Int32]
. Les instances sont conformes aux règles de mise en forme standard de la vue sortie. Cela est vrai pour toutes les propriétés développées . Si les objets générés ont un format standard spécifique, la propriété développée peut ne pas être visible.
# 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
Exemple 10 : Create propriétés personnalisées sur les objets
L’exemple suivant illustre l’utilisation Select-Object
pour ajouter une propriété personnalisée à n’importe quel objet.
Lorsque vous spécifiez un nom de propriété qui n’existe pas, Select-Object
crée cette propriété en tant que NoteProperty sur chaque objet passé.
$customObject = 1 | Select-Object -Property MyCustomProperty
$customObject.MyCustomProperty = "New Custom Property"
$customObject
MyCustomProperty
----------------
New Custom Property
Exemple 11 : Create propriétés calculées pour chaque InputObject
Cet exemple illustre l’utilisation Select-Object
pour ajouter des propriétés calculées à votre entrée. Le passage d’un ScriptBlock au paramètre Property entraîne Select-Object
l’évaluation de l’expression sur chaque objet transmis et l’ajout des résultats à la sortie. Dans scriptBlock, vous pouvez utiliser la $_
variable pour référencer l’objet actuel dans le pipeline.
Par défaut, Select-Object
utilise la chaîne ScriptBlock comme nom de la propriété. À l’aide d’une table de hachage, vous pouvez étiqueter la sortie de votre ScriptBlock en tant que propriété personnalisée ajoutée à chaque objet. Vous pouvez ajouter plusieurs propriétés calculées à chaque objet passé à 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
Exemple 12 : Sélectionner des clés de hachage sans utiliser de propriétés calculées
À partir de PowerShell 6, Select-Object
prend en charge la sélection des clés d’entrée de hachage en tant que propriétés. L’exemple suivant sélectionne les weight
clés et name
sur une table de hachage d’entrée et affiche la sortie.
@{ name = 'a' ; weight = 7 } | Select-Object -Property name, weight
name weight
---- ------
a 7
Paramètres
-ExcludeProperty
Spécifie les propriétés que cette applet de commande exclut de l’opération. Les caractères génériques sont autorisés.
À compter de PowerShell 6, il n’est plus nécessaire d’inclure le paramètre Property pour qu’ExcludeProperty fonctionne.
Type: | String[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-ExpandProperty
Spécifie une propriété à sélectionner et indique qu'une tentative doit être effectuée pour développer cette propriété. Si le pipeline d’objet d’entrée n’a pas la propriété nommée, Select-Object
retourne une erreur.
- Si la propriété spécifiée est un tableau, chaque valeur du tableau est incluse dans la sortie.
- Si la propriété spécifiée est un objet, les propriétés des objets sont développées pour chaque InputObject
Dans les deux cas, le type des objets de sortie correspond au type de la propriété développée.
Si le paramètre Property est spécifié, Select-Object
tente d’ajouter chaque propriété sélectionnée en tant que NoteProperty à chaque objet généré.
Avertissement
Si vous recevez une erreur indiquant qu’une propriété ne peut pas être traitée parce qu’une propriété portant ce nom existe déjà, tenez compte des éléments suivants. Notez que lorsque vous utilisez ExpandProperty, Select-Object
ne peut pas remplacer une propriété existante. En d’autres termes :
- Si l’objet développé a une propriété du même nom, la commande retourne une erreur.
- Si l’objet Selected a une propriété du même nom que la propriété d’un objet Développé , la commande retourne une erreur.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-First
Spécifie le nombre d'objets à sélectionner à partir du début d'un tableau d'objets d'entrée.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Index
Sélectionne des objets dans un tableau en fonction de leurs valeurs d'index. Entrez les index dans une liste séparée par des virgules. Les index d'un tableau commencent à 0, où 0 représente la première valeur et (n-1) représente la dernière valeur.
Type: | Int32[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Spécifie des objets à envoyer à l'applet de commande via le pipeline. Ce paramètre vous permet de diriger des objets vers Select-Object
.
Lorsque vous passez des objets au paramètre InputObject , au lieu d’utiliser le pipeline, Select-Object
traite l’objet InputObject comme un objet unique, même si la valeur est une collection. Il est recommandé d’utiliser le pipeline lors du passage de collections à Select-Object
.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Last
Spécifie le nombre d'objets à sélectionner à partir de la fin d'un tableau d'objets d'entrée.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Property
Spécifie les propriétés à sélectionner. Ces propriétés sont ajoutées en tant que membres NoteProperty aux objets de sortie. Les caractères génériques sont autorisés. Si la propriété de l’objet d’entrée n’est pas nommée, la valeur de la nouvelle propriété NoteProperty est définie sur $null
.
La valeur du paramètre Property peut être une nouvelle propriété calculée. Pour créer une propriété calculée, utilisez une table de hachage.
Les clés valides sont les suivantes :
- Nom (ou Étiquette) -
<string>
- Expression -
<string>
ou<script block>
Pour plus d’informations, consultez about_Calculated_Properties.
Type: | Object[] |
Position: | 0 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-Skip
Ignore (ne sélectionne pas) le nombre d’éléments spécifié. Par défaut, le paramètre Skip compte à partir du début de la collection d’objets. Si la commande utilise le paramètre Last , elle compte à partir de la fin de la collection.
Contrairement au paramètre Index, qui commence le comptage à 0, le paramètre Skip commence à 1.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SkipIndex
Ignore (ne sélectionne pas) les objets d’un tableau en fonction de leurs valeurs d’index. Entrez les index dans une liste séparée par des virgules. Les index d'un tableau commencent à 0, où 0 représente la première valeur et (n-1) représente la dernière valeur.
Ce paramètre a été introduit dans Windows PowerShell 6.0.
Type: | Int32[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SkipLast
Ignore (ne sélectionne pas) le nombre spécifié d’éléments à partir de la fin de la liste ou du tableau. Fonctionne de la même manière que l’utilisation de Skip avec le paramètre Last .
Contrairement au paramètre Index , qui commence à compter à 0, le paramètre SkipLast commence à 1.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Unique
Spécifie que si un sous-ensemble des objets d’entrée a des propriétés et des valeurs identiques, un seul membre du sous-ensemble doit être sélectionné.
Unique sélectionne les valeurs après l’application d’autres paramètres de filtrage.
Ce paramètre respecte la casse. Par conséquent, les chaînes qui diffèrent uniquement par la casse sont considérées comme uniques.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Wait
Indique que l’applet de commande désactive l’optimisation. PowerShell exécute des commandes dans l’ordre dans lequel elles apparaissent dans le pipeline de commandes et leur permet de générer tous les objets. Par défaut, si vous incluez une Select-Object
commande avec les paramètres First ou Index dans un pipeline de commandes, PowerShell arrête la commande qui génère les objets dès que le nombre d’objets sélectionné est généré.
Ce paramètre a été introduit dans Windows PowerShell 3.0.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Entrées
Vous pouvez diriger des objets vers cette applet de commande.
Sorties
Cette applet de commande retourne les objets d’entrée avec uniquement les propriétés sélectionnées.
Notes
PowerShell inclut les alias suivants pour Select-Object
:
- Toutes les plateformes :
select
La fonctionnalité d’optimisation de Select-Object
est disponible uniquement pour les commandes qui écrivent des objets dans le pipeline au fur et à mesure qu’ils sont traités. Elle n'a pas d'effet sur les commandes qui placent les objets traités dans une mémoire tampon et les écrivent sous forme de collection. Écrire immédiatement les objets est une pratique recommandée dans la conception des applets de commande. Pour plus d’informations, consultez Écrire des enregistrements uniques dans le pipeline dans les instructions de développement fortement encouragés.