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 |
Входные данные
Объекты, которые будут обновлены, можно передать по конвейеру в Update-List
.
Выходные данные
Objects or System.Management.Automation.PSListModifier
Update-List
возвращает обновленный объект или объект , представляющий действие обновления.