Update-List (Microsoft.PowerShell.Utility)
Update-List
- Módulo:
- Microsoft.PowerShell.Utility
Agrega elementos y elimina 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>]Descripción
El cmdlet Update-List agrega, elimina o reemplaza elementos en el valor de una propiedad de un objeto y devuelve el objeto actualizado. Este cmdlet está diseñado para propiedades que contienen colecciones de objetos.
Los parámetros Agregar y Eliminar agregan elementos individuales y los eliminan de la colección. El parámetro Reemplazar 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, podrá utilizar este conjunto de cambios para actualizar un objeto de lista.
Este cmdlet funciona solo cuando la propiedad que se está actualizando admite la interfaz IList que utiliza Update-List. Además, cualquier cmdlet Set que acepte una actualización debe admitir la interfaz IList.
Este cmdlet se reintrodujo en PowerShell 7.
Ejemplos
Ejemplo 1: agregar elementos al valor de una propiedad
En este ejemplo creamos una clase que representa una baraja de cartas donde las cartas se almacenan como un objeto de colección List. El método NewDeck() utiliza Update-List para agregar una baraja completa de valores de cartas a la colección de cartas.
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 visualización no deseada.
Ejemplo 2: agregar y eliminar elementos de una propiedad de colección
Continuando con el código del Ejemplo 1, crearemos instancias de la clase Cards para representar una baraja de cartas y las cartas que tienen dos jugadores. Usamos el cmdlet Update-List para agregar cartas a las manos de los jugadores y eliminar cartas del mazo.
$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♥El resultado muestra el estado del mazo antes de que se repartieran las cartas a los jugadores. Puedes ver que cada jugador recibió cinco cartas del mazo. El resultado final muestra el estado del mazo después de repartir las cartas a los jugadores. Update-List se utilizó para seleccionar las cartas del mazo y agregarlas a la colección de los jugadores. Luego, las cartas de los jugadores se eliminaron del mazo usando Update-List.
Ejemplo 3: agregar y eliminar elementos con un solo comando
Update-List le permite utilizar los parámetros Agregar y Eliminar en un solo comando. En este ejemplo, el jugador 1 quiere descartar el 4♦ y el 6♦ y obtener dos cartas 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 a un objeto System.PSListModifier y utilizar 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
42Parámetros
-Add
Especifica los valores de propiedad que se agregarán a la colección. Introduzca los valores en el orden en que deberían aparecer en la colección.
- Tipo :
Object[]
- Posición:
-
Nombrado
- 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 actualizará a Update-List.
- Tipo :
PSObjeto
- Posición:
Nombrado
- 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 eliminarán de la colección.
- Tipo :
Object[]
- Posición:
Nombrado
- 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 con los elementos especificados por este parámetro.
- Tipo :
Object[]
- Posición:
Nombrado
- Valor predeterminado:
None
- Requerido:
True
- Aceptar entrada de canalización:
False
- Aceptar caracteres comodín:
False
Entradas
PSObjeto
Puede canalizar el objeto que se actualizará a este cmdlet.
Salidas
Tabla hash
De forma predeterminada, este cmdlet devuelve una tabla hash que describe la actualización.
Objeto
Cuando especifica el parámetro Propiedad, este cmdlet devuelve el objeto actualizado.