Partager via


Select-Object

Sélectionne des objets ou des propriétés d’objet.

Syntaxe

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

L’applet de commande Select-Object sélectionne les propriétés spécifiées d’un objet ou d’un ensemble d’objets. Il peut également sélectionner des objets uniques, un nombre spécifié d’objets ou des objets dans une position spécifiée dans un tableau.

Pour sélectionner des objets d’une collection, utilisez les paramètres First, Last, Unique, Skipet 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 la création et le traitement d’objets qui ne sont pas utilisés.

Lorsque vous incluez une commande 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 généré, même lorsque la commande qui génère les objets apparaît avant la commande Select-Object dans le pipeline. 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, IDet 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 Get-Process applet de commande pour obtenir le processus sur l’ordinateur.

Il utilise l’applet de commande Select-Object pour générer un tableau d’instances [System.Diagnostics.ProcessModule] comme contenu dans la propriété Modules de chaque sortie d’instance de System.Diagnostics.Process par Get-Process.

Le paramètre Property de l’applet de commande Select-Object sélectionne les noms de processus. Cela ajoute une ProcessNamenoteProperty à chaque instance de [System.Diagnostics.ProcessModule] et la remplit avec la valeur de la propriété ProcessName du processus actuel.

Enfin, Format-List applet de commande est utilisée pour 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 à l’aide de la mémoire la plus élevée

Cet exemple obtient les cinq processus qui utilisent le plus de mémoire. L’applet de commande Get-Process obtient les processus sur l’ordinateur. L’applet de commande Sort-Object trie les processus en fonction de l’utilisation de la mémoire (jeu de travail), et l’applet de commande Select-Object 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 commande Sort-Object, 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 Select-Object pour obtenir des caractères uniques à partir d’un tableau de caractères.

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

a
b
c

Exemple 5 : Sélectionner les événements les plus récents et les plus anciens dans le journal des événements

Cet exemple obtient les premiers événements (les plus récents) et les derniers (les plus anciens) dans le journal des événements Windows PowerShell.

Get-EventLog obtient tous les événements dans le journal Windows PowerShell et les enregistre dans la variable $a. Ensuite, $a est redirigé vers l’applet de commande Select-Object. La commande utilise le paramètre index de pour sélectionner des événements dans le tableau d’événements de la variable . L’index du premier événement est 0. L’index du dernier événement est le nombre d’éléments dans $a moins 1.

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

Exemple 6 : Sélectionner tout mais le premier objet

Cet exemple crée une session PSSession sur chacun des ordinateurs répertoriés dans les fichiers Servers.txt, à l’exception de la première.

Select-Object sélectionne tout mais le premier ordinateur dans une liste de noms d’ordinateurs. La liste résultante des ordinateurs est définie comme valeur du paramètre ComputerName de l’applet de commande New-PSSession.

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

Exemple 7 : Renommer des fichiers et sélectionner plusieurs pour passer en revue

Cet exemple ajoute un suffixe « -ro » aux noms de base des fichiers texte qui ont l’attribut en lecture seule, puis affiche 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 redirigés vers l’applet de commande Rename-Item, qui renomme le fichier. Il utilise le paramètre passthru de pour envoyer les fichiers renommés à l’applet 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 de commande Get-ChildItem une fois 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 8 : Illustrer les complexités du paramètre -ExpandProperty

Cet exemple illustre les complexité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), 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

Exemple 9 : Créer des propriétés personnalisées sur des objets

L’exemple suivant illustre l’utilisation de 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 10 : Créer des propriétés calculées pour chaque InputObject

Cet exemple montre comment utiliser Select-Object pour ajouter des propriétés calculées à votre entrée. Le passage d’un ScriptBlock au paramètre Property entraîne d’évaluer l’expression sur chaque objet passé et d’ajouter les résultats à la sortie. Dans la ScriptBlock, vous pouvez utiliser la variable $_ pour référencer l’objet actuel dans le pipeline.

Par défaut, utilisera la chaîne ScriptBlock comme nom de la propriété. À l’aide d’unde 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

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.

Depuis PowerShell 6, il n’est plus nécessaire d’inclure le paramètre Property pour ExcludeProperty fonctionner.

Type:String[]
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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 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 d’objets sont développées pour chaque InputObject

Dans les deux cas, le type de sortie d’objets correspond à la 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 l’erreur : Sélectionner : La propriété ne peut pas être traitée, car la propriété <PropertyName> 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. Cela signifie :

  • Si l’objet développé a une propriété du même nom, une erreur se produit.
  • Si l’objet Selected a une propriété du même nom qu’une propriété d’objets développé, une erreur se produit.
Type:String
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-Index

Sélectionne 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 par 0, où 0 représente la première valeur et (n-1) représente la dernière valeur.

Type:Int32[]
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-InputObject

Spécifie les 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 le InputObject comme un seul objet, même si la valeur est une collection. Il est recommandé d’utiliser le pipeline lors du passage de regroupements à Select-Object.

Type:PSObject
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:True
Accepter les caractères génériques: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
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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.

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
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:True

-Skip

Ignore (ne sélectionne pas) le nombre spécifié d’éléments. Par défaut, le Ignorer paramètre compte à partir du début du tableau ou de la liste d’objets, mais si la commande utilise le paramètre Last, il compte à partir de la fin de la liste ou du tableau.

Contrairement au paramètre index de , qui commence à compter à 0, le paramètre Ignorer commence à 1.

Type:Int32
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-SkipIndex

Type:Int32[]
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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 façon que l’utilisation de Ignorer avec paramètre Last.

Contrairement au paramètre index , qui commence à compter à 0, le paramètre SkipLast commence à 1.

Type:Int32
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-Unique

Spécifie que si un sous-ensemble des objets d’entrée a des propriétés et des valeurs identiques, seul un seul membre du sous-ensemble sera sélectionné.

Ce paramètre respecte la casse. Par conséquent, les chaînes qui diffèrent uniquement dans la casse de caractères sont considérées comme uniques.

Type:SwitchParameter
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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 commande 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 généré.

Ce paramètre a été introduit dans Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

Entrées

PSObject

Vous pouvez diriger n’importe quel objet vers Select-Object.

Sorties

PSObject

Notes

  • Vous pouvez également faire référence à l’applet de commande Select-Object par son alias intégré, select. Pour plus d’informations, consultez about_Aliases.

  • 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 aucun effet sur les commandes qui ont traité les objets et les écrivent en tant que collection. L’écriture d’objets immédiatement est une bonne pratique de conception d’applet de commande. Pour plus d’informations, consultez écrire des enregistrements uniques dans le de pipeline dans instructions de développement fortement encouragées.