À propos des propriétés calculéesAbout calculated properties

Description courteShort Description

PowerShell offre la possibilité d’ajouter dynamiquement de nouvelles propriétés et de modifier la mise en forme de la sortie des objets dans le pipeline.PowerShell provides the ability to dynamically add new properties and alter the formatting of objects output to the pipeline.

Description longueLong Description

Un certain nombre d’applets de commande PowerShell transforment, agrègent ou traitent des objets d’entrée en objets de sortie à l’aide de paramètres qui permettent d’ajouter de nouvelles propriétés à ces objets de sortie.A number of PowerShell cmdlets transform, aggregate, or process input objects into output objects using parameters that allow the addition of new properties to those output objects. Ces paramètres peuvent être utilisés pour générer de nouvelles propriétés calculées sur les objets de sortie en fonction des valeurs des objets d’entrée.These parameters can be used to generate new, calculated properties on output objects based on the values of input objects. La propriété calculée est définie par une Hashtable contenant des paires clé-valeur qui spécifient le nom de la nouvelle propriété, une expression pour calculer la valeur et des informations de mise en forme facultatives.The calculated property is defined by a hashtable containing key-value pairs that specify the name of the new property, an expression to calculate the value, and optional formatting information.

Applets de commande prises en chargeSupported cmdlets

Les applets de commande suivantes prennent en charge les valeurs de propriété calculées pour le paramètre Property .The following cmdlets support calculated property values for the Property parameter. Les Format-* applets de commande prennent également en charge les valeurs calculées pour le paramètre GroupBy .The Format-* cmdlets also support calculated values for the GroupBy parameter.

La liste suivante détaille les applets de commande qui prennent en charge les propriétés calculées et les paires clé-valeur prises en charge par chaque applet de commande.The following list itemizes the cmdlets that support calculated properties and the key-value pairs that are supported by each cmdlet.

  • Compare-Object

    • expression
  • ConvertTo-Html

    • name/label -facultatif (ajouté dans PowerShell 6. x)name/label - optional (added in PowerShell 6.x)
    • expression
    • width -facultatifwidth - optional
    • alignment -facultatifalignment - optional
  • Format-Custom

    • expression
    • depth -facultatifdepth - optional
  • Format-List

    • name/label -facultatifname/label - optional
    • expression
    • formatstring -facultatifformatstring - optional

    Ce même jeu de paires clé-valeur s’applique également aux valeurs de propriété calculées transmises au paramètre GroupBy pour toutes les Format-* applets de commande.This same set of key-value pairs also apply to calculated property values passed to the GroupBy parameter for all Format-* cmdlets.

  • Format-Table

    • name/label -facultatifname/label - optional
    • expression
    • formatstring -facultatifformatstring - optional
    • width -facultatifwidth - optional
    • alignment -facultatifalignment - optional
  • Format-Wide

    • expression
    • formatstring -facultatifformatstring - optional
  • Group-Object

    • expression
  • Measure-Object

    • Ne prend en charge qu’un bloc de script pour l’expression, et non une Hashtable.Only supports a script block for the expression, not a hashtable.
    • Non pris en charge dans PowerShell 5,1 et versions antérieures.Not supported in PowerShell 5.1 and older.
  • Select-Object

    • name/label -facultatifname/label - optional
    • expression
  • Sort-Object

    • expression
    • ascending/descending -facultatifascending/descending - optional

Notes

La valeur de expression peut être un bloc de script au lieu d’une Hashtable.The value of the expression can be a script block instead of a hashtable. Pour plus d’informations, consultez la section Remarques .For more information, see the Notes section.

Définitions de clé de la HashtableHashtable key definitions

  • name/label -Spécifie le nom de la propriété en cours de création.name/label - Specifies the name of the property being created. Vous pouvez utiliser name ou son alias, label , interchangeable.You can use name or its alias, label, interchangeably.
  • expression : Bloc de script utilisé pour calculer la valeur de la nouvelle propriété.expression - A script block used to calculate the value of the new property.
  • alignment -Utilisé par les applets de commande qui produisent une sortie tabulaire pour définir la manière dont les valeurs sont affichées dans une colonne.alignment - Used by cmdlets that produce tabular output to define how the values are displayed in a column. La valeur doit être 'left' , 'center' ou 'right' .The value must be 'left', 'center', or 'right'.
  • formatstring : Spécifie une chaîne de format qui définit la façon dont la valeur est mise en forme pour la sortie.formatstring - Specifies a format string that defines how the value is formatted for output. Pour plus d’informations sur les chaînes de format, consultez types de format dans .net.For more information about format strings, see Format types in .NET.
  • width -Spécifie la largeur maximale d’une colonne dans une table lorsque la valeur est affichée.width - Specifies the maximum width column in a table when the value is displayed. La valeur doit être supérieure à 0 .The value must be greater than 0.
  • depth -Le paramètre Depth de Format-Custom spécifie la profondeur d’expansion pour toutes les propriétés.depth - The Depth parameter of Format-Custom specifies the depth of expansion for all properties. La depth clé vous permet de spécifier la profondeur d’expansion par propriété.The depth key allows you to specify the depth of expansion per property.
  • ascending / descending -Vous permet de spécifier l’ordre de tri pour une ou plusieurs propriétés.ascending / descending - Allows you to specify the order of sorting for one or more properties. Il s’agit de valeurs booléennes.These are boolean values.

Les clés Hashtable n’ont pas besoin d’être épelées tant que le préfixe de nom spécifié n’est pas ambigu.The hashtable keys need not be spelled out as long as the specified name prefix is unambiguous. Par exemple, n peut être utilisé à la place de Name et e peut être utilisé à la place de Expression .For example, n can be used in lieu of Name and e can be used in lieu of Expression.

ExemplesExamples

Compare-ObjectCompare-Object

Avec les propriétés calculées, vous pouvez contrôler la façon dont les propriétés des objets d’entrée sont comparées.With calculated properties, you can control how the properties of the input objects are compared. Dans cet exemple, au lieu de comparer directement les valeurs, les valeurs sont comparées au résultat de l’opération arithmétique (modulo de 2).In this example, rather than comparing the values directly, the values are compared to the result of the arithmetic operation (modulus of 2).

Compare-Object @{p=1} @{p=2} -property @{ Expression = { $_.p % 2 } }
 $_.p % 2  SideIndicator
---------- -------------
         0 =>
         1 <=

ConvertTo-HtmlConvertTo-Html

ConvertTo-Html peut convertir une collection d’objets en tableau HTML.ConvertTo-Html can convert a collection of objects to an HTML table. Les propriétés calculées vous permettent de contrôler la façon dont la table est présentée.Calculated properties allow you to control how the table is presented.

Get-Alias |
  ConvertTo-Html Name,
                 Definition,
                 @{
                    name='ParameterCount'
                    expr={$_.Parameters.Keys.Count}
                    align='center'
                 } |
    Out-File .\aliases.htm -Force

Cet exemple crée une table HTML contenant une liste d’alias PowerShell et les paramètres de nombre pour chaque commande avec alias.This example creates an HTML table containing a list of PowerShell aliases and the number parameters for each aliased command. Les valeurs de la colonne ParameterCount sont centrées.The values of ParameterCount column are centered.

Format-CustomFormat-Custom

Format-Custom fournit une vue personnalisée d’un objet dans un format semblable à une définition de classe.Format-Custom provides a custom view of an object in a format similar to a class definition. Les objets plus complexes peuvent contenir des membres profondément imbriqués avec des types complexes.More complex objects can contain members that are deeply nested with complex types. Le paramètre Depth de Format-Custom spécifie la profondeur d’expansion pour toutes les propriétés.The Depth parameter of Format-Custom specifies the depth of expansion for all properties. La depth clé vous permet de spécifier la profondeur d’expansion par propriété.The depth key allows you to specify the depth of expansion per property.

Dans cet exemple, la depth clé simplifie la sortie personnalisée pour l' Get-Date applet de commande.In this example, the depth key simplifies the custom output for the Get-Date cmdlet. Get-Date retourne un objet DateTime .Get-Date returns a DateTime object. La propriété de Date de cet objet est également un objet DateTime , de sorte que l’objet est imbriqué.The Date property of this object is also a DateTime object, so the object is nested.

Get-Date | Format-Custom @{expr={$_.Date};depth=1},TimeOfDay
class DateTime
{
  $_.Date =
    class DateTime
    {
      Date = 8/7/2020 12:00:00 AM
      Day = 7
      DayOfWeek = Friday
      DayOfYear = 220
      Hour = 0
      Kind = Local
      Millisecond = 0
      Minute = 0
      Month = 8
      Second = 0
      Ticks = 637323552000000000
      TimeOfDay = 00:00:00
      Year = 2020
      DateTime = Friday, August 07, 2020 12:00:00 AM
    }
  TimeOfDay =
    class TimeSpan
    {
      Ticks = 435031592302
      Days = 0
      Hours = 12
      Milliseconds = 159
      Minutes = 5
      Seconds = 3
      TotalDays = 0.503508787386574
      TotalHours = 12.0842108972778
      TotalMilliseconds = 43503159.2302
      TotalMinutes = 725.052653836667
      TotalSeconds = 43503.1592302
    }
}

Format-ListFormat-List

Dans cet exemple, nous utilisons des propriétés calculées pour modifier le nom et le format de la sortie de Get-ChildItem .In this example, we use calculated properties to change the name and format of the output from Get-ChildItem.

Get-ChildItem *.json -File |
  Format-List Fullname,
              @{
                 name='Modified'
                 expression={$_.LastWriteTime}
                 formatstring='O'
              },
              @{
                 name='Size'
                 expression={$_.Length/1KB}
                 formatstring='N2'
              }
FullName : C:\Git\PS-Docs\PowerShell-Docs\.markdownlint.json
Modified : 2020-07-23T10:26:28.4092457-07:00
Size     : 2.40

FullName : C:\Git\PS-Docs\PowerShell-Docs\.openpublishing.publish.config.json
Modified : 2020-07-23T10:26:28.4092457-07:00
Size     : 2.25

FullName : C:\Git\PS-Docs\PowerShell-Docs\.openpublishing.redirection.json
Modified : 2020-07-27T13:05:24.3887629-07:00
Size     : 324.60

Format-TableFormat-Table

Dans cet exemple, la propriété calculée ajoute une propriété de type utilisée pour classifier les fichiers selon le type de contenu.In this example, the calculated property adds a Type property used to classify the files by the content type.

Get-ChildItem -File |
  Sort-Object extension |
    Format-Table Name, Length -GroupBy @{
      name='Type'
      expression={
        switch ($_.extension) {
          '.md'   {'Content'}
          ''      {'Metacontent'}
          '.ps1'  {'Automation'}
          '.yml'  {'Automation'}
          default {'Configuration'}
        }
      }
    }
   Type: Metacontent

Name              Length
----              ------
ThirdPartyNotices   1229
LICENSE-CODE        1106
LICENSE            19047

   Type: Configuration

Name                                Length
----                                ------
.editorconfig                          183
.gitattributes                         419
.gitignore                             228
.markdownlint.json                    2456
.openpublishing.publish.config.json   2306
.openpublishing.redirection.json    332394
.localization-config                   232

   Type: Content

Name            Length
----            ------
README.md         3355
CONTRIBUTING.md    247

   Type: Automation

Name                      Length
----                      ------
.openpublishing.build.ps1    796
build.ps1                   7495
ci.yml                       645
ci-steps.yml                2035
daily.yml                   1271

Format-WideFormat-Wide

L' Format-Wide applet de commande vous permet d’afficher la valeur d’une propriété pour les objets d’une collection sous la forme d’une liste à plusieurs colonnes.The Format-Wide cmdlet allows you to display the value of one property for objects in a collection as a multi-column list.

Pour cet exemple, nous souhaitons voir le nom de fichier et la taille (en kilo-octets) comme une liste étendue.For this example, we want to see the filename and the size (in kilobytes) as a wide listing. Étant donné que Format-Wide n’affiche pas plus d’une propriété, nous utilisons une propriété calculée pour combiner la valeur de deux propriétés en une seule valeur.Since Format-Wide does not display more than one property, we use a calculated property to combine the value of two properties into a single value.

Get-ChildItem -File |
  Format-Wide -Property @{e={'{0} ({1:N2}kb)' -f $_.name,($_.length/1kb)}}
.editorconfig (0.18kb)                          .gitattributes (0.41kb)
.gitignore (0.22kb)                             .localization-config (0.23kb)
.markdownlint.json (2.40kb)                     .openpublishing.build.ps1 (0.78kb)
.openpublishing.publish.config.json (2.25kb)    .openpublishing.redirection.json (324.60kb)
build.ps1 (7.32kb)                              ci.yml (0.63kb)
ci-steps.yml (1.99kb)                           CONTRIBUTING.md (0.24kb)
daily.yml (1.24kb)                              LICENSE (18.60kb)
LICENSE-CODE (1.08kb)                           README.md (3.28kb)
ThirdPartyNotices (1.20kb)

Group-ObjectGroup-Object

L' Group-Object applet de commande affiche les objets dans des groupes en fonction de la valeur d’une propriété spécifiée.The Group-Object cmdlet displays objects in groups based on the value of a specified property. Dans cet exemple, la propriété calculée compte le nombre de fichiers de chaque type de contenu.In this example, the calculated property counts the number of files of each content type.

Get-ChildItem -File |
  Sort-Object extension |
    Group-Object -NoElement -Property @{
      expression={
        switch ($_.extension) {
          '.md'   {'Content'}
          ''      {'Metacontent'}
          '.ps1'  {'Automation'}
          '.yml'  {'Automation'}
          default {'Configuration'}
        }
      }
    }
Count Name
----- ----
    5 Automation
    7 Configuration
    2 Content
    3 Metacontent

Measure-ObjectMeasure-Object

L' Measure-Object applet de commande calcule les propriétés numériques des objets.The Measure-Object cmdlet calculates the numeric properties of objects. Dans cet exemple, nous utilisons une propriété calculée pour obtenir le nombre ( somme ) des nombres, compris entre 1 et 10, qui sont uniformément divisibles par 3.In this example, we use a calculated property to get the count ( Sum ) of the numbers, between 1 and 10, that are evenly divisible by 3.

1..10 | Measure-Object -Property {($_ % 3) -eq 0} -Sum
Count             : 10
Average           :
Sum               : 3
Maximum           :
Minimum           :
StandardDeviation :
Property          : ($_ % 3) -eq 0

Notes

Contrairement aux autres applets de commande, Measure-Object n’accepte pas de Hashtable pour les propriétés calculées.Unlike the other cmdlets, Measure-Object does not accept a hashtable for calculated properties. Vous devez utiliser un bloc de script.You must use a script block.

Select-ObjectSelect-Object

Vous pouvez utiliser des propriétés calculées pour ajouter des membres supplémentaires à la sortie d’objets avec l’applet de commande Select-Object .You can use calculated properties to add additional members to the objects output with the Select-Object cmdlet. Dans cet exemple, nous répertorions les alias PowerShell qui commencent par la lettre C .In this example, we are listing the PowerShell aliases that begin with the letter C. À l’aide de Select-Object , nous sortons l’alias, l’applet de commande à laquelle il est mappé et le nombre de paramètres définis pour l’applet de commande.Using Select-Object, we output the alias, the cmdlet it's mapped to, and a count for the number of parameters defined for the cmdlet. À l’aide d’une propriété calculée, nous pouvons créer la propriété ParameterCount .Using a calculated property, we can create the ParameterCount property.

$aliases = Get-Alias c* |
  Select-Object Name,
                Definition,
                @{
                    name='ParameterCount'
                    expr={$_.Parameters.Keys.Count}
                }
$aliases | Get-Member
$aliases
   TypeName: Selected.System.Management.Automation.AliasInfo

Name           MemberType   Definition
----           ----------   ----------
Equals         Method       bool Equals(System.Object obj)
GetHashCode    Method       int GetHashCode()
GetType        Method       type GetType()
ToString       Method       string ToString()
Definition     NoteProperty string Definition=Get-Content
Name           NoteProperty string Name=cat
ParameterCount NoteProperty System.Int32 ParameterCount=21

Name    Definition         ParameterCount
----    ----------         --------------
cat     Get-Content                    21
cd      Set-Location                   15
cdd     Push-MyLocation                 1
chdir   Set-Location                   15
clc     Clear-Content                  20
clear   Clear-Host                      0
clhy    Clear-History                  17
cli     Clear-Item                     20
clp     Clear-ItemProperty             22
cls     Clear-Host                      0
clv     Clear-Variable                 19
cnsn    Connect-PSSession              29
compare Compare-Object                 20
copy    Copy-Item                      24
cp      Copy-Item                      24
cpi     Copy-Item                      24
cpp     Copy-ItemProperty              23
cvpa    Convert-Path                   13

Sort-ObjectSort-Object

À l’aide des propriétés calculées, vous pouvez trier les données dans différents ordres par propriété.Using the calculated properties, you can sort data in different orders per property. Cet exemple trie les données d’un fichier CSV dans l’ordre croissant par Date .This example sorts data from a CSV file in ascending order by Date . Mais dans chaque date, il trie les lignes par ordre décroissant de UnitsSold .But within each date, it sorts the rows in descending order by UnitsSold .

Import-Csv C:\temp\sales-data.csv |
  Sort-Object Date, @{expr={$_.UnitsSold}; desc=$true}, Salesperson  |
    Select-Object Date, Salesperson, UnitsSold
Date       Salesperson UnitsSold
----       ----------- ---------
2020-08-01 Sally       3
2020-08-01 Anne        2
2020-08-01 Fred        1
2020-08-02 Anne        6
2020-08-02 Fred        2
2020-08-02 Sally       0
2020-08-03 Anne        5
2020-08-03 Sally       3
2020-08-03 Fred        1
2020-08-04 Anne        2
2020-08-04 Fred        2
2020-08-04 Sally       2

NotesNotes

  • Vous pouvez spécifier directement le bloc de script d’expression, en tant qu’argument, au lieu de le spécifier comme Expression entrée dans une Hashtable.You may specify the expression script block directly , as an argument, rather than specifying it as the Expression entry in a hashtable. Par exemple :For example:

    '1', '10', '2' | Sort-Object { [int] $_ }
    

    Cet exemple est pratique pour les applets de commande qui ne nécessitent pas (ou prennent en charge) le nommage d’une propriété via la Name clé, par exemple Sort-Object , Group-Object et Measure-Object .This example is convenient for cmdlets that do not require (or support) naming a property via the Name key, such as Sort-Object, Group-Object, and Measure-Object.

    Pour les applets de commande qui prennent en charge l’attribution d’un nom à la propriété, le bloc de script est converti en une chaîne et utilisé comme nom de la propriété dans la sortie.For cmdlets that support naming the property, the script block is converted to a string and used as the name of the property in the output.

  • Expression les blocs de script s’exécutent dans des portées enfants , ce qui signifie que les variables de l’appelant ne peuvent pas être modifiées directement.Expression script blocks run in child scopes, meaning that the caller's variables cannot be directly modified.

  • La logique de pipeline est appliquée à la sortie des Expression blocs de script.Pipeline logic is applied to the output from Expression script blocks. Cela signifie que la génération d’un tableau à un seul élément entraîne le désencapsulage de ce tableau.This means that outputting a single-element array causes that array to be unwrapped.

  • Pour la plupart des cmdlets, les erreurs contenues dans les blocs de script d’expression sont ignorées en mode silencieux.For most cmdlets, errors inside expression script blocks are quietly ignored. Pour Sort-Object , les erreurs d’instruction et de fin de script sont générées , mais elles ne terminent pas l’instruction.For Sort-Object, statement-terminating and script-terminating errors are output but they do not terminate the statement.

Voir aussiSee Also

about_Hash_Tablesabout_Hash_Tables

Compare-ObjectCompare-Object

ConvertTo-HtmlConvertTo-Html

Format-CustomFormat-Custom

Format-ListFormat-List

Format-TableFormat-Table

Format-WideFormat-Wide

Group-ObjectGroup-Object

Measure-ObjectMeasure-Object

Select-ObjectSelect-Object

Sort-ObjectSort-Object

Types de format dans .NETFormat types in .NET