Update-List
Agrega elementos a y quita elementos de un valor de propiedad que contiene una colección de objetos .
Sintaxis
AddRemoveSet (Es el valor predeterminado).
Update-List
[[-Property] <String>]
[-Add <Object[]>]
[-Remove <Object[]>]
[-InputObject <PSObject>]
[<CommonParameters>]
ReplaceSet
Update-List
[[-Property] <String>]
-Replace <Object[]>
[-InputObject <PSObject>]
[<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 eliminan de esta. 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 Set que acepte una actualización debe 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 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() usa Update-Listpara 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 devuelve el objeto actualizado a 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♥
El resultado muestra el estado de la baraja antes de que las cartas se repartieran 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 repartir las cartas a los jugadores.
Update-List se usó para seleccionar las cartas de la baraja y agregarlas a la colección de los 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 los parámetros Add y Remove 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.
Propiedades del parámetro
| Tipo: | Object[] |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
AddRemoveSet
| Posición: | Named |
| Mandatory: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-InputObject
Especifica los objetos que se van a actualizar. También puede redirigir el objeto que debe actualizarse a Update-List.
Propiedades del parámetro
| Tipo: | PSObject |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Mandatory: | False |
| Valor de la canalización: | True |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | 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.
Propiedades del parámetro
| Tipo: | String |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | 0 |
| Mandatory: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-Remove
Especifica los valores de propiedad que se van a quitar de la colección.
Propiedades del parámetro
| Tipo: | Object[] |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
AddRemoveSet
| Posición: | Named |
| Mandatory: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | 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.
Propiedades del parámetro
| Tipo: | Object[] |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
ReplaceSet
| Posición: | Named |
| Mandatory: | True |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
CommonParameters
Este cmdlet admite los parámetros comunes: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction y -WarningVariable. Para obtener más información, vea about_CommonParameters.
Entradas
PSObject
Puede canalizar el objeto que se va a actualizar a este cmdlet.
Salidas
Hashtable
De forma predeterminada, este cmdlet devuelve una tabla hash que describe la actualización.
Object
Cuando especificas el parámetro Property, este cmdlet devuelve el objeto actualizado.