Freigeben über


Update-List

Fügt Elemente einem Eigenschaftenwert hinzu, der eine Auflistung von Objekten enthält, bzw. entfernt sie daraus.

Syntax

Update-List
      [-Add <Object[]>]
      [-Remove <Object[]>]
      [-InputObject <PSObject>]
      [[-Property] <String>]
      [<CommonParameters>]
Update-List
      -Replace <Object[]>
      [-InputObject <PSObject>]
      [[-Property] <String>]
      [<CommonParameters>]

Beschreibung

Mit dem Update-List Cmdlet werden Elemente in einem Eigenschaftswert eines Objekts hinzugefügt, entfernt oder ersetzt und das aktualisierte Objekt zurückgegeben. Dieses Cmdlet ist für Eigenschaften vorgesehen, die Auflistungen von Objekten enthalten.

Die Parameter "Hinzufügen " und "Entfernen " fügen einzelne Elemente hinzu und entfernen sie aus der Auflistung. Der Replace-Parameter ersetzt die gesamte Auflistung.

Wenn Sie keine Eigenschaft im Befehl angeben, wird eine Hashtabelle zurückgegeben, Update-List die das Update beschreibt, anstatt das Objekt zu aktualisieren. Später können Sie diesen Änderungssatz verwenden, um ein Listenobjekt zu aktualisieren.

Dieses Cmdlet funktioniert nur, wenn die aktualisierte Eigenschaft die IList-Schnittstelle unterstützt, die Update-List verwendet wird. Außerdem müssen alle Set Cmdlets, die ein Update akzeptieren, die IList-Schnittstelle unterstützen.

Dieses Cmdlet wurde in PowerShell 7 erneut eingeführt.

Beispiele

Beispiel 1: Hinzufügen von Elementen zu einem Eigenschaftswert

In diesem Beispiel erstellen wir eine Klasse, die einen Kartensatz darstellt, in dem die Karten als List-Auflistungsobjekt gespeichert werden. Die NewDeck()- Methode verwendet Update-List, um der Kartenauflistung einen vollständigen Kartensatz hinzuzufügen.

class Cards {

    [System.Collections.Generic.List[string]]$cards
    [string]$name

    Cards([string]$_name) {
        $this.name = $_name
        $this.cards = [System.Collections.Generic.List[string]]::new()
    }

    NewDeck() {
        $_suits = "`u{2663}","`u{2666}","`u{2665}","`u{2660}"
        $_values = 'A',2,3,4,5,6,7,8,9,10,'J','Q','K'
        $_deck = foreach ($s in $_suits){ foreach ($v in $_values){ "$v$s"} }
        $this | Update-List -Property cards -Add $_deck | Out-Null
    }

    Show() {
        Write-Host
        Write-Host $this.name ": " $this.cards[0..12]
        if ($this.cards.count -gt 13) {
            Write-Host (' ' * ($this.name.length+3)) $this.cards[13..25]
        }
        if ($this.cards.count -gt 26) {
            Write-Host (' ' * ($this.name.length+3)) $this.cards[26..38]
        }
        if ($this.cards.count -gt 39) {
            Write-Host (' ' * ($this.name.length+3)) $this.cards[39..51]
        }
    }

    Shuffle() { $this.cards = Get-Random -InputObject $this.cards -Count 52 }

    Sort() { $this.cards.Sort() }
}

Hinweis

Das Update-List Cmdlet gibt das aktualisierte Objekt an die Pipeline aus. Die Ausgabe wird weitergeleitet, um die unerwünschte Anzeige zu Out-Null unterdrücken.

Beispiel 2: Hinzufügen und Entfernen von Elementen einer Auflistungseigenschaft

Weiter mit dem Code in Beispiel 1 erstellen wir Instanzen der Cards-Klasse , um eine Kartensammlung und die Karten darzustellen, die von zwei Spielern gehalten werden. Wir verwenden das Update-List Cmdlet zum Hinzufügen von Karten zu den Händen der Spieler und zum Entfernen von Karten aus dem Deck.

$player1 = [Cards]::new('Player 1')
$player2 = [Cards]::new('Player 2')

$deck = [Cards]::new('Deck')
$deck.NewDeck()
$deck.Shuffle()
$deck.Show()

# Deal two hands
$player1 | Update-List -Property cards -Add $deck.cards[0,2,4,6,8] | Out-Null
$player2 | Update-List -Property cards -Add $deck.cards[1,3,5,7,9] | Out-Null
$deck | Update-List -Property cards -Remove $player1.cards | Out-Null
$deck | Update-List -Property cards -Remove $player2.cards | Out-Null

$player1.Show()
$player2.Show()
$deck.Show()

Deck :  4♦ 7♥ J♦ 5♣ A♣ 8♦ J♣ Q♥ 6♦ 3♦ 9♦ 6♣ 2♣
        K♥ 4♠ 10♥ 8♠ 10♦ 9♠ 6♠ K♦ 7♣ 3♣ Q♣ A♥ Q♠
        3♥ 5♥ 2♦ 5♠ J♥ J♠ 10♣ 4♥ Q♦ 10♠ 4♣ 2♠ 2♥
        6♥ 7♦ A♠ 5♦ 8♣ 9♥ K♠ 7♠ 3♠ 9♣ A♦ K♣ 8♥

Player 1 :  4♦ J♦ A♣ J♣ 6♦

Player 2 :  7♥ 5♣ 8♦ Q♥ 3♦

Deck :  9♦ 6♣ 2♣ K♥ 4♠ 10♥ 8♠ 10♦ 9♠ 6♠ K♦ 7♣ 3♣
        Q♣ A♥ Q♠ 3♥ 5♥ 2♦ 5♠ J♥ J♠ 10♣ 4♥ Q♦ 10♠
        4♣ 2♠ 2♥ 6♥ 7♦ A♠ 5♦ 8♣ 9♥ K♠ 7♠ 3♠ 9♣
        A♦ K♣ 8♥

Die Ausgabe zeigt den Zustand des Decks, bevor die Karten den Spielern gehandhabt wurden. Sie können sehen, dass jeder Spieler fünf Karten vom Deck erhalten hat. Die endgültige Ausgabe zeigt den Zustand des Decks nach dem Umhandeln der Karten an die Spieler. Update-List wurde verwendet, um die Karten aus dem Deck auszuwählen und sie zur Sammlung der Spieler hinzuzufügen. Anschließend wurden die Karten der Spieler aus dem Deck entfernt.Update-List

Beispiel 3: Hinzufügen und Entfernen von Elementen in einem einzigen Befehl

Update-List ermöglicht ihnen die Verwendung der Parameter "Hinzufügen " und "Entfernen " in einem einzigen Befehl. In diesem Beispiel möchte Player 1 die 4♦ und zwei neue Karten verwerfen und 6♦ erhalten.

# Player 1 wants two new cards - remove 2 cards & add 2 cards
$player1 | Update-List -Property cards -Remove $player1.cards[0,4] -Add $deck.cards[0..1] | Out-Null
$player1.Show()

# remove dealt cards from deck
$deck | Update-List -Property cards -Remove $deck.cards[0..1] | Out-Null
$deck.Show()

Player 1 :  J♦ A♣ J♣ 9♦ 6♣

Deck :  2♣ K♥ 4♠ 10♥ 8♠ 10♦ 9♠ 6♠ K♦ 7♣ 3♣ Q♣ A♥
        Q♠ 3♥ 5♥ 2♦ 5♠ J♥ J♠ 10♣ 4♥ Q♦ 10♠ 4♣ 2♠
        2♥ 6♥ 7♦ A♠ 5♦ 8♣ 9♥ K♠ 7♠ 3♠ 9♣ A♦ K♣
        8♥

Beispiel 4: Anwenden eines Änderungssatzes auf ein Listenobjekt

Wenn Sie keine Eigenschaft angeben, wird eine Hashtabelle zurückgegeben, Update-List die das Update beschreibt, anstatt das Objekt zu aktualisieren. Sie können die Hashtabelle in ein System.PSListModifier-Objekt umwandeln und die ApplyTo() Methode verwenden, um den Änderungssatz auf eine Liste anzuwenden.

$list = [System.Collections.ArrayList] (1, 43, 2)
$changeInstructions = Update-List -Remove 43 -Add 42
$changeInstructions

Name                           Value
----                           -----
Add                            {42}
Remove                         {43}

([PSListModifier]($changeInstructions)).ApplyTo($list)
$list

1
2
42

Parameter

-Add

Gibt die Eigenschaftenwerte an, die der Auflistung hinzugefügt werden. Geben Sie die Werte in der Reihenfolge ein, in der die sie in der Auflistung angezeigt werden sollen.

Typ:Object[]
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-InputObject

Gibt die zu aktualisierenden Objekte an. Sie können das Objekt auch an die Aktualisierung Update-Listsenden.

Typ:PSObject
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:False

-Property

Gibt die Eigenschaft an, die die auflistung enthält, die aktualisiert wird. Wenn Sie diesen Parameter weglassen, wird ein Objekt zurückgegeben, Update-List das die Änderung darstellt, anstatt das Objekt zu ändern.

Typ:String
Position:0
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Remove

Gibt die Eigenschaftenwerte an, die aus der Auflistung entfernt werden sollen.

Typ:Object[]
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Replace

Gibt eine neue Auflistung an. Dieser Parameter ersetzt alle Elemente in der ursprünglichen Auflistung mit den Elementen, die von diesem Parameter angegeben werden.

Typ:Object[]
Position:Named
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

Eingaben

PSObject

Sie können das Objekt weiterleiten, das an dieses Cmdlet aktualisiert werden soll.

Ausgaben

Hashtable

Standardmäßig gibt dieses Cmdlet eine Hashtable zurück, die das Update beschreibt.

Object

Wenn Sie den Parameter Property angeben, gibt dieses Cmdlet das aktualisierte Objekt zurück.