Поиск по сайту:

Update-List (Microsoft.PowerShell.Utility)


Update-List

Модуль:
Microsoft.PowerShell.Utility

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

Синтаксис

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

Описание

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

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

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

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

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

Примеры

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

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

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♥

Пример 4. Применение набора изменений к объекту списка

Если вы не укажете свойство, Update-List возвращает хеш-таблицу, описывающую обновление, вместо обновления объекта. Вы можете преобразовать хеш-таблицу в объект System.PSListModifier и использовать метод ApplyTo(), чтобы применить набор изменений к списку.

$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

Параметры

-Add

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

Тип :

Object[]

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-InputObject

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

Тип :

PSОбъект

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

True

Принимайте подстановочные знаки:

False

-Property

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

Тип :

String

Позиция:

0

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Remove

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

Тип :

Object[]

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Replace

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

Тип :

Object[]

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

True

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

Входы

PSObject

Вы можете передать обновляемый объект этому командлету.

Выходы

Хеш-таблица

По умолчанию этот командлет возвращает хеш-таблицу, описывающую обновление.

Объект

Если вы укажете параметр Property, этот командлет вернет обновленный объект.