Dela via


Update-List

Lägger till objekt i och tar bort objekt från ett egenskapsvärde som innehåller en samling objekt.

Syntax

AddRemoveSet (Standard)

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

ReplaceSet

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

Description

Cmdleten Update-List lägger till, tar bort eller ersätter objekt i ett egenskapsvärde för ett objekt och returnerar det uppdaterade objektet. Den här cmdleten är utformad för egenskaper som innehåller samlingar med objekt.

Parametrarna Lägg till och Ta bort lägger till enskilda objekt i och tar bort dem från samlingen. Parametern Replace ersätter hela samlingen.

Om du inte anger en egenskap i kommandot returnerar Update-List en hashtable som beskriver uppdateringen i stället för att uppdatera objektet. Senare kan du använda den här ändringsuppsättningen för att uppdatera ett listobjekt.

Den här cmdleten fungerar bara när egenskapen som uppdateras stöder det IList--gränssnitt som Update-List använder. Dessutom måste alla Set cmdletar som accepterar en uppdatering ha stöd för gränssnittet IList.

Den här cmdleten återinfördes i PowerShell 7.

Exempel

Exempel 1: Lägga till objekt i ett egenskapsvärde

I det här exemplet skapar vi en klass som representerar en kortlek där korten lagras som ett listobjekt samlingsobjekt. Metoden NewDeck() använder Update-Listför att lägga till en fullständig kortlek i samlingen 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() }
}

Anmärkning

Cmdleten Update-List matar ut det uppdaterade objektet till pipelinen. Vi skicka utdata till Out-Null för att förhindra den oönskade visningen.

Exempel 2: Lägga till och ta bort objekt i en samlingsegenskap

Om vi fortsätter med koden i exempel 1 skapar vi instanser av klassen Cards för att representera en kortlek och korten som innehas av två spelare. Vi använder cmdleten Update-List för att lägga till kort i spelarnas händer och för att ta bort kort från kortleken.

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

Utdata visar kortlekens tillstånd innan korten delades ut till spelarna. Du kan se att varje spelare fick fem kort från leken. Den slutliga utdata visar tillståndet för kortleken efter att ha handlat korten till spelarna. Update-List användes för att välja korten från kortleken och lägga till dem i spelarnas samling. Sedan togs spelarnas kort bort från leken med hjälp av Update-List.

Exempel 3: Lägga till och ta bort objekt i ett enda kommando

Update-List gör att du kan använda parametrarna Lägg till och Ta bort i ett enda kommando. I det här exemplet vill spelare 1 ta bort 4♦ och 6♦ och få två nya kort.

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

Exempel 4: Tillämpa en ändringsuppsättning på ett listobjekt

Om du inte anger en egenskap returnerar Update-List en hashtable som beskriver uppdateringen i stället för att uppdatera objektet. Du kan omvandla hashtabellen till ett System.PSListModifier--objekt och använda metoden ApplyTo() för att tillämpa ändringsuppsättningen på en 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

Parametrar

-Add

Anger de egenskapsvärden som ska läggas till i samlingen. Ange värdena i den ordning som de ska visas i samlingen.

Parameteregenskaper

Typ:

Object[]

Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

AddRemoveSet
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-InputObject

Anger vilka objekt som ska uppdateras. Du kan också skicka det objekt som ska uppdateras till Update-List.

Parameteregenskaper

Typ:PSObject
Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:True
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-Property

Anger den egenskap som innehåller samlingen som uppdateras. Om du utelämnar den här parametern returnerar Update-List ett objekt som representerar ändringen i stället för att ändra objektet.

Parameteregenskaper

Typ:String
Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:0
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-Remove

Anger de egenskapsvärden som ska tas bort från samlingen.

Parameteregenskaper

Typ:

Object[]

Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

AddRemoveSet
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-Replace

Anger en ny samling. Den här parametern ersätter alla objekt i den ursprungliga samlingen med de objekt som anges av den här parametern.

Parameteregenskaper

Typ:

Object[]

Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

ReplaceSet
Position:Named
Obligatorisk:True
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

CommonParameters

Den här cmdleten stöder vanliga parametrar: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction och -WarningVariable. Mer information finns i about_CommonParameters.

Indata

PSObject

Du kan skicka det objekt som ska uppdateras till den här cmdleten.

Utdata

Hashtable

Som standard returnerar den här cmdleten en hashtable som beskriver uppdateringen.

Object

När du anger parametern egenskap returnerar den här cmdleten det uppdaterade objektet.