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, этот командлет вернет обновленный объект.