Update-List
Agrega elementos a y quita elementos de un valor de propiedad que contiene una colección de objetos .
Sintaxis
Update-List
[-Add <Object[]>]
[-Remove <Object[]>]
[-InputObject <PSObject>]
[[-Property] <String>]
[<CommonParameters>]
Update-List
-Replace <Object[]>
[-InputObject <PSObject>]
[[-Property] <String>]
[<CommonParameters>]
Description
El cmdlet Update-List
agrega, quita o reemplaza elementos en un valor de propiedad de un objeto y devuelve el objeto actualizado. Este cmdlet está diseñado para propiedades que contienen colecciones de objetos.
Los parámetros Add y Remove agregan elementos individuales a la colección y los quitan de la colección. El parámetro Replace reemplaza toda la colección.
Si no especifica una propiedad en el comando , Update-List
devuelve una tabla hash que describe la actualización en lugar de actualizar el objeto . Más adelante, puede usar este conjunto de cambios para actualizar un objeto de lista.
Este cmdlet solo funciona cuando la propiedad que se está actualizando admite la interfaz IList que Update-List
usa. Además, los cmdlets de Set
que acepten una actualización deben admitir la interfaz IList.
Este cmdlet se ha vuelto a introducir en PowerShell 7.
Ejemplos
Ejemplo 1: Agregar elementos a un valor de propiedad
En este ejemplo se crea una clase que representa una baraja de cartas donde las tarjetas se almacenan como un objeto de colección List List. El método NewDeck() usa Update-List
para agregar una baraja completa de valores de tarjeta a la colección tarjetas.
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
El cmdlet Update-List
genera el objeto actualizado en la canalización. Canalizamos la salida a Out-Null
para suprimir la pantalla no deseada.
Ejemplo 2: Agregar y quitar elementos de una propiedad de colección
Siguiendo con el código del ejemplo 1, crearemos instancias de la clase Cards para representar una baraja de cartas y las cartas que mantienen dos jugadores. Usamos el cmdlet Update-List
para agregar cartas a las manos de los jugadores y para quitar cartas de la baraja.
$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♥
La salida muestra el estado de la baraja antes de que las cartas se trataran a los jugadores. Puedes ver que cada jugador recibió cinco cartas de la baraja. La salida final muestra el estado de la baraja después de tratar las cartas a los jugadores.
Update-List
se usó para seleccionar las cartas de la baraja y agregarlas a la colección de jugadores. A continuación, las cartas de los jugadores se quitaron de la baraja usando Update-List
.
Ejemplo 3: Agregar y quitar elementos en un solo comando
Update-List
permite usar el Agregar y Quitar parámetros de en un solo comando. En este ejemplo, player 1 quiere descartar el 4♦
y 6♦
y obtener dos tarjetas nuevas.
# 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♥
Ejemplo 4: Aplicar un conjunto de cambios a un objeto de lista
Si no especifica una propiedad, Update-List
devuelve una tabla hash que describe la actualización en lugar de actualizar el objeto . Puede convertir la tabla hash en un objeto System.PSListModifier y usar el método ApplyTo()
para aplicar el conjunto de cambios a una 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
Parámetros
-Add
Especifica los valores de propiedad que se van a agregar a la colección. Escriba los valores en el orden en que deben aparecer en la colección.
Tipo: | Object[] |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-InputObject
Especifica los objetos que se van a actualizar. También puede canalizar el objeto que se va a actualizar a Update-List
.
Tipo: | PSObject |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | False |
-Property
Especifica la propiedad que contiene la colección que se está actualizando. Si omite este parámetro, Update-List
devuelve un objeto que representa el cambio en lugar de cambiar el objeto.
Tipo: | String |
Posición: | 0 |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-Remove
Especifica los valores de propiedad que se van a quitar de la colección.
Tipo: | Object[] |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-Replace
Especifica una nueva colección. Este parámetro reemplaza todos los elementos de la colección original por los elementos especificados por este parámetro.
Tipo: | Object[] |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
Entradas
Puede canalizar el objeto para que se actualice a este cmdlet.
Salidas
De forma predeterminada, este cmdlet devuelve una tabla hash que describe la actualización.
Al especificar el parámetro Property de, este cmdlet devuelve el objeto actualizado.