about_Arrays

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 a változó nevétől a hozzárendelési operátor (=).

Ha például egy 22, 5, 10, 8, 12, 9 és 80 numerikus (egész) értéket tartalmazó tömböt $A szeretne létrehozni, í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 7-es értéket tartalmazó elemtömböt $B szeretne létrehozni, í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 $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 metódust GetType() . Példa:

$A.GetType()

Erősen gépelt tömb létrehozásához, azaz egy olyan tömbhöz, amely csak egy adott típusú értéket tartalmazhat, tömbtípusként (például sztring[], long[] vagy int32[]) adhatja meg a változót. 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élda:

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

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

A .NET bármely támogatott típusára leadott tömböket létrehozhat. A folyamatokat Get-Process ábrázoló objektumok például System.Diagnostics.Process típusúak. A folyamatobjektumok erősen beírt tömbjének létrehozásához írja be a következő parancsot:

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

A tömb sub-expression 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 legyen az operátoron belüli utasítás, 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élda:

$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élda:

$p = @(Get-Process Notepad)

A tömb sub-expression 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. Például $a 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 kezdete: 0. A tömb első elemének megjelenítéséhez például írja be a $a következőt:

$a[0]
0

A tömb harmadik elemének megjelenítéséhez írja be a $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

Negatív számok száma a tömb végéről. Például -1 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 egyik gyakori hiba az is, hogy feltételezzük $a[0..-2] , hogy a tömb minden elemére hivatkozik, kivéve az utolsót. A tömb első, utolsó és második az utolsó elemére hivatkozik.

A plusz operátorral (+) kombinálhat tartományokat 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 a nullától a kettőig, a négy-hathoz, az elem pedig a nyolcadik pozíciótípushoz:

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

Iterációk tömbelemeken

A tömb elemeire is hivatkozhat hurkos szerkezetekkel, például foreach, forés while hurkokkal. Ha például hurkot foreach szeretne használni a tömb elemeinek megjelenítéséhez, írja be a $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 hurkot szeretne használni egy for 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

Hurok használatával while megjelenítheti az elemeket egy tömbben, amíg egy megadott feltétel már nem igaz. Ha például a tömb elemeit $a 4-nél kisebb tömbindex esetén szeretné megjeleníteni, í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

Countvagy LengthLongLength

Ha meg szeretné állapítani, hogy hány elem van egy tömbben, használja a Length tulajdonságot vagy annak aliasát Count . A hosszú hossz 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. Ezt szaggatott tömbnek is nevezik. 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 sorszintű 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 elemeit szeretné elé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. Vegyük 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 $c egy 1 dimenziós tömb, amely sor-fő sorrendben tartalmazza $b az elemeket$a.

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ékére állítja be. A Clear() metódus nem állítja vissza a tömb méretét.

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

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

Ebben a példában explicit módon írja be az $intA egész számokat.

[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.

Feljegyzé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 módszer és a nyitó zárójel vagy zárójel között nem lehet szóköz.

Az alábbi példa a metódus használatát ForEach() mutatja be. Ebben az esetben a cél a tömb elemeinek négyzetértéke.

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

Az Argumentumlista paraméterhez ForEach-Objecthasonló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 Argumentumlista működé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úvá alakíthatók. Az alábbi példa bemutatja, hogyan konvertálható a sztringdátumok listája típussá [DateTime] .

("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(string propertyName)

ForEach(string propertyName, object[] newValue)

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(string methodName)

ForEach(string methodName, object[] argumentumok)

Lastly, ForEach() metódusok használhatók egy metódus végrehajtására a gyűjtemény minden elemén.

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

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

Feljegyzé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 about_Methods olvashat bővebben.

Hol()

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

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

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

Feljegyzé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 módszer és a nyitó zárójel vagy zárójel között nem lehet szóköz.

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

Az értéknek mode WhereOperatorSelectionMode enumerálási é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) – Hagyja ki az elemeket, amíg a feltétel igaz, adja vissza az összes többi 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 visszaadása
    • 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 jelölheti ki a nem üres sztringeket.

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

Default

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

Ha van megadva numberToReturn , 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)

Feljegyzés

Mind a módFirst, mind a Default 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 lépi a szkriptblokk kifejezésszűrőt. Ezután tesztelés nélkül visszaadja az ÖSSZES fennmaradó gyűjteményelemet. A rendszer csak egy átadott elemet tesztel.

Ez azt jelenti, hogy a visszaadott gyűjtemény olyan átmenő és nem átmenő elemeket is tartalmaz, amelyeket NEM teszteltek.

A visszaadott elemek száma korlátozható, ha értéket ad át az 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. A gyűjtemény ÖSSZES elemét adja vissza, amíg egy elem át nem adja a szkriptblokk kifejezését. Miután egy elem átadta a scriptblock kifejezést, a metódus leállítja az Where() elemek feldolgozását.

Ez azt jelenti, hogy a metódusból megkapja a nem átadott elemek első készletétWhere(). Ha egy elem áthalad, a többi nem lesz tesztelve vagy visszaadva.

A visszaadott elemek száma korlátozható, ha értéket ad át az 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

Feljegyzés

Mind a SkipUntil tételt, mind Until pedig a nem tesztelt tételt a helyszínen kell üzemeltetni.

Untilaz első PASS előtti elemeket adja vissza. SkipUntilaz első passz után az összes elemet visszaadja, beleértve az első átadott elemet is.

Split

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

Ha van megadva, numberToReturn az első gyűjtemény tartalmazza az átmenő elemeket, és nem lépi túl a megadott értéket.

A többi objektumot, még azokat is, amelyek PASS kifejezésszűrőt adnak vissza a második gyűjteményben.

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

Feljegyzés

Mindkettő ForEach() és Where() a metódusok 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 tulajdonságnak és a LengthSetValue metódusnak) lekéréséhez használja a Get-Member parancsmag InputObject paraméterét.

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

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

A következő parancs például lekéri a tömbváltozó tagjait $a .

Get-Member -InputObject $a

A tömb tagjait úgy is lekérheti, hogy beír egy vesszőt (,) a parancsmagba Get-Member becsúsztató érték elé. A vessző a tömböt tömbök második elemé 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

Tömbök kezelése

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átorral (=) adjon meg egy új értéket az elemhez. Ha például a tömb második elemének $a é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 tömb második értékét (1. indexpozícióját $a ) 500-ra módosítja:

$a.SetValue(500,1)

Az 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

Feljegyzés

Az 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ömböt a $t tömb összes elemével szeretné létrehozni, kivéve a $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 értéket $null a tömbhöz. Az alábbi parancs törli a változóban lévő $a tömböt.

$a = $null

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

Nulla vagy egy tömb

A Windows PowerShell 3.0-tól kezdve egy nulla vagy egy objektumból álló gyűjtemény rendelkezik azokkal Count és Length tulajdonságokkal. Emellett indexelhet egy objektumból álló tömböt is. 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 be, hogy egy olyan változó, amely nem tartalmaz objektumokat, egy és Length 0 értékkel rendelkezikCount.

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

Az alábbi példa azt mutatja be, hogy egy objektumot tartalmazó változó egy és Length 1 értékkel rendelkezikCount. 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 ad vissza, tömbindexelés használatával anélkül érheti el az objektum értékét, hogy tesztelnie kellene a tulajdonságokat vagy Length a Count tulajdonságokat. Ha azonban az eredmény egyetlen objektum (singleton), és az objektum rendelkezik egy Count vagy Length tulajdonsággal, akkor 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. Ennek Length a sztringnek a karaktere.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 sztringek tömbje szeretne $result lenni, a változót tömbként kell deklarálnia.

Ebben a példában $result sztringek tömbje. A Count tömb és Length a tömb 1az , és az Length első elem az 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 indexelésének támogatása.Tuple Objektumok

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

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 Tuple eltérően az objektumok egyetlen objektumként lesznek kezelve, amikor áthaladnak a folyamaton, vagy olyan paraméterek, amelyek támogatják az objektumtömböket.

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

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

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. Ehelyett egy kulcs megadásakor a PowerShell teszteli a kulcs TryGetValue()meglétét, amely akkor ad vissza, $null ha a kulcs nem létezik.

Ezzel szemben, ha a típus valódi indexelőjét hívja meg a használatával Item(<key>), 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 számbavétele

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 tömbváltozóban $filestárolja. Mivel a tömbobjektum nem rendelkezik LastWriteTime-tagmal, a Rendszer a WriteTime értékét Lastadja vissza a tömb minden eleméhez.

$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 enumerálása lehetővé teszi, hogy egy gyűjtemény elemeiből értékeket szerezzen be, de nem állíthat be értékeket a gyűjtemény elemein. Példa:

$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 set_LastWriteTime() metódus a FileInfo objektum rejtett tagja. Az alábbi példa bemutatja, hogyan kereshet 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;}

Figyelemfelhívás

Mivel a metódus végrehajtása a gyűjtemény minden eleménél történik, a metódusok tag-számbavételt használó meghívásakor ügyelni kell rá.

Lásd még