Megosztás a következőn keresztül:


Az_Tömbökről

Rövid leírás

A tömböket ismerteti, amelyek olyan adatstruktúrák, amelyeket elemek gyűjteményeinek tárolására terveztek.

Hosszú leírás

A tömbök olyan adatszerkezetek, amelyek elemek gyűjteményének tárolására szolgálnak. Az elemek lehetnek azonosak vagy különbözőek.

A Windows PowerShell 3.0-tól kezdve egy nulla vagy egy objektumból álló gyűjtemény tömbök bizonyos tulajdonságaival rendelkezik.

Tömb létrehozása és inicializálása

Tömb létrehozásához és inicializálásához rendeljen hozzá több értéket egy változóhoz. A tömbben tárolt értékek vesszővel vannak elválasztva egymástól, és a változó nevétől a hozzárendelési operátor (=) választja el őket.

Ha például egy $A nevű tömböt szeretne létrehozni, amely a 22, 5, 10, 8, 12, 9 és 80 numerikus (egész) értéket tartalmazza, írja be a következőt:

$A = 22,5,10,8,12,9,80

A vesszővel inicializálhat egy elemtömböt úgy is, hogy a vesszőt az egyetlen elem elé helyezi.

Ha például egy $B nevű elemtömböt szeretne létrehozni, amely egyetlen 7 értéket tartalmaz, írja be a következőt:

$B = ,7

Tömböt a tartomány operátor (..) használatával is létrehozhat és inicializálhat. Az alábbi példa egy 5–8 értéket tartalmazó tömböt hoz létre.

$C = 5..8

Ennek eredményeként a $C négy értéket tartalmaz: 5, 6, 7 és 8.

Ha nincs megadva adattípus, a PowerShell minden tömböt objektumtömbként hoz létre (System.Object[]). A tömb adattípusának meghatározásához használja a GetType() metódust. Például:

$A.GetType()

Erősen típusos tömb létrehozásához, azaz egy olyan tömbhöz, amely csak egy adott típusú értéket tartalmazhat, alakítsa át a változót tömbtípusként, például string[], long[]vagy int32[]. Tömb beírásához a változó nevét zárójelek közé zárt tömbtípussal előzze meg. Például:

[int32[]]$ia = 1500, 2230, 3350, 4000

Ennek eredményeképpen a $ia tömb csak egész számokat tartalmazhat.

Létrehozhat olyan tömböket, amelyek bármelyik támogatott típusra át vannak alakítva a .NET-ben. Például a Get-Process által lekérdezett objektumok, amelyek a folyamatok reprezentálására szolgálnak, a System.Diagnostics.Process típusúak. A folyamatobjektumok erősen típusos tömbjének létrehozásához írja be a következő parancsot:

[Diagnostics.Process[]]$zz = Get-Process

A tömb rész-kifejezés operátora

A tömb alkifejezés-operátora létrehoz egy tömböt a benne lévő utasításokból. Bármi is az operátoron belüli utasítás eredménye, az operátor egy tömbbe helyezi. Még akkor is, ha nulla vagy egy objektum van.

A tömb operátor szintaxisa a következő:

@( ... )

A tömb operátorral nullából vagy egy objektumból álló tömböt hozhat létre. Például:

$a = @("Hello World")
$a.Count
1
$b = @()
$b.Count
0

A tömb operátor akkor hasznos a szkriptekben, ha objektumokat kap, de nem tudja, hogy hányra számíthat. Például:

$p = @(Get-Process Notepad)

A tömb al-kifejezés operátorával kapcsolatos további információkért lásd about_Operators.

Tömbelemek elérése és használata

Tömb olvasása

Egy tömbre a változó nevével hivatkozhat. A tömb összes elemének megjelenítéséhez hívja meg a tömb nevét. A $a például a 0-9 számok tömbje:

$a
0
1
2
3
4
5
6
7
8
9

Egy tömb elemeire index használatával hivatkozhat. Az indexszámot szögletes zárójelek közé kell foglalni. Az indexértékek 0kezdődnek. Ha például a $a tömb első elemét szeretné megjeleníteni, írja be a következőt:

$a[0]
0

A $a tömb harmadik elemének megjelenítéséhez írja be a következőt:

$a[2]
2

A tömb egy részét lekérheti az index tartományoperátorával. A tömb második-ötödik elemeinek lekéréséhez például a következőt kell beírnia:

$a[1..4]
1
2
3
4

A negatív számok a tömb végétől számítanak. A -1 például a tömb utolsó elemére hivatkozik. A tömb utolsó három elemének megjelenítéséhez az index növekvő sorrendjében írja be a következőt:

$a = 0 .. 9
$a[-3..-1]
7
8
9

Ha csökkenő sorrendbe írja be a negatív indexeket, a kimenet megváltozik.

$a = 0 .. 9
$a[-1..-3]
9
8
7

Ennek a jelölésnek a használatakor azonban legyen óvatos. A jelölési ciklusok a véghatártól a tömb elejéig terjednek.

$a = 0 .. 9
$a[2..-2]
2
1
0
9
8

Az is gyakori hiba, ha feltételezzük, hogy $a[0..-2] a tömb minden elemére vonatkozik, kivéve az utolsót. A tömb első, utolsó és utolsó előtti elemére hivatkozik.

A plusz operátor (+) használatával egyesíthet egy tartományt egy tömb elemeinek listájával. Ha például a 0, 2 és 4–6 indexpozícióban szeretné megjeleníteni az elemeket, írja be a következőt:

$a = 0 .. 9
$a[0,2+4..6]
0
2
4
5
6

Emellett több tartomány és egyedi elem listázásához használhatja a plusz operátort is. Például az elemek nullától kettőig, négytől hatig, és az elem a nyolcadik pozícióban:

$a = 0..9
$a[+0..2+4..6+8]
0
1
2
4
5
6
8

Tömbelemek iterálása

A tömb elemeire hivatkozhat ismétlődő struktúrák, például a foreach, forés while ciklusok használatával is. Ha például egy foreach hurkot szeretne használni a $a tömb elemeinek megjelenítéséhez, írja be a következőt:

$a = 0..9
foreach ($element in $a) {
  $element
}
0
1
2
3
4
5
6
7
8
9

A foreach hurok végighalad a tömbön, és a tömb minden értékét visszaadja, amíg el nem éri a tömb végét.

A for hurok akkor hasznos, ha számlálókat növektet egy tömb elemeinek vizsgálata során. Ha például egy for ciklust szeretne használni egy tömb minden más értékének visszaadásához, írja be a következőt:

$a = 0..9
for ($i = 0; $i -le ($a.length - 1); $i += 2) {
  $a[$i]
}
0
2
4
6
8

Egy while hurok használatával megjelenítheti a tömb elemeit, amíg egy megadott feltétel már nem igaz. Ha például meg szeretné jeleníteni az elemeket a $a tömbben, amíg a tömbindex 4-nél kisebb, írja be a következőt:

$a = 0..9
$i=0
while($i -lt 4) {
  $a[$i]
  $i++
}
0
1
2
3

Tömbök tulajdonságai

Count, Length vagy LongLength

Annak meghatározásához, hogy hány elem van egy tömbben, használja a tulajdonságot Length vagy annak Count aliasát. A Longlength akkor hasznos, ha a tömb több mint 2 147 483 647 elemet tartalmaz.

$a = 0..9
$a.Count
$a.Length
10
10

Rank

A tömbben lévő dimenziók számát adja vissza. A PowerShell legtöbb tömbje csak egy dimenzióval rendelkezik. Még akkor is, ha úgy gondolja, hogy többdimenziós tömböt hoz létre, mint az alábbi példa:

$a = @(
  @(0,1),
  @("b", "c"),
  @(Get-Process)
)

"`$a rank: $($a.Rank)"
"`$a length: $($a.Length)"
"`$a[2] length: $($a[2].Length)"
"Process `$a[2][1]: $($a[2][1].ProcessName)"

Ebben a példában egy olyan egydimenziós tömböt hoz létre, amely más tömböket tartalmaz. Ez más néven egy szaggatott tömb. A Rank tulajdonság bebizonyította, hogy ez egydimenziós. A szaggatott tömb elemeinek eléréséhez az indexeknek külön zárójelben kell lenniük ([]).

$a rank: 1
$a length: 3
$a[2] length: 348
Process $a[2][1]: AcroRd32

A többdimenziós tömbök sor-fő sorrendben vannak tárolva. Az alábbi példa bemutatja, hogyan hozhat létre egy valóban többdimenziós tömböt.

[string[,]]$rank2 = [string[,]]::New(3,2)
$rank2.rank
$rank2.Length
$rank2[0,0] = 'a'
$rank2[0,1] = 'b'
$rank2[1,0] = 'c'
$rank2[1,1] = 'd'
$rank2[2,0] = 'e'
$rank2[2,1] = 'f'
$rank2[1,1]
2
6
d

Ha többdimenziós tömb elemeihez szeretne hozzáférni, az indexeket vesszővel (,) kell elválasztani egyetlen zárójelen ([]) belül.

A többdimenziós tömbök egyes műveletei, például a replikáció és az összefűzés megkövetelik, hogy a tömb összeolvadjon. Az összesimítás a tömböt nem korlátozott típusú, egydimenziós tömbté alakítja. Az eredményként kapott tömb sorszintű sorrendben veszi fel az összes elemet. Vegye figyelembe a következő példát:

$a = "red",$true
$b = (New-Object 'int[,]' 2,2)
$b[0,0] = 10
$b[0,1] = 20
$b[1,0] = 30
$b[1,1] = 40
$c = $a + $b
$a.GetType().Name
$b.GetType().Name
$c.GetType().Name
$c

A kimenet azt mutatja, hogy a $c egy 1 dimenziós tömb, amely az $a és $b sor-fő sorrendben lévő elemeit tartalmazza.

Object[]
Int32[,]
Object[]
red
True
10
20
30
40

Tömbök metódusai

Clear

Az összes elemértéket a tömb elemtípusának alapértelmezett értékre állítja. A Clear() metódus nem állítja vissza a tömb méretét.

Az alábbi példában $a egy objektumtömb.

$a = 1, 2, 3
$a.Clear()
$a | % { $null -eq $_ }
True
True
True

Ebben a példában a $intA kifejezetten egész számokat tartalmaz.

[int[]] $intA = 1, 2, 3
$intA.Clear()
$intA
0
0
0

ForEach()

Lehetővé teszi a tömb minden elemének iterálását, és adott műveletet hajthat végre a tömb minden eleméhez.

A ForEach() metódus több túlterhelést is alkalmaz, amelyek különböző műveleteket hajtanak végre.

ForEach(scriptblock expression)
ForEach(scriptblock expression, object[] arguments)
ForEach(type convertToType)
ForEach(string propertyName)
ForEach(string propertyName, object[] newValue)
ForEach(string methodName)
ForEach(string methodName, object[] arguments)

ForEach(scriptblock kifejezés)

ForEach(scriptblock kifejezés, objektum[] argumentumok)

Ez a metódus a PowerShell 4-ben lett hozzáadva.

Megjegyzés:

A szintaxis használatához szkriptblokk szükséges. A zárójelek megadása nem kötelező, ha a szkriptblokk az egyetlen paraméter. A metódus és a nyitó zárójel között nem lehet szóköz.

Az alábbi példa a ForEach() metódus használatát mutatja be. Ebben az esetben a szándék a tömb elemeinek négyzetértékének generálása.

$a = @(0 .. 3)
$a.ForEach({ $_ * $_})
0
1
4
9

A ForEach-Object paraméteréhez hasonlóan a arguments paraméter lehetővé teszi egy argumentumtömb átadását egy olyan szkriptblokknak, amely konfigurálva van az elfogadásukra.

Az ArgumentListviselkedésével kapcsolatos további információkért lásd: about_Splatting.

ForEach(írja be a convertToType típust)

A ForEach() metódussal az elemek más típusúak lehetnek; Az alábbi példa bemutatja, hogyan konvertálhatja a sztringdátumok listáját [DateTime] típussá.

("1/1/2017", "2/1/2017", "3/1/2017").ForEach([datetime])

Sunday, January 1, 2017 12:00:00 AM
Wednesday, February 1, 2017 12:00:00 AM
Wednesday, March 1, 2017 12:00:00 AM

ForEach(karakterlánc tulajdonságNév)

ForEach(karakterlánc tulajdonságNév, objektum[] újÉrték)

A ForEach() metódus használható a gyűjtemény minden eleméhez tartozó tulajdonságértékek lekérésére vagy beállítására is.

# Set all LastAccessTime properties of files to the current date.
(dir 'C:\Temp').ForEach('LastAccessTime', (Get-Date))
# View the newly set LastAccessTime of all items, and find Unique entries.
(dir 'C:\Temp').ForEach('LastAccessTime') | Get-Unique
Wednesday, June 20, 2018 9:21:57 AM

ForEach(karakterláncmetódus neve)

ForEach(string methodName, objektumok[] argumentumok)

Végül ForEach() metódusok használatával a gyűjtemény minden elemén végrehajthat egy metódust.

("one", "two", "three").ForEach("ToUpper")
ONE
TWO
THREE

A ForEach-Object paraméteréhez hasonlóan a arguments paraméter lehetővé teszi egy értéktömb átadását egy olyan szkriptblokknak, amely konfigurálva van az elfogadásukra.

Megjegyzés:

A Windows PowerShell 3.0-tól kezdve a tulajdonságok lekérése és a metódusok végrehajtása a gyűjtemény minden eleméhez "Skaláris objektumok és gyűjtemények metódusai" használatával is elvégezhető. Erről itt olvashat bővebben about_Methods.

Ahol()

Lehetővé teszi a tömb elemeinek szűrését vagy kijelölését. A szkriptnek más értékekre kell kiértékelnie, mint: nulla (0), üres sztring, $false vagy $null, hogy az elem megjelenjen a Where()után. A logikai értékeléssel kapcsolatos további információkért lásd a about_Booleansrészt.

A Where() metódusnak egy definíciója van.

Where(scriptblock expression[, WhereOperatorSelectionMode mode
                            [, int numberToReturn]])

Megjegyzés:

A szintaxis használatához szkriptblokk szükséges. A zárójelek megadása nem kötelező, ha a szkriptblokk az egyetlen paraméter. A metódus és a nyitó zárójel között nem lehet szóköz.

A Expression egy szkriptblokk, amely a szűréshez szükséges, a mode választható argumentum további kijelölési képességeket tesz lehetővé, a numberToReturn választható argumentum pedig lehetővé teszi a szűrőből visszaadott elemek számának korlátozását.

A mode értékének egy WhereOperatorSelectionMode számértéknek kell lennie:

  • Default (0) – Az összes elem visszaadása
  • First (1) – Az első elem visszaadása
  • Last (2) – Az utolsó elem visszaadása
  • SkipUntil (3) – Kihagyja az elemeket, amíg a feltétel nem teljesül, adja vissza az összes fennmaradó elemet (beleértve az első elemet is, amelyre a feltétel igaz)
  • Until (4) – Adja vissza az összes elemet, amíg a feltétel nem teljesül
  • Split (5) – Két elemből álló tömböt ad vissza
    • Az első elem egyező elemeket tartalmaz
    • A második elem a fennmaradó elemeket tartalmazza

Az alábbi példa bemutatja, hogyan választhatja ki az összes páratlan számot a tömbből.

(0..9).Where{ $_ % 2 }
1
3
5
7
9

Ez a példa bemutatja, hogyan választhatja ki a nem üres sztringeket.

('hi', '', 'there').Where({$_.Length})
hi
there

Default

A Default mód a Expression szkriptblokk használatával szűri az elemeket.

Ha egy numberToReturn van megadva, a visszaadandó elemek maximális számát adja meg.

# Get the zip files in the current users profile, sorted by LastAccessTime
$Zips = dir $env:userprofile -Recurse '*.zip' | Sort-Object LastAccessTime
# Get the least accessed file over 100MB
$Zips.Where({$_.Length -gt 100MB}, 'Default', 1)

Megjegyzés:

Mind a Default mód, mind a First mód az első (numberToReturn) elemet adja vissza, és felcserélhető.

Last

$h = (Get-Date).AddHours(-1)
$logs = dir 'C:\' -Recurse '*.log' | Sort-Object CreationTime
# Find the last 5 log files created in the past hour
$logs.Where({$_.CreationTime -gt $h}, 'Last', 5)

SkipUntil

A SkipUntil mód kihagyja a gyűjtemény összes objektumát, amíg egy objektum át nem adja a szkriptblokk kifejezésszűrőt. Ezután visszaadja az összes fennmaradó gyűjteményelemet tesztelés nélkül. Csak egy átadott elem van tesztelve.

Ez azt jelenti, hogy a visszaadott gyűjtemény átmenő és nem átmenő elemeket is tartalmaz, amelyek nincsenek tesztelve NEM.

A visszaadott elemek száma korlátozható, ha értéket ad át a numberToReturn argumentumnak.

$computers = "Server01", "Server02", "Server03", "localhost", "Server04"
# Find the first available online server.
$computers.Where({ Test-Connection $_ }, 'SkipUntil', 1)
localhost

Until

A Until mód megfordítja a SkipUntil módot. Visszaadja összes elemet egy gyűjteményben, amíg egy elem nem felel meg a szkriptblokk kifejezésének. Miután egy elem átadja a szkriptblokk kifejezés, a Where() metódus leállítja az elemek feldolgozását.

Ez azt jelenti, hogy a sikertelen elemek első készletét kapja meg a Where() módszerből. Miután egy elem áthalad, a többi NEM tesztelve vagy visszaadva.

A visszaadott elemek száma korlátozható, ha értéket ad át a numberToReturn argumentumnak.

# Retrieve the first set of numbers less than or equal to 10.
(1..50).Where({$_ -gt 10}, 'Until')
# This would perform the same operation.
(1..50).Where({$_ -le 10})
1
2
3
4
5
6
7
8
9
10

Megjegyzés:

Mind a Until, mind a SkipUntil annak az elvnek alapján működik, hogy egy tételt nem tesztelnek.

a első PASSelőtti elemeket adja vissza. az első után összes elemet visszaadja, beleértve az első átadott elemet is.

Split

A Split mód két különálló gyűjteményre bontja vagy csoportosítja a gyűjteményelemeket. Azok, amelyek megfelelnek a scriptblock kifejezésnek, és azok, amelyek nem.

Ha egy numberToReturn van megadva, az első gyűjtemény tartalmazza az -t, amely elemeket ad át, és a megadott értéket nem haladja meg.

A többi objektum, még azok is, amelyek PASS a kifejezésszűrőt, a második gyűjteményben lesznek visszaadva.

$running, $stopped = (Get-Service).Where({$_.Status -eq 'Running'}, 'Split')
$running
Status   Name               DisplayName
------   ----               -----------
Running  Appinfo            Application Information
Running  AudioEndpointBu... Windows Audio Endpoint Builder
Running  Audiosrv           Windows Audio
...
$stopped
Status   Name               DisplayName
------   ----               -----------
Stopped  AJRouter           AllJoyn Router Service
Stopped  ALG                Application Layer Gateway Service
Stopped  AppIDSvc           Application Identity
...

Megjegyzés:

A ForEach() és Where() metódusok is belső tagok. További információ a belső tagokról: about_Instrinsic_Members.

Tömb tagjainak lekérése

Egy tömb tulajdonságainak és metódusainak (például a Length tulajdonságnak és a SetValue metódusnak) lekéréséhez használja a parancsmag Get-Member paraméterét.

Ha egy tömböt Get-Membercsövez, a PowerShell egyenként küldi el az elemeket, és Get-Member a tömb egyes elemeinek típusát adja vissza (figyelmen kívül hagyva az ismétlődéseket).

Az InputObject paraméter használatakor Get-Member a tömb tagjait adja vissza.

Például az alábbi parancs lekéri a $a tömbváltozó tagjait.

Get-Member -InputObject $a

A tömb tagjait le is kérheti úgy, hogy beír egy vesszőt (,) az Get-Member parancsmagba átirányított érték elé. A vessző a tömböt egy olyan tömbökből álló tömb második elemévé teszi. A PowerShell egyenként csövezi a tömböket, és Get-Member visszaadja a tömb tagjait. Mint a következő két példa.

,$a | Get-Member

,(1,2,3) | Get-Member

Egy tömb manipulálása

Módosíthatja a tömb elemeit, hozzáadhat egy elemet egy tömbhöz, és összevonhatja a két tömb értékeit egy harmadik tömbbe.

Egy tömb adott elemének értékének módosításához adja meg a módosítani kívánt elem tömbnevét és indexét, majd a hozzárendelési operátor (=) használatával adjon meg egy új értéket az elemhez. Ha például a $a tömb második elemének értékét (1. indexpozíció) 10-esre szeretné módosítani, írja be a következőt:

$a[1] = 10

Egy tömb SetValue metódusával is módosíthatja az értékeket. Az alábbi példa a $a tömb második értékét (1. indexpozícióját) 500-ra módosítja:

$a.SetValue(500,1)

A += operátorral elemet adhat hozzá egy tömbhöz. Az alábbi példa bemutatja, hogyan adhat hozzá elemet a $a tömbhöz.

$a = @(0..4)
$a += 5

Megjegyzés:

A += operátor használatakor a PowerShell ténylegesen létrehoz egy új tömböt az eredeti tömb értékeivel és a hozzáadott értékkel. Ez teljesítményproblémákat okozhat, ha a művelet többször ismétlődik, vagy a tömb mérete túl nagy.

Nem könnyű elemeket törölni egy tömbből, de létrehozhat egy új tömböt, amely csak a meglévő tömb kijelölt elemeit tartalmazza. Ha például a $t tömböt a $a tömb összes elemével szeretné létrehozni, kivéve a 2. indexpozícióban lévő értéket, írja be a következőt:

$t = $a[0,1 + 3..($a.length - 1)]

Ha két tömböt egyetlen tömbbe szeretne egyesíteni, használja a plusz operátort (+). Az alábbi példa két tömböt hoz létre, egyesíti őket, majd megjeleníti az eredményül kapott egyesített tömböt.

$x = 1,3
$y = 5,9
$z = $x + $y

Ennek eredményeként a $z tömb 1, 3, 5 és 9 értéket tartalmaz.

Tömb törléséhez rendeljen hozzá egy $null értéket a tömbhöz. Az alábbi parancs törli a tömböt a $a változóban.

$a = $null

Használhatja a Remove-Item parancsmagot is, de a $null értékének hozzárendelése gyorsabb, különösen nagy tömbök esetén.

Nulla vagy egy elemet tartalmazó tömbök

A Windows PowerShell 3.0-tól kezdődően egy nulla vagy egy objektum gyűjteménye rendelkezik a és tulajdonságokkal CountLength . Emellett egy objektum tömbjébe is indexelhet. Ez a funkció segít elkerülni azokat a szkriptelési hibákat, amelyek akkor fordulnak elő, ha egy gyűjteményre számított parancs kettőnél kevesebb elemet kap.

Az alábbi példa azt mutatja, hogy egy objektumokat nem tartalmazó változó Count és Length értéke 0.

PS> $a = $null
PS> $a.Count
0
PS> $a.Length
0

Az alábbi példa bemutatja, hogy egy objektumot tartalmazó változó Count és Length értéke egyaránt 1. Az objektum értékének eléréséhez tömbindexelést is használhat.

PS> $a = 4
PS> $a.Count
1
PS> $a.Length
1
PS> $a[0]
4
PS> $a[-1]
4

Ha olyan parancsot futtat, amely gyűjteményt vagy egyetlen objektumot adhat vissza, tömbindexelés használatával anélkül érheti el az objektum értékét, hogy tesztelnie kellene a Count vagy Length tulajdonságait. Ha azonban az eredmény egyetlen objektum (singleton), és az objektum egy Count vagy Length tulajdonsággal rendelkezik, a tulajdonságok értéke az egytáblás objektumhoz tartozik, és nem a gyűjtemény elemeinek számát jelöli.

Az alábbi példában a parancs egyetlen sztringobjektumot ad vissza. A Length sztring az 4.

PS> $result = 'one','two','three','four' | Where-Object {$_ -like 'f*'}
PS> $result.GetType().FullName
System.String
PS> $result
four
PS> $result.Count
1
PS❯ $result.Length
4

Ha azt szeretné, hogy $result sztringek tömbje legyen, deklarálnia kell a változót tömbként.

Ebben a példában a $result sztringek tömbje. A tömb Count és Length1, az első elem Length pedig 4.

PS> [string[]]$result = 'one','two','three','four' |
    Where-Object {$_ -like 'f*'}
PS> $result.GetType().FullName
System.String[]
PS> $result
four
PS> $result.Count
1
PS> $result.Length
1
PS> $result[0].Length
4

A System.Tuple objektumok indexelési támogatása.

A PowerShell 6.1 a tömbökhöz hasonlóan hozzáadta Tuple objektumok indexelt hozzáférésének támogatását. Például:

PS> $tuple = [Tuple]::Create(1, 'test')
PS> $tuple[0]
1
PS> $tuple[1]
test
PS> $tuple[0..1]
1
test
PS> $tuple[-1]
test

A tömböktől és más gyűjteményobjektumoktól eltérően a Tuple objektumok egyetlen objektumként lesznek kezelve, amikor a csatornán keresztül haladnak, vagy olyan paraméterek által, amelyek támogatják az objektumtömböket.

További információ: rendszer.Tuple.

A IDictionary<TKey, TValue> implementáló .NET-típusok indexelése

A PowerShell nem hívja meg a típus valódi indexelőjét az általános IDictionary<TKey, TValue> felületet implementáló típusok esetében. A kulcs megadásakor a PowerShell a kulcs meglétét teszteli a TryGetValue()használatával, amely $null ad vissza, ha a kulcs nem létezik.

Ezzel szemben, ha a típus valódi indexelőjét Item(<key>)használatával hívja meg, a metódus kivételt jelez, ha a kulcs nem létezik.

Az alábbi példa a különbséget szemlélteti.

PS> [Collections.Generic.Dictionary[string, int]]::new()['nosuchkey']
# No output ($null)

PS> [Collections.Generic.Dictionary[string, int]]::new().Item('nosuchkey')
GetValueInvocationException: Exception getting "Item": "The given key 'nosuchkey'
 was not present in the dictionary."

Taghozzáférés felsorolása

A PowerShell 3.0-tól kezdve, amikor a taghozzáférési operátort használja egy olyan tag eléréséhez, amely nem szerepel egy listagyűjteményben, a PowerShell automatikusan számba veszi a gyűjtemény elemeit, és megkísérli elérni a megadott tagot az egyes elemeken. További információ: about_Member-Access_Enumeration.

Példák

Az alábbi példa két új fájlt hoz létre, és az eredményként kapott objektumokat a $filestömbváltozóban tárolja. Mivel a tömbobjektum nem rendelkezik LastWriteTime tagmal, a rendszer a tömb minden eleméhez visszaadja a LastWriteTime értékét.

$files = (New-Item -Type File -Force '/temp/t1.txt'),
         (New-Item -Force -Type File '/temp/t2.txt')
$files.LastWriteTime
Friday, June 25, 2021 1:21:17 PM
Friday, June 25, 2021 1:21:17 PM

A taghozzáférés-számbavétel lehetővé teszi értékek lekérését egy gyűjtemény elemeiből, de nem értékeket beállítani egy gyűjtemény elemein. Például:

$files.LastWriteTime = (Get-Date).AddDays(-1)
InvalidOperation: The property 'LastWriteTime' cannot be found on this object.
Verify that the property exists and can be set.

Az értékek beállításához egy metódust kell használnia.

$files.set_LastWriteTime((Get-Date).AddDays(-1))
$files.LastWriteTime
Thursday, June 24, 2021 1:23:30 PM
Thursday, June 24, 2021 1:23:30 PM

A metódus a FileInfo objektum rejtett tagja. Az alábbi példa bemutatja, hogyan találhatja meg a rejtettset metódussal rendelkező tagokat.

$files | Get-Member | Where-Object Definition -like '*set;*'
   TypeName: System.IO.FileInfo

Name              MemberType Definition
----              ---------- ----------
Attributes        Property   System.IO.FileAttributes Attributes {get;set;}
CreationTime      Property   datetime CreationTime {get;set;}
CreationTimeUtc   Property   datetime CreationTimeUtc {get;set;}
IsReadOnly        Property   bool IsReadOnly {get;set;}
LastAccessTime    Property   datetime LastAccessTime {get;set;}
LastAccessTimeUtc Property   datetime LastAccessTimeUtc {get;set;}
LastWriteTime     Property   datetime LastWriteTime {get;set;}
LastWriteTimeUtc  Property   datetime LastWriteTimeUtc {get;set;}

Figyelmeztetés

Mivel a metódus a gyűjtemény minden elemén végrehajtásra kerül, ügyelni kell, amikor olyan metódusokat hívunk meg, amelyek a tagok felsorolását használják.

Lásd még