Update-List
Aggiunge e rimuove elementi da un valore della 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 cmdlet Update-List
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 add Add e Remove 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à da aggiornare supporta l'interfaccia di IList usata da Update-List
. Inoltre, tutti i cmdlet Set
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 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 cmdlet Update-List
restituisce l'oggetto aggiornato nella pipeline. L'output viene inviato tramite pipe a Out-Null
per 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 carte per rappresentare un mazzo di carte e le carte detenute da due giocatori. Usiamo il cmdlet Update-List
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 Add e Remove in un singolo comando. In questo esempio, Player 1 vuole eliminare il 4♦
e 6♦
e 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 metodo ApplyTo()
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 all'insieme. 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 dall'insieme.
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 della raccolta originale con gli elementi specificati da questo 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.