Udostępnij za pośrednictwem


Update-List

Dodaje elementy do i usuwa elementy z wartości właściwości zawierającej kolekcję obiektów.

Składnia

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

Opis

Polecenie cmdlet Update-List dodaje, usuwa lub zamienia elementy w wartości właściwości obiektu i zwraca zaktualizowany obiekt. To polecenie cmdlet jest przeznaczone dla właściwości zawierających kolekcje obiektów.

Parametry Add and Remove dodają poszczególne elementy i usuń je z kolekcji. Parametr Replace zastępuje całą kolekcję.

Jeśli nie określisz właściwości w poleceniu, Update-List zwraca obiekt opisujący aktualizację zamiast aktualizować obiekt. Obiekt aktualizacji można przesłać do poleceń cmdlet, które zmieniają obiekty, takie jak polecenia cmdlet Set.

To polecenie cmdlet działa tylko wtedy, gdy aktualizowana właściwość obsługuje interfejs IList, który Update-List używa. Ponadto wszystkie polecenia cmdlet Set, które akceptują aktualizację, muszą obsługiwać interfejs IList.

Podstawowe polecenia cmdlet zainstalowane za pomocą programu PowerShell nie obsługują tego interfejsu. Aby określić, czy polecenie cmdlet obsługuje Update-List, zobacz temat Pomocy dotyczącej poleceń cmdlet.

To polecenie cmdlet zostało ponownie wprowadzone w programie PowerShell 7.

Przykłady

Przykład 1. Dodawanie elementów do wartości właściwości

W tym przykładzie utworzymy klasę reprezentującą talii kart, w których karty są przechowywane jako obiekt listy kolekcji. Metoda NewDeck() używa do dodania pełnej talii wartości kart do kolekcji kart.

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() }
}

Nuta

Polecenie cmdlet Update-List zwraca zaktualizowany obiekt do potoku. Przesyłamy dane wyjściowe do Out-Null, aby pominąć niepożądany ekran.

Przykład 2. Dodawanie i usuwanie elementów właściwości kolekcji

Kontynuując kod w przykładzie 1, utworzymy wystąpienia klasy Cards reprezentujące talii kart i kart przechowywanych przez dwóch graczy. Używamy polecenia cmdlet Update-List, aby dodać karty do rąk graczy i usunąć karty z talii.

$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♥

Dane wyjściowe pokazują stan talii, zanim karty zostały rozdane graczom. Widać, że każdy gracz otrzymał pięć kart z talii. Końcowe dane wyjściowe pokazują stan pokładu po rozdaniu kart graczom. Update-List został użyty do wybrania kart z talii i dodania ich do kolekcji graczy. Następnie karty graczy zostały usunięte z talii przy użyciu Update-List.

Przykład 3. Dodawanie i usuwanie elementów w jednym poleceniu

Update-List umożliwia użycie parametrów Add and Remove w jednym poleceniu. W tym przykładzie gracz 1 chce odrzucić 4♦ i 6♦ i uzyskać dwie nowe karty.

# 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♥

Parametry

-Add

Określa wartości właściwości do dodania do kolekcji. Wprowadź wartości w kolejności, w której powinny być wyświetlane w kolekcji.

Typ:Object[]
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-InputObject

Określa obiekty do zaktualizowania. Możesz również przekazać do potoku obiekt, który ma zostać zaktualizowany do Update-List.

Typ:PSObject
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych:False

-Property

Określa właściwość zawierającą aktualizowaną kolekcję. Jeśli ten parametr zostanie pominięty, Update-List zwróci obiekt reprezentujący zmianę zamiast zmieniać obiekt.

Typ:String
Position:0
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-Remove

Określa wartości właściwości do usunięcia z kolekcji.

Typ:Object[]
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-Replace

Określa nową kolekcję. Ten parametr zastępuje wszystkie elementy w oryginalnej kolekcji elementami określonymi przez ten parametr.

Typ:Object[]
Position:Named
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

Dane wejściowe

PSObject

Obiekty, które mają zostać zaktualizowane w celu Update-List.

Dane wyjściowe

Objects or System.Management.Automation.PSListModifier

Update-List zwraca zaktualizowany obiekt lub zwraca obiekt reprezentujący akcję aktualizacji.