Поделиться через


Update-List

Добавляет и удаляет элементы из значении свойства, содержащего коллекцию объектов.

Синтаксис

Update-List
      [-Add <Object[]>]
      [-Remove <Object[]>]
      [-InputObject <PSObject>]
      [[-Property] <String>]
      [<CommonParameters>]
Update-List
      -Replace <Object[]>
      [-InputObject <PSObject>]
      [[-Property] <String>]
      [<CommonParameters>]

Описание

Командлет Update-List добавляет, удаляет или заменяет элементы в значении свойства объекта и возвращает обновленный объект. Этот командлет предназначен для работы со свойствами, которые содержат коллекции объектов.

Параметры Add и Remove добавляют отдельные элементы в коллекцию и удаляют их из коллекции. Параметр Replace заменяет всю коллекцию.

Если свойство не указано в команде, возвращает объект , Update-List описывающий обновление, а не обновление объекта. Объект обновления можно отправить в командлеты, изменяющие объекты, например Set командлеты.

Этот командлет работает только в том случае, если обновляемое свойство поддерживает интерфейс IList , который Update-List использует . Кроме того, все Set командлеты, принимаюющие обновление, должны поддерживать интерфейс IList .

Основные командлеты, установленные с помощью PowerShell, не поддерживают этот интерфейс. Чтобы определить, поддерживает Update-Listли командлет , см. раздел справки по командлетам.

Этот командлет был повторно введен в PowerShell 7.

Примеры

Пример 1. Добавление элементов в значение свойства

В этом примере мы создадим класс , представляющий колоду карт, где карты хранятся в виде объекта коллекции List . Метод NewDeck() использует для Update-Listдобавления полной колоды карта значений в коллекцию карточек.

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() }
}

Примечание

Командлет Update-List выводит обновленный объект в конвейер. Мы передаем выходные данные в для Out-Null подавления нежелательного отображения.

Пример 2. Добавление и удаление элементов свойства коллекции

Продолжая работу с кодом в примере 1, мы создадим экземпляры класса Cards , представляющие колоду карт и карты, хранящиеся у двух игроков. Мы используем командлет для Update-List добавления карт в руки игроков и удаления карт из колоды.

$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♥

Выходные данные показывают состояние колоды до того, как карты были раздались игрокам. Вы видите, что каждый игрок получил пять карт из колоды. Окончательные выходные данные показывают состояние колоды после раздав карты игрокам. Update-List использовался для выбора карт из колоды и добавления их в коллекцию игроков. Затем карты игроков были удалены из колоды с помощью Update-List.

Пример 3. Добавление и удаление элементов в одной команде

Update-List позволяет использовать параметры Add и Remove в одной команде. В этом примере игрок 1 хочет отменить 4♦ и 6♦ и получить две новые карты.

# 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♥

Параметры

-Add

Задает значения свойств, которые необходимо добавить в коллекцию. Введите значения свойств в том порядке, в котором они должны располагаться в коллекции.

Type:Object[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

Задает объекты для обновления. Вы также можете передать объект для обновления по конвейеру до Update-List.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Property

Указывает свойство, содержащее обновляемую коллекцию. Если этот параметр опущен, возвращает объект , Update-List представляющий изменение, а не изменение объекта .

Type:String
Position:0
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Remove

Задает значения свойств, которые необходимо удалить из коллекции.

Type:Object[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Replace

Задает новую коллекцию. Этот параметр заменяет все элементы в исходной коллекции новыми элементами, которые определяются этим параметром.

Type:Object[]
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

Входные данные

PSObject

Объекты, которые будут обновлены, можно передать по конвейеру в Update-List.

Выходные данные

Objects or System.Management.Automation.PSListModifier

Update-List возвращает обновленный объект или объект , представляющий действие обновления.