Update-List
Agrega elementos a y quita elementos de un valor de propiedad que contenga 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 Update-List
cmdlet agrega, quita o reemplaza elementos en un valor de propiedad de un objeto y devuelve el objeto actualizado. Este cmdlet está diseñado para las propiedades que contienen colecciones de objetos.
Los parámetros Add y Remove agregan elementos individuales a 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 actualiza admite la interfaz IList que Update-List
usa. Además, los Set
cmdlets que aceptan 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 . El método NewDeck() usa Update-List
para agregar una baraja completa de valores de tarjeta a la colección de 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 Update-List
cmdlet genera el objeto actualizado en la canalización. Canalizamos la salida para Out-Null
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 Update-List
cmdlet 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 mediante Update-List
.
Ejemplo 3: Agregar y quitar elementos en un solo comando
Update-List
permite usar los parámetros Agregar y Quitar en un solo comando. En este ejemplo, el Jugador 1 quiere descartar y 4♦
6♦
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 ApplyTo()
método 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 agregarán a la colección. Escriba los valores en el orden en que deberían 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 actualizarán. 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 , este cmdlet devuelve el objeto actualizado.