Update-List
Lägger till objekt i och tar bort objekt från ett egenskapsvärde som innehåller en samling objekt.
Syntax
Update-List
[-Add <Object[]>]
[-Remove <Object[]>]
[-InputObject <PSObject>]
[[-Property] <String>]
[<CommonParameters>]
Update-List
-Replace <Object[]>
[-InputObject <PSObject>]
[[-Property] <String>]
[<CommonParameters>]
Description
Cmdleten Update-List
lägger till, tar bort eller ersätter objekt i ett egenskapsvärde för ett objekt och returnerar det uppdaterade objektet. Den här cmdleten är utformad för egenskaper som innehåller samlingar med objekt.
Parametrarna Lägg till och ta bort lägger till enskilda objekt i och tar bort dem från samlingen. Parametern Ersätt ersätter hela samlingen.
Om du inte anger en egenskap i kommandot Update-List
returnerar du en hashtable som beskriver uppdateringen i stället för att uppdatera objektet. Senare kan du använda den här ändringsuppsättningen för att uppdatera ett listobjekt.
Den här cmdleten fungerar bara när egenskapen som uppdateras stöder det IList-gränssnitt som Update-List
använder. Dessutom måste alla Set
cmdletar som accepterar en uppdatering ha stöd för IList-gränssnittet .
Den här cmdleten återinfördes i PowerShell 7.
Exempel
Exempel 1: Lägga till objekt i ett egenskapsvärde
I det här exemplet skapar vi en klass som representerar en kortlek där korten lagras som ett listsamlingsobjekt . Metoden NewDeck() använder Update-List
för att lägga till en fullständig kortlek i kortsamlingen.
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() }
}
Kommentar
Cmdleten Update-List
matar ut det uppdaterade objektet till pipelinen. Vi skicka utdata till för att Out-Null
undertrycka den oönskade visningen.
Exempel 2: Lägga till och ta bort objekt i en samlingsegenskap
Om vi fortsätter med koden i exempel 1 skapar vi instanser av klassen Cards för att representera en kortlek och korten som innehas av två spelare. Vi använder cmdleten Update-List
för att lägga till kort i spelarnas händer och för att ta bort kort från leken.
$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♥
Utdata visar kortlekens tillstånd innan korten delades ut till spelarna. Du kan se att varje spelare fick fem kort från leken. Den slutliga utdata visar tillståndet för kortleken efter att ha handlat korten till spelarna. Update-List
användes för att välja korten från leken och lägga till dem i spelarnas samling. Sedan togs spelarnas kort bort från leken med hjälp av Update-List
.
Exempel 3: Lägga till och ta bort objekt i ett enda kommando
Update-List
gör att du kan använda parametrarna Lägg till och ta bort i ett enda kommando. I det här exemplet vill spelare 1 ta bort 4♦
och 6♦
få två nya kort.
# 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♥
Exempel 4: Tillämpa en ändringsuppsättning på ett listobjekt
Om du inte anger en egenskap Update-List
returnerar du en hashtable som beskriver uppdateringen i stället för att uppdatera objektet. Du kan omvandla hashtable-objektet till ett System.PSListModifier-objekt och använda ApplyTo()
metoden för att tillämpa ändringsuppsättningen på en lista.
$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
Parametrar
-Add
Anger de egenskapsvärden som ska läggas till i samlingen. Ange värdena i den ordning som de ska visas i samlingen.
Typ: | Object[] |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-InputObject
Anger vilka objekt som ska uppdateras. Du kan också skicka det objekt som ska uppdateras till Update-List
.
Typ: | PSObject |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | True |
Godkänn jokertecken: | False |
-Property
Anger den egenskap som innehåller samlingen som uppdateras. Om du utelämnar den här parametern Update-List
returnerar ett objekt som representerar ändringen i stället för att ändra objektet.
Typ: | String |
Position: | 0 |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-Remove
Anger de egenskapsvärden som ska tas bort från samlingen.
Typ: | Object[] |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-Replace
Anger en ny samling. Den här parametern ersätter alla objekt i den ursprungliga samlingen med de objekt som anges av den här parametern.
Typ: | Object[] |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | True |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
Indata
Du kan skicka det objekt som ska uppdateras till den här cmdleten.
Utdata
Som standard returnerar den här cmdleten en hashtable som beskriver uppdateringen.
När du anger egenskapsparametern returnerar den här cmdleten det uppdaterade objektet.