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
. Ha például meg szeretné jeleníteni az first elemet a tömbben, í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 count a tömb végéről. Például -1
a last tömb elemére hivatkozik. A last tömb három elemének növekvő sorrendben való megjelenítéséhez í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 $a[0..-2]
, hogy a tömb minden elemére hivatkozik, kivéve az last egyiket. A tömbben lévő first, lastés a második-a-last elemekre 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 visszaadja a tömb until minden értékét, amely elé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
Ciklus használatával while
megjelenítheti egy tömb until elemeit, ha 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 . 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. 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 default tömb elemtípusának értékére á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 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-Object
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 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)
Végül a ForEach()
metódusok a gyűjtemény minden elemén végrehajthatók.
("one", "two", "three").ForEach("ToUpper")
ONE
TWO
THREE
Az Argumentumlista paraméterhez ForEach-Object
hasonló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ásaFirst
(1
) – Az elem visszaadása firstLast
(2
) – Az elem visszaadása lastSkipUntil
(3
) – Az elemek until kihagyása feltétel igaz, adja vissza az összes többi elemet (beleértve azt az first elemet is, amelyre a feltétel igaz)Until
(4
) – Az összes elem until feltételének visszaadása igazSplit
(5
) – Két elemből álló tömb visszaadása- Az first 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
A következő példa bemutatja, hogyan választhatja ki az összes nem üres sztringet.
('hi', '', 'there').Where{ $_ }
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
A mód és First
a Default
mód egyaránt visszaadja a first (numberToReturn
) elemeket, é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 egy gyűjtemény until összes objektumát, és egy objektum áthalad a szkriptblokk kifejezésszűrőn. 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. Egy gyűjtemény until ÖSSZES elemét adja vissza, és egy elem átadja 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ódustól megkapja a first nem átadott elemek készletét Where()
. 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.
Until
A PASS előtti firstelemeket adja vissza. SkipUntil
az átadás után az firstösszes elemet visszaadja, beleértve az first átmenő 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 megadvanumberToReturn
, a first gyűjtemény az átadott elemeket tartalmazza, é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_Intrinsic_Members.
Tömb tagjainak lekérése
Egy tömb tulajdonságainak és metódusainak (például a tulajdonságnak és a Length SetValue metódusnak) lekéréséhez használja a Get-Member
parancsmag InputObject paraméterét.
Amikor egy tömböt Get-Member
ad 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 az 1
, és az Length first 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 $files
tárolja. Mivel a tömbobjektum nem rendelkezik LastWriteTime-tagmal, a rendszer visszaadja a LastWriteTime értékét 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 rejtett set
metódusokat.
$files | Get-Member -Force -Name 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á.