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 olyan adatstruktúra, amely elemek gyűjteményének tárolására szolgál. Az elemek lehetnek azonos vagy különböző típusúak.
A Windows PowerShell 3.0-tól kezdődően egy nulla vagy egy objektumból álló gyűjtemény tömbök néhány tulajdonságával rendelkezik.
Tömb létrehozása és inicializálása
Tömb létrehozásához és inicializálásához rendeljen 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átorral (=
).
Ha például egy nevű tömböt $A
szeretne létrehozni, amely a 22, 5, 10, 8, 12, 9 és 80 hét numerikus (egész) értékét tartalmazza, írja be a következőt:
$A = 22,5,10,8,12,9,80
A vesszővel egyetlen elemtömb inicializálható úgy is, hogy a vesszőt az egyetlen elem elé helyezi.
Ha például egy 7-es értéket tartalmazó nevű $B
elemtömböt szeretne létrehozni, írja be a következőt:
$B = ,7
Tömböt a tartományoperá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[]). Egy tömb adattípusának meghatározásához használja a metódust GetType()
. Például:
$A.GetType()
Erősen beírt tömb létrehozásához, azaz egy olyan tömbhöz, amely csak egy adott típusú értékeket tartalmazhat, tömbtípusként (például sztring[], long[] vagy int32[]) adhatja meg a változót. Tömböt úgy alakíthat ki, hogy a változó nevét szögletes zárójelek közé zárt tömbtípussal előzi 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 a .NET bármely támogatott típusára át vannak vetve. A folyamatok ábrázolására lekért objektumok Get-Process
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 alkifejezé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ármit is eredményez 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ömboperátor szintaxisa a következő:
@( ... )
A tömboperátor használatával nulla 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ömboperátor akkor hasznos szkriptekben, ha objektumokat kap, de nem tudja, hogy hányra számíthat. Például:
$p = @(Get-Process Notepad)
A tömb alkifejezé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
A 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 és 9 közé tartozó számok tömbje:
$a
0
1
2
3
4
5
6
7
8
9
A 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 az index tartományoperátorával kérdezheti le. Ha például a tömb második és ötödik elemét szeretné lekérni, írja be a következőt:
$a[1..4]
1
2
3
4
Negatív számok száma a tömb végéről. Például a -1
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ő sorrendben írja be a negatív indexeket, a kimenet megváltozik.
$a = 0 .. 9
$a[-1..-3]
9
8
7
Azonban legyen óvatos, ha ezt a jelölést használja. 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 azt feltételezni $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 az elemeket a 0, 2 és 4–6 indexpozícióban szeretné megjeleníteni, í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 különálló elem listázásához használhatja a plusz operátort. Például a nullától a kettőig, a négytől a hatig és a nyolcadik pozíciótípusú elemek listázásához:
$a = 0..9
$a[+0..2+4..6+8]
0
1
2
4
5
6
8
Iterációk tömbelemeken keresztül
A tömb elemeire hivatkozhat hurkos szerkezetekkel is, 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 a tömb elemeit, amíg egy megadott feltétel már nem teljesül. Ha például a tömb elemeit $a
szeretné megjeleníteni, miközben 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
Countvagy LengthLongLength
Ha meg szeretné állapítani, hogy hány elem található egy tömbben, használja a tulajdonságot vagy annak Length aliasát Count . A longlength függvény 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 eredményül. 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 az alábbi példához hasonlóan:
$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 bizonyította, hogy ez egydimenziós. A szaggatott tömb elemeinek eléréséhez az indexeknek külön szögletes 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 elemeit szeretné elérni, az indexeket vesszővel (,
) kell elválasztani egyetlen szögletes 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 egybesimuljon. Az egybesimítás a tömböt nem korlátozott típusú, egydimenziós tömbté alakítja. Az eredményként kapott tömb sor-fő sorrendben veszi fel az összes elemet. Tekintse meg 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 egydimenzió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 $intA
a függvény explicit módon egész számokat tartalmaz.
[int[]] $intA = 1, 2, 3
$intA.Clear()
$intA
0
0
0
ForEach()
Lehetővé teszi a tömb összes elemének iterálását, és végrehajthat egy adott műveletet a tömb minden eleméhez.
A ForEach()
metódus számos olyan túlterheléssel rendelkezik, 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 v4-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. Emellett nem lehet szóköz a metódus és a nyitó zárójel vagy kapcsos zárójel között.
Az alábbi példa bemutatja, hogyan használja a metódust ForEach()
. Ebben az esetben a szándék a tömb elemeinek négyzetértékének létrehozása.
$a = @(0 .. 3)
$a.ForEach({ $_ * $_})
0
1
4
9
A paraméter argumentumlista paraméteréhez ForEach-Object
hasonlóan a arguments
paraméter lehetővé teszi argumentumok tömbjének átadását egy olyan szkriptblokknak, amely az elfogadásukra konfigurálva van.
Az Argumentumlista működésével kapcsolatos további információkért lásd: about_Splatting.
ForEach(írja be a convertToType kifejezést)
A ForEach()
metódussal az elemeket egy másik típusra állíthatja. Az alábbi példa bemutatja, hogyan alakítható 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 a metódusok végrehajtására a gyűjtemény minden elemén.
("one", "two", "three").ForEach("ToUpper")
ONE
TWO
THREE
A paraméter argumentumlistás paraméteréhez ForEach-Object
hasonlóan a arguments
paraméter lehetővé teszi egy értéktömb átadását az elfogadásra konfigurált szkriptblokknak.
Megjegyzés
A Windows PowerShell 3.0-s verziójától kezdődően a gyűjtemények egyes elemeinek tulajdonságainak és végrehajtási módszereinek lekérése a "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őtől eltérő értékre kell kiértékelnie: nulla (0), üres sztring, vagy $null
ahhoz, $false
hogy az elem a Where()
következő után jelenjen meg: . A logikai kiértékelésről további információt a about_Booleans című témakörben talál.
A metódusnak egy definíciója Where()
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. Emellett nem lehet szóköz a metódus és a nyitó zárójel vagy kapcsos zárójel között.
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, hogy korlátozza a szűrőből visszaadott elemek számát.
A értéknek WhereOperatorSelectionMode enumerálási mode
értéknek kell lennie:
Default
(0
) – Az összes elem visszaadásaFirst
(1
) – Az első elem visszaadásaLast
(2
) – Az utolsó elem visszaadásaSkipUntil
(3
) – Hagyja ki az elemeket, amíg a feltétel nem teljesül, 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ülSplit
(5
) – Két elemből álló tömb visszaadása- Az első elem egyező elemeket tartalmaz
- A második elem a többi elemet 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 szkriptblokk használatával szűri az Expression
elemeket.
numberToReturn
Ha a meg van adva, meghatározza a visszaadni kívánt elemek maximális számát.
# 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
A mód és First
a Default
mód is az első (numberToReturn
) elemet adja vissza, és felcserélhetően használható.
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 az ÖSSZES fennmaradó gyűjteményelemet visszaadja tesztelés nélkül. A rendszer csak egy átadott elemet tesztel.
Ez azt jelenti, hogy a visszaadott gyűjtemény a NEM tesztelt átmenő és nem átadott elemeket is tartalmazza.
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 visszaadja, 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ét Where()
. Ha egy elem megfelel, 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
Megjegyzés
Mind a tételtSkipUntil
, mind Until
pedig az adott tételt nem tesztelő helyszínen működik.
Until
az első PASSelőtt visszaadja az elemeket. SkipUntil
az első lépésután az összes elemet visszaadja, beleértve az első átadott elemet is.
Split
A Split
mód a gyűjteményelemeket két különálló gyűjteményre osztja vagy csoportosítja. Azok, akik átengedik a scriptblock kifejezést, és azok, akik nem.
Ha egy numberToReturn
meg van adva, az első gyűjtemény tartalmazza az átadott elemeket, hogy ne lépje túl a megadott értéket.
A többi objektum, még azok is, amelyek PASS a kifejezésszűrő, 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
Mind ForEach()
a Where()
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 a következőre Get-Member
csövez, 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
beírt é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 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átorral (=
) adjon meg egy új értéket az elemhez. Ha például a tömb második elemének (1. indexpozíció) értékét 10-esre szeretné módosítani, írja be a $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ó) 500-ra módosítja $a
:
$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
Megjegyzés
Az operátor használatakor a +=
PowerShell 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űveletet többször is megismételik, vagy ha 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 egy 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, $a
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 értéket $null
a tömbhöz. A következő parancs törli a változóban lévő tömböt $a
.
$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 kezdődően egy nulla vagy egy objektumból álló gyűjtemény rendelkezik a és Length a Count 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éldák ezt a funkciót mutatják be.
Nulla objektum
$a = $null
$a.Count
$a.Length
0
0
Egy objektum
$a = 4
$a.Count
$a.Length
$a[0]
$a[-1]
1
1
4
4
A rendszer indexelésének támogatása.Tuple Objektumok
A PowerShell 6.1 hozzáadta az objektumok indexelt hozzáférésének Tuple támogatását, hasonlóan a tömbökhöz. 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 Tuple eltérően az objektumok egyetlen objektumként lesznek kezelve, amikor áthaladnak a folyamaton, vagy olyan paraméterekkel, 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 egy típus valódi indexelőjét az általános IDictionary<TKey, TValue>
felületet implementáló típusok esetében. Ehelyett, ha egy kulcsot ad meg, a PowerShell teszteli a kulcs meglétét a használatával TryGetValue()
, 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 enumerálá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 létezik egy listagyűjteményben, a PowerShell automatikusan számba veszi a gyűjtemény elemeit, és megpróbálja 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 WriteTime-taggalLast, a rendszer a WriteTime értéketLast adja 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 értékeket szerezzen be egy gyűjtemény elemeiből, de nem állíthat be értékeket a 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 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ódust a rendszer a gyűjtemény minden eleméhez végrehajtja, ügyelni kell arra, hogy a metódusokat tag-enumerálással hívja meg.