Update-List
Aggiunge e rimuove elementi da un valore di proprietà che contiene una raccolta di oggetti.
Sintassi
Update-List
[-Add <Object[]>]
[-Remove <Object[]>]
[-InputObject <PSObject>]
[[-Property] <String>]
[<CommonParameters>]
Update-List
-Replace <Object[]>
[-InputObject <PSObject>]
[[-Property] <String>]
[<CommonParameters>]
Descrizione
Il Update-List
cmdlet aggiunge, rimuove o sostituisce gli elementi in un valore della proprietà di un oggetto e restituisce l'oggetto aggiornato. Questo cmdlet è progettato per le proprietà che contengono raccolte di oggetti.
I parametri Aggiungi e Rimuovi aggiungono singoli elementi e li rimuovono dalla raccolta. Il parametro Replace sostituisce l'intera raccolta.
Se non si specifica una proprietà nel comando, Update-List
restituisce una tabella hash che descrive l'aggiornamento anziché aggiornare l'oggetto. In un secondo momento, è possibile usare questo set di modifiche per aggiornare un oggetto elenco.
Questo cmdlet funziona solo quando la proprietà che viene aggiornata supporta l'interfaccia IList utilizzata Update-List
. Inoltre, tutti Set
i cmdlet che accettano un aggiornamento devono supportare l'interfaccia IList .
Questo cmdlet è stato reintrodotto in PowerShell 7.
Esempio
Esempio 1: Aggiungere elementi a un valore della proprietà
In questo esempio viene creata una classe che rappresenta un mazzo di carte in cui le schede vengono archiviate come oggetto insieme List . Il metodo NewDeck() usa Update-List
per aggiungere un mazzo completo di valori di carta alla raccolta di carte .
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() }
}
Nota
Il Update-List
cmdlet restituisce l'oggetto aggiornato alla pipeline. L'output viene inviato tramite pipe per Out-Null
eliminare lo schermo indesiderato.
Esempio 2: Aggiungere e rimuovere elementi di una proprietà della raccolta
Continuando con il codice nell'esempio 1, creeremo istanze della classe Cards per rappresentare un mazzo di carte e le carte detenute da due giocatori. Usiamo il Update-List
cmdlet per aggiungere carte alle mani dei giocatori e per rimuovere le carte dal mazzo.
$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♥
L'output mostra lo stato del mazzo prima che le carte siano state distribuite ai giocatori. Si può vedere che ogni giocatore ha ricevuto cinque carte dal mazzo. L'output finale mostra lo stato del mazzo dopo aver gestito le carte ai giocatori. Update-List
è stato usato per selezionare le carte dal mazzo e aggiungerle alla raccolta dei giocatori. Poi le carte dei giocatori sono state rimosse dal mazzo usando Update-List
.
Esempio 3: Aggiungere e rimuovere elementi in un singolo comando
Update-List
consente di usare i parametri Aggiungi e Rimuovi in un singolo comando. In questo esempio, Player 1 vuole eliminare 4♦
e 6♦
ottenere due nuove carte.
# 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♥
Esempio 4: Applicare un set di modifiche a un oggetto elenco
Se non si specifica una proprietà, Update-List
restituisce una tabella hash che descrive l'aggiornamento anziché aggiornare l'oggetto. È possibile eseguire il cast della tabella hash in un oggetto System.PSListModifier e utilizzare il ApplyTo()
metodo per applicare il set di modifiche a un elenco.
$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
Parametri
-Add
Specifica i valori delle proprietà da aggiungere alla raccolta. Immettere i valori nell'ordine in cui devono essere visualizzati nella raccolta.
Tipo: | Object[] |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-InputObject
Specifica gli oggetti da aggiornare. È anche possibile inviare tramite pipe l'oggetto da aggiornare a Update-List
.
Tipo: | PSObject |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
-Property
Specifica la proprietà che contiene l'insieme da aggiornare. Se si omette questo parametro, Update-List
restituisce un oggetto che rappresenta la modifica anziché modificare l'oggetto.
Tipo: | String |
Posizione: | 0 |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Remove
Specifica i valori delle proprietà da rimuovere dalla raccolta.
Tipo: | Object[] |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Replace
Specifica una nuova raccolta. Questo parametro sostituisce tutti gli elementi nella raccolta originale con gli elementi specificati da tale parametro.
Tipo: | Object[] |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
Input
È possibile inviare tramite pipe l'oggetto da aggiornare a questo cmdlet.
Output
Per impostazione predefinita, questo cmdlet restituisce una tabella hash che descrive l'aggiornamento.
Quando si specifica il parametro Property , questo cmdlet restituisce l'oggetto aggiornato.