Búsqueda de sitios web

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
42

Pará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.

Artículos relacionados