Informationen zu berechneten EigenschaftenAbout calculated properties

Kurze BeschreibungShort Description

PowerShell bietet die Möglichkeit, neue Eigenschaften dynamisch hinzuzufügen und die Formatierung der Objekt Ausgabe in die Pipeline zu ändern.PowerShell provides the ability to dynamically add new properties and alter the formatting of objects output to the pipeline.

Lange BeschreibungLong Description

Eine Reihe von PowerShell-Cmdlets transformieren, Aggregieren oder verarbeiten Eingabe Objekte in Ausgabe Objekte mithilfe von Parametern, die das Hinzufügen neuer Eigenschaften zu diesen Ausgabe Objekten ermöglichen.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. Diese Parameter können verwendet werden, um basierend auf den Werten von Eingabe Objekten neue, berechnete Eigenschaften für Ausgabe Objekte zu generieren.These parameters can be used to generate new, calculated properties on output objects based on the values of input objects. Die berechnete Eigenschaft wird durch eine Hash Tabelle definiert, die Schlüssel-Wert-Paare enthält, die den Namen der neuen Eigenschaft angeben, einen Ausdruck zum Berechnen des Werts und optionale Formatierungsinformationen.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.

Unterstützte CmdletsSupported cmdlets

Die folgenden Cmdlets unterstützen berechnete Eigenschaftswerte für den Property -Parameter.The following cmdlets support calculated property values for the Property parameter. Die Format-* Cmdlets unterstützen auch berechnete Werte für den GroupBy -Parameter.The Format-* cmdlets also support calculated values for the GroupBy parameter.

In der folgenden Liste werden die Cmdlets aufgelistet, die berechnete Eigenschaften und die Schlüssel-Wert-Paare unterstützen, die von den einzelnen Cmdlets unterstützt werden.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 -optional (in PowerShell 6. x hinzugefügt)name/label - optional (added in PowerShell 6.x)
    • expression
    • width -optionalwidth - optional
    • alignment -optionalalignment - optional
  • Format-Custom

    • expression
    • depth -optionaldepth - optional
  • Format-List

    • name/label -optionalname/label - optional
    • expression
    • formatstring -optionalformatstring - optional

    Derselbe Satz von Schlüssel-Wert-Paaren gilt auch für berechnete Eigenschaftswerte, die an den GroupBy -Parameter für alle Format-* Cmdlets übergeben werden.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 -optionalname/label - optional
    • expression
    • formatstring -optionalformatstring - optional
    • width -optionalwidth - optional
    • alignment -optionalalignment - optional
  • Format-Wide

    • expression
    • formatstring -optionalformatstring - optional
  • Group-Object

    • expression
  • Measure-Object

    • Unterstützt nur einen Skriptblock für den Ausdruck, nicht eine Hash Tabelle.Only supports a script block for the expression, not a hashtable.
    • Wird in PowerShell 5,1 und älter nicht unterstützt.Not supported in PowerShell 5.1 and older.
  • Select-Object

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

    • expression
    • ascending/descending -optionalascending/descending - optional

Hinweis

Der Wert von expression kann ein Skriptblock anstelle einer Hash Tabelle sein.The value of the expression can be a script block instead of a hashtable. Weitere Informationen finden Sie im Abschnitt " Hinweise ".For more information, see the Notes section.

Hash Tabellenschlüssel DefinitionenHashtable key definitions

  • name/label : Gibt den Namen der Eigenschaft an, die erstellt wird.name/label - Specifies the name of the property being created. Sie können name oder den zugehörigen Alias, label , austauschbar verwenden.You can use name or its alias, label, interchangeably.
  • expression : Ein Skriptblock, der zum Berechnen des Werts der neuen Eigenschaft verwendet wird.expression - A script block used to calculate the value of the new property.
  • alignment -Wird von Cmdlets verwendet, die eine tabellarische Ausgabe erzeugt, um zu definieren, wie die Werte in einer Spalte angezeigt werden.alignment - Used by cmdlets that produce tabular output to define how the values are displayed in a column. Der Wert muss 'left' , 'center' oder sein 'right' .The value must be 'left', 'center', or 'right'.
  • formatstring : Gibt eine Format Zeichenfolge an, die definiert, wie der Wert für die Ausgabe formatiert wird.formatstring - Specifies a format string that defines how the value is formatted for output. Weitere Informationen zu Format Zeichenfolgen finden Sie unter Formatieren von Typen in .net.For more information about format strings, see Format types in .NET.
  • width : Gibt die maximale Width-Spalte in einer Tabelle an, wenn der Wert angezeigt wird.width - Specifies the maximum width column in a table when the value is displayed. Der Wert muss größer als sein 0 .The value must be greater than 0.
  • depth -Der tiefen Parameter von Format-Custom gibt die Tiefe der Erweiterung für alle Eigenschaften an.depth - The Depth parameter of Format-Custom specifies the depth of expansion for all properties. depthMit dem Schlüssel können Sie die Tiefe der Erweiterung pro Eigenschaft angeben.The depth key allows you to specify the depth of expansion per property.
  • ascending / descending : Hiermit können Sie die Sortierreihenfolge für eine oder mehrere Eigenschaften angeben.ascending / descending - Allows you to specify the order of sorting for one or more properties. Dies sind boolesche Werte.These are boolean values.

Die Hash Tabelle-Schlüssel müssen nicht ausgeschrieben werden, solange das angegebene namens Präfix eindeutig ist.The hashtable keys need not be spelled out as long as the specified name prefix is unambiguous. nKann z. b. anstelle von verwendet werden Name und e kann anstelle von verwendet werden Expression .For example, n can be used in lieu of Name and e can be used in lieu of Expression.

BeispieleExamples

Compare-ObjectCompare-Object

Mit berechneten Eigenschaften können Sie steuern, wie die Eigenschaften der Eingabe Objekte verglichen werden.With calculated properties, you can control how the properties of the input objects are compared. In diesem Beispiel werden die Werte mit dem Ergebnis der arithmetischen Operation verglichen (Modulus von 2), anstatt die Werte direkt zu vergleichen.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 kann eine Auflistung von-Objekten in eine HTML-Tabelle konvertieren.ConvertTo-Html can convert a collection of objects to an HTML table. Mit berechneten Eigenschaften können Sie steuern, wie die Tabelle dargestellt wird.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

In diesem Beispiel wird eine HTML-Tabelle erstellt, die eine Liste der PowerShell-Aliase und die number-Parameter für jeden Alias Befehl enthält.This example creates an HTML table containing a list of PowerShell aliases and the number parameters for each aliased command. Die Werte der parameterCount -Spalte werden zentriert.The values of ParameterCount column are centered.

Format-CustomFormat-Custom

Format-Custom stellt eine benutzerdefinierte Ansicht eines Objekts in einem Format bereit, das einer Klassendefinition ähnelt.Format-Custom provides a custom view of an object in a format similar to a class definition. Komplexere Objekte können Elemente enthalten, die tief in komplexe Typen geschachtelt sind.More complex objects can contain members that are deeply nested with complex types. Der tiefen Parameter von Format-Custom gibt die Tiefe der Erweiterung für alle Eigenschaften an.The Depth parameter of Format-Custom specifies the depth of expansion for all properties. depthMit dem Schlüssel können Sie die Tiefe der Erweiterung pro Eigenschaft angeben.The depth key allows you to specify the depth of expansion per property.

In diesem Beispiel vereinfacht der depth Schlüssel die benutzerdefinierte Ausgabe für das Get-Date Cmdlet.In this example, the depth key simplifies the custom output for the Get-Date cmdlet. Get-Date Gibt ein DateTime -Objekt zurück.Get-Date returns a DateTime object. Die Date -Eigenschaft dieses Objekts ist auch ein DateTime -Objekt, sodass das-Objekt eingebettet ist.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

In diesem Beispiel verwenden wir berechnete Eigenschaften, um den Namen und das Format der Ausgabe von zu ändern 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

In diesem Beispiel fügt die berechnete Eigenschaft eine Typeigenschaft hinzu, die verwendet wird, um die Dateien nach dem Inhaltstyp zu klassifizieren.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

Mit dem- Format-Wide Cmdlet können Sie den Wert einer Eigenschaft für Objekte in einer Sammlung als mehrspaltige Liste anzeigen.The Format-Wide cmdlet allows you to display the value of one property for objects in a collection as a multi-column list.

In diesem Beispiel möchten wir den Dateinamen und die Größe (in Kilobyte) als Breite Auflistung sehen.For this example, we want to see the filename and the size (in kilobytes) as a wide listing. Da Format-Wide mehr als eine Eigenschaft nicht anzeigt, wird eine berechnete Eigenschaft verwendet, um den Wert von zwei Eigenschaften zu einem einzelnen Wert zu kombinieren.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

Das- Group-Object Cmdlet zeigt Objekte in Gruppen basierend auf dem Wert einer angegebenen Eigenschaft an.The Group-Object cmdlet displays objects in groups based on the value of a specified property. In diesem Beispiel zählt die berechnete Eigenschaft die Anzahl der Dateien jedes Inhaltstyps.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

Das- Measure-Object Cmdlet berechnet die numerischen Eigenschaften von Objekten.The Measure-Object cmdlet calculates the numeric properties of objects. In diesem Beispiel verwenden wir eine berechnete Eigenschaft, um die Anzahl ( Summe ) der Zahlen (zwischen 1 und 10) abzurufen, die gleichmäßig durch 3 teilbar sind.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

Hinweis

Im Gegensatz zu anderen-Cmdlets Measure-Object akzeptiert keine Hash Tabelle für berechnete Eigenschaften.Unlike the other cmdlets, Measure-Object does not accept a hashtable for calculated properties. Sie müssen einen Skriptblock verwenden.You must use a script block.

Select-ObjectSelect-Object

Sie können berechnete Eigenschaften verwenden, um der Objekt Ausgabe mit dem-Cmdlet zusätzliche Elemente hinzuzufügen Select-Object .You can use calculated properties to add additional members to the objects output with the Select-Object cmdlet. In diesem Beispiel werden die PowerShell-Aliase aufgelistet, die mit dem Buchstaben beginnen C .In this example, we are listing the PowerShell aliases that begin with the letter C. Mithilfe Select-Object von geben wir den Alias, das Cmdlet, dem er zugeordnet ist, und die Anzahl der für das Cmdlet definierten Parameter an.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. Mithilfe einer berechneten Eigenschaft können wir die parameterCount -Eigenschaft erstellen.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

Mithilfe der berechneten Eigenschaften können Sie Daten in verschiedenen Reihen Folgen pro Eigenschaft sortieren.Using the calculated properties, you can sort data in different orders per property. In diesem Beispiel werden Daten aus einer CSV-Datei in aufsteigender Reihenfolge nach Datum sortiert.This example sorts data from a CSV file in ascending order by Date. Allerdings werden die Zeilen innerhalb jedes Datums in absteigender Reihenfolge nach unitssold sortiert.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

NotizenNotes

  • Sie können den Ausdrucks Skriptblock direkt als Argument angeben, anstatt ihn als Expression Eintrag in einer Hash Tabelle anzugeben.You may specify the expression script block directly , as an argument, rather than specifying it as the Expression entry in a hashtable. Beispiel:For example:

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

    Dieses Beispiel eignet sich für Cmdlets, die keine Eigenschaft über den Schlüssel benötigen (oder unterstützen) Name , wie z Sort-Object . b Group-Object ., und 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.

    Für Cmdlets, die das Benennen der Eigenschaft unterstützen, wird der Skriptblock in eine Zeichenfolge konvertiert und als Name der Eigenschaft in der Ausgabe verwendet.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 Skriptblöcke werden in unter geordneten Bereichen ausgeführt, was bedeutet, dass die Variablen des Aufrufers nicht direkt geändert werden können.Expression script blocks run in child scopes, meaning that the caller's variables cannot be directly modified.

  • Die Pipeline Logik wird auf die Ausgabe von Expression Skript Blöcken angewendet.Pipeline logic is applied to the output from Expression script blocks. Dies bedeutet, dass die Ausgabe eines Arrays mit einem Element bewirkt, dass dieses Array entpackt wird.This means that outputting a single-element array causes that array to be unwrapped.

  • Bei den meisten Cmdlets werden Fehler in Ausdrucks Skript Blöcken in Ruhe Fällen ignoriert.For most cmdlets, errors inside expression script blocks are quietly ignored. Für Sort-Object werden Anweisungs abschließende und Skript Abbruch Fehler ausgegeben , die-Anweisung wird jedoch nicht beendet.For Sort-Object, statement-terminating and script-terminating errors are output but they do not terminate the statement.

Weitere InformationenSee 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

Formatieren von Typen in .NETFormat types in .NET