Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Kurzbeschreibung
Beschreibt Arrays, bei denen es sich um Datenstrukturen handelt, die zum Speichern von Sammlungen von Elementen konzipiert sind.
Lange Beschreibung
Ein Array ist eine Datenstruktur, die zum Speichern einer Auflistung von Elementen konzipiert ist. Bei den Elementen kann es sich um denselben Typ oder um unterschiedliche Typen handeln.
Ab Windows PowerShell 3.0 verfügt eine Auflistung von null oder einem Objekt über einige Eigenschaften von Arrays.
Erstellen und Initialisieren eines Arrays
Um ein Array zu erstellen und zu initialisieren, weisen Sie einer Variablen mehrere Werte zu. Die im Array gespeicherten Werte werden durch ein Komma getrennt und durch den Zuweisungsoperator (=) vom Variablennamen getrennt.
Geben Sie z. B. Folgendes ein, um ein Array mit dem Namen $A zu erstellen, das die sieben numerischen Werte (int) 22, 5, 10, 8, 12, 9 und 80 enthält:
$A = 22,5,10,8,12,9,80
Das Komma kann auch verwendet werden, um ein Array für ein einzelnes Element zu initialisieren, indem das Komma vor das einzelne Element gesetzt wird.
Geben Sie z. B. Folgendes ein, um ein Array mit einem einzelnen Element mit dem Namen $B 7 zu erstellen:
$B = ,7
Sie können auch ein Array erstellen und initialisieren, indem Sie den Bereichsoperator (..) verwenden.
Im folgenden Beispiel wird ein Array mit den Werten 5 bis 8 erstellt.
$C = 5..8
Enthält $C daher vier Werte: 5, 6, 7 und 8.
Wenn kein Datentyp angegeben ist, erstellt PowerShell jedes Array als Objektarray (System.Object[]). Um den Datentyp eines Arrays zu bestimmen, verwenden Sie die GetType()- Methode. Geben Sie z. B. Folgendes ein, um den Datentyp des Arrays $A zu bestimmen:
$A.GetType()
Um ein stark typisiertes Array zu erstellen, d. h. ein Array, das nur Werte eines bestimmten Typs enthalten kann, wandeln Sie die Variable in einen Arraytyp um, z. B. string[], long[] oder int32[]. Um ein Array umzuwandeln, stellen Sie dem Variablennamen einen Array-Typ voran, der in eckige Klammern eingeschlossen ist. Geben Sie z. B. Folgendes ein, um ein 32-Bit-Ganzzahlarray mit dem Namen $ia zu erstellen, das vier ganze Zahlen (1500, 2230, 3350 und 4000) enthält:
[int32[]]$ia = 1500,2230,3350,4000
Daher kann das $ia Array nur ganze Zahlen enthalten.
Sie können Arrays erstellen, die in einen beliebigen unterstützten Typ in .NET umgewandelt werden. Die Objekte, die abgerufen werden, Get-Process um Prozesse darzustellen, sind z. B. vom Typ System.Diagnostics.Process . Um ein stark typisiertes Array von Prozessobjekten zu erstellen, geben Sie den folgenden Befehl ein:
[Diagnostics.Process[]]$zz = Get-Process
Der Operator für den Unterausdruck des Arrays
Der Operator für den Unterausdruck array erstellt ein Array aus den darin enthaltenen Anweisungen. Was auch immer die Anweisung innerhalb des Operators erzeugt, der Operator platziert sie in einem Array. Auch wenn es null oder ein Objekt gibt.
Die Syntax des Array-Operators lautet wie folgt:
@( ... )
Sie können den Array-Operator verwenden, um ein Array mit null oder einem Objekt zu erstellen. Beispiel:
$a = @("Hello World")
$a.Count
1
$b = @()
$b.Count
0
Der Array-Operator ist in Skripten nützlich, wenn Sie Objekte abrufen, aber nicht wissen, wie viele Objekte Sie erhalten. Beispiel:
$p = @(Get-Process Notepad)
Weitere Informationen zum Operator für den Array-Unterausdruck finden Sie unter about_Operators.
Zugreifen auf und Verwenden von Array-Elementen
Lesen eines Arrays
Sie können auf ein Array verweisen, indem Sie seinen Variablennamen verwenden. Um alle Elemente im Array anzuzeigen, geben Sie den Namen des Arrays ein. Angenommen $a , es handelt sich um ein Array, das die ganzen Zahlen 0, 1, 2 bis 9 enthält. Geben Sie Folgendes ein:
$a
0
1
2
3
4
5
6
7
8
9
Sie können auf die Elemente in einem Array verweisen, indem Sie einen Index verwenden, der an Position 0 beginnt. Schließen Sie die Indexnummer in eckige Klammern ein. Um beispielsweise das erste Element im $a Array anzuzeigen, geben Sie Folgendes ein:
$a[0]
0
Um das dritte Element im $a Array anzuzeigen, geben Sie Folgendes ein:
$a[2]
2
Sie können einen Teil des Arrays abrufen, indem Sie einen Bereichsoperator für den Index verwenden. Um z. B. das zweite bis fünfte Element des Arrays abzurufen, geben Sie Folgendes ein:
$a[1..4]
1
2
3
4
Die negativen Zahlen zählen vom Ende des Arrays. "-1" bezieht sich z. B. auf das letzte Element des Arrays. Um die letzten drei Elemente des Arrays anzuzeigen, geben Sie in aufsteigender Reihenfolge Folgendes ein:
$a = 0 .. 9
$a[-3..-1]
7
8
9
Wenn Sie negative Indizes in absteigender Reihenfolge eingeben, ändert sich die Ausgabe.
$a = 0 .. 9
$a[-1..-3]
9
8
7
Seien Sie jedoch vorsichtig, wenn Sie diese Notation verwenden. Die Notation wechselt von der Endgrenze bis zum Anfang des Arrays.
$a = 0 .. 9
$a[2..-2]
2
1
0
9
8
Außerdem besteht ein häufiger Fehler darin, anzunehmen, dass $a[0..-2] auf alle Elemente des Arrays verweist, mit Ausnahme der letzten. Es bezieht sich auf die ersten, letzten und vorletzten Elemente im Array.
Sie können den Plus-Operator (+) verwenden, um einen Bereich mit einer Liste von Elementen in einem Array zu kombinieren. Geben Sie z. B. Folgendes ein, um die Elemente an den Indexpositionen 0, 2 und 4 bis 6 anzuzeigen:
$a = 0 .. 9
$a[0,2+4..6]
0
2
4
5
6
Um mehrere Bereiche und einzelne Elemente aufzulisten, können Sie auch den Plus-Operator verwenden. So listen Sie z. B. die Elemente null bis zwei, vier bis sechs und das Element an der achten Position auf:
$a = 0..9
$a[+0..2+4..6+8]
0
1
2
4
5
6
8
Iterationen über Array-Elemente
Sie können auch Schleifenkonstrukte wie ForEach, Forund While Schleifen verwenden, um auf die Elemente in einem Array zu verweisen. Geben Sie z. B. Folgendes ein, um eine Schleife zum Anzeigen der Elemente im ForEach Array zu verwenden$a:
$a = 0..9
foreach ($element in $a) {
$element
}
0
1
2
3
4
5
6
7
8
9
Die Foreach Schleife durchläuft das Array und gibt jeden Wert im Array zurück, bis das Ende des Arrays erreicht wird.
Die For Schleife ist nützlich, wenn Sie Indikatoren inkrementieren, während Sie die Elemente in einem Array untersuchen. Wenn Sie z. B. eine For Schleife verwenden möchten, um jeden anderen Wert in einem Array zurückzugeben, geben Sie Folgendes ein:
$a = 0..9
for ($i = 0; $i -le ($a.length - 1); $i += 2) {
$a[$i]
}
0
2
4
6
8
Sie können eine While Schleife verwenden, um die Elemente in einem Array anzuzeigen, bis eine definierte Bedingung nicht mehr zutrifft. Geben Sie z. B. Folgendes ein, um die Elemente im $a Array anzuzeigen, während der Arrayindex kleiner als 4 ist:
$a = 0..9
$i=0
while($i -lt 4) {
$a[$i]
$i++
}
0
1
2
3
Eigenschaften von Arrays
Count oder Length oder LongLength
Um zu bestimmen, wie viele Elemente sich in einem Array befinden, verwenden Sie die Length Eigenschaft oder ihren Count Alias. Longlength ist nützlich, wenn das Array mehr als 2.147.483.647 Elemente enthält.
$a = 0..9
$a.Count
$a.Length
10
10
Rank
Gibt die Anzahl der Dimensionen im Array zurück. Die meisten Arrays in PowerShell verfügen nur über eine Dimension. Auch wenn Sie denken, dass Sie ein mehrdimensionales Array wie im folgenden Beispiel erstellen:
$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)"
In diesem Beispiel erstellen Sie ein eindimensionales Array, das andere Arrays enthält. Dies wird auch als gezacktes Array bezeichnet. Die Rank Eigenschaft bewies, dass dies eindimensional ist. Um auf Elemente in einem verzweigten Array zugreifen zu können, müssen die Indizes in separaten eckigen Klammern ([]) stehen.
$a rank: 1
$a length: 3
$a[2] length: 348
Process $a[2][1]: AcroRd32
Mehrdimensionale Arrays werden in der Reihenfolge der Zeilen und Hauptarrays gespeichert. Das folgende Beispiel zeigt, wie Sie ein wirklich mehrdimensionales Array erstellen.
[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
Um auf Elemente in einem mehrdimensionalen Array zuzugreifen, trennen Sie die Indizes durch ein Komma (,) innerhalb eines einzelnen Satzes von eckigen Klammern ([]).
Für einige Vorgänge in einem mehrdimensionalen Array, z. B. Replikation und Verkettung, muss dieses Array vereinfacht werden. Durch die Reduzierung wird das Array in ein 1-dimensionales Array mit uneingeschränktem Typ umgewandelt. Das resultierende Array übernimmt alle Elemente in zeilengerichteter Reihenfolge. Betrachten Sie das folgenden Beispiel:
$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
Die Ausgabe zeigt, dass es sich um ein 1-dimensionales Array handelt, $c das die Elemente aus und $a in der Reihenfolge der $b Zeilen enthält.
Object[]
Int32[,]
Object[]
red
True
10
20
30
40
Methoden von Arrays
Clear
Legt alle Elementwerte auf den Standardwert des Elementtyps des Arrays fest.
Die Clear() Methode setzt die Größe des Arrays nicht zurück.
Im folgenden Beispiel $a ist ein Array von Objekten zu sehen.
$a = 1, 2, 3
$a.Clear()
$a | % { $null -eq $_ }
True
True
True
In diesem Beispiel wird explizit so typisiert, $intA dass es ganze Zahlen enthält.
[int[]] $intA = 1, 2, 3
$intA.Clear()
$intA
0
0
0
ForEach
Ermöglicht es, über alle Elemente im Array zu iterieren und eine bestimmte Operation für jedes Element des Arrays durchzuführen.
Die ForEach Methode verfügt über mehrere Überladungen, die unterschiedliche Vorgänge ausführen.
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(Skriptblock-Ausdruck)
ForEach(scriptblock-Ausdruck, object[]-Argumente)
Diese Methode wurde in PowerShell v4 hinzugefügt.
Hinweis
Die Syntax erfordert die Verwendung eines Skriptblocks. Klammern sind optional, wenn der Skriptblock der einzige Parameter ist. Außerdem darf zwischen der Methode und der öffnenden Klammer oder geschweiften Klammer kein Leerzeichen vorhanden sein.
Das folgende Beispiel zeigt, wie die ForEach Methode verwendet wird. In diesem Fall besteht die Absicht darin, den quadratischen Wert der Elemente im Array zu generieren.
$a = @(0 .. 3)
$a.ForEach({ $_ * $_})
0
1
4
9
Genau wie der -ArgumentList Parameter von ForEach-Objectermöglicht der arguments Parameter die Übergabe eines Arrays von Argumenten an einen Skriptblock, der so konfiguriert ist, dass er sie akzeptiert.
Weitere Informationen zum Verhalten von ArgumentListfinden Sie unter about_Splatting.
ForEach(Typ convertToType)
Die ForEach Methode kann verwendet werden, um die Elemente schnell in einen anderen Typ umzuwandeln. Das folgende Beispiel zeigt, wie eine Liste von Zeichenfolgendaten in [DateTime] einen Typ konvertiert wird.
@("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(Zeichenkette EigenschaftName)
ForEach(Zeichenkette EigenschaftName, Objekt[] newValue)
Die ForEach Methode kann auch verwendet werden, um Eigenschaftswerte für jedes Element in der Auflistung schnell abzurufen oder festzulegen.
# 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(Zeichenkette Methodenname)
ForEach(Zeichenkette Methodenname, Objekt[] Argumente)
Schließlich können Methoden verwendet werden, ForEach um eine Methode für jedes Element in der Auflistung auszuführen.
("one", "two", "three").ForEach("ToUpper")
ONE
TWO
THREE
Genau wie der -ArgumentList Parameter von ForEach-Objectermöglicht der Arguments Parameter die Übergabe eines Arrays von Werten an einen Skriptblock, der so konfiguriert ist, dass er sie akzeptiert.
Hinweis
Ab Windows PowerShell 3.0 kann das Abrufen von Eigenschaften und das Ausführen von Methoden für jedes Element in einer Auflistung auch mithilfe von "Methoden für skalare Objekte und Auflistungen" erfolgen. Mehr dazu können Sie hier about_methods lesen.
Wobei
Ermöglicht das Filtern oder Auswählen der Elemente des Arrays. Das Skript muss einen anderen Wert ergeben als: null (0), leere Zeichenfolge oder $false das Element, $null das nach dem angezeigt Wherewerden soll. Weitere Informationen zur booleschen Auswertung finden Sie unter about_Booleans.
Es gibt eine Definition für die Where Methode.
Where(scriptblock expression[, WhereOperatorSelectionMode mode
[, int numberToReturn]])
Hinweis
Die Syntax erfordert die Verwendung eines Skriptblocks. Klammern sind optional, wenn der Skriptblock der einzige Parameter ist. Außerdem darf zwischen der Methode und der öffnenden Klammer oder geschweiften Klammer kein Leerzeichen vorhanden sein.
Das Expression ist ein Skriptblock, der für die Filterung erforderlich ist, das mode optionale Argument ermöglicht zusätzliche Auswahlfunktionen, und das numberToReturn optionale Argument ermöglicht die Begrenzung der Anzahl der Elemente, die vom Filter zurückgegeben werden.
Die akzeptablen Werte für mode :
- Default (0) - Alle Artikel zurückgeben
- First (1) - Senden Sie den ersten Artikel zurück
- Last (2) - Senden Sie den letzten Artikel zurück
- SkipUntil (3) - Elemente überspringen, bis die Bedingung wahr ist, und alle verbleibenden Elemente zurückgeben (einschließlich des ersten Artikels, für den die Bedingung wahr ist)
- Until (4) - Geben Sie alle Artikel zurück, bis der Zustand wahr ist
-
Split (5) - Gibt ein Array von zwei Elementen zurück
- Das erste Element enthält übereinstimmende Elemente.
- Das zweite Element enthält die restlichen Elemente
Das folgende Beispiel zeigt, wie Sie alle ungeraden Zahlen aus dem Array auswählen.
(0..9).Where{ $_ % 2 }
1
3
5
7
9
In diesem Beispiel wird gezeigt, wie die Zeichenfolgen ausgewählt werden, die nicht leer sind.
('hi', '', 'there').Where({$_.Length})
hi
there
Default
Der Default Modus filtert Elemente mithilfe des Expression Skriptblocks.
Wenn a numberToReturn angegeben wird, gibt es die maximale Anzahl von Elementen an, die zurückgegeben werden sollen.
# 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)
Hinweis
Sowohl der Default-Modus als auch First Modus geben die ersten (numberToReturn) Elemente zurück und können austauschbar verwendet werden.
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
Der SkipUntil-Modus überspringt alle Objekte in einer Auflistung, bis ein Objekt den Filter für den Skriptblockausdruck übergibt. Anschließend werden ALLE verbleibenden Sammlungselemente zurückgegeben, ohne sie zu testen.
Es wird nur ein bestandenes Element getestet.
Dies bedeutet, dass die zurückgegebene Auflistung sowohl übergebene als auch nicht übergebene Elemente enthält, die NICHT getestet wurden.
Die Anzahl der zurückgegebenen Elemente kann durch Übergeben eines Werts an das numberToReturn Argument begrenzt werden.
$computers = "Server01", "Server02", "Server03", "localhost", "Server04"
# Find the first available online server.
$computers.Where({ Test-Connection $_ }, 'SkipUntil', 1)
localhost
Until
Der Until Modus kehrt den SkipUntil Modus um. Gibt ALLE-Elemente einer Sammlung zurück, bis ein Element den Skriptblock-Ausdruck erfüllt. Sobald ein Element den scriptblock-Ausdruck übergeben hat , beendet die Methode die Where Verarbeitung von Elementen.
Dies bedeutet, dass Sie die erste Gruppe von nicht bestandenen-Elementen aus der Where-Methode erhalten.
Nachdem ein Artikel bestanden hat, wird der Rest NICHT getestet oder zurückgegeben.
Die Anzahl der zurückgegebenen Elemente kann durch Übergeben eines Werts an das numberToReturn Argument begrenzt werden.
# 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
Hinweis
Beide Until arbeiten SkipUntil unter der Prämisse, NICHT eine Reihe von Artikeln zu testen.
Until Gibt die Elemente VOR dem ersten Durchlauf zurück.
SkipUntil Gibt alle Elemente NACH dem ersten Durchlauf zurück, einschließlich des ersten Durchlaufelements.
Split
In diesem Split Modus werden Sammlungselemente in zwei separate Sammlungen aufgeteilt oder gruppiert. Diejenigen, die den scriptblock-Ausdruck übergeben, und diejenigen, die dies nicht tun.
Wenn ein numberToReturn angegeben wird, enthält die erste Auflistung die übergebenen Elemente, um den angegebenen Wert nicht zu überschreiten.
Die verbleibenden Objekte, auch diejenigen, die den Ausdrucksfilter bestehen , werden in der zweiten Auflistung zurückgegeben.
$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
...
Hinweis
Sowohl als foreach auch where Methoden sind systeminterne Elemente. Weitere Informationen zu systeminternen Elementen finden Sie unter about_Instrinsic_Members
Abrufen der Member eines Arrays
Verwenden Sie zum Abrufen der Eigenschaften und Methoden eines Arrays, z. B. der Length Eigenschaft und der SetValue-Methode , den InputObject-Parameter des Get-Member Cmdlets.
Wenn Sie ein Array über die Pipeline an Get-Membersenden, sendet PowerShell die Elemente nacheinander und Get-Member gibt den Typ jedes Elements im Array zurück (Duplikate werden ignoriert).
Wenn Sie den InputObject-Parameter verwenden, Get-Member werden die Member des Arrays zurückgegeben.
Mit dem folgenden Befehl werden z. B. die Member der $a Arrayvariablen abgerufen.
Get-Member -InputObject $a
Sie können die Member eines Arrays auch abrufen, indem Sie ein Komma (,) vor dem Wert eingeben, der an das Get-Member Cmdlet übergeben wird. Das Komma macht das Array zum zweiten Element in einem Array von Arrays. PowerShell überträgt die Arrays nacheinander über die Pipeline und Get-Member gibt die Member des Arrays zurück. Wie die nächsten beiden Beispiele.
,$a | Get-Member
,(1,2,3) | Get-Member
Bearbeiten eines Arrays
Sie können die Elemente in einem Array ändern, ein Element zu einem Array hinzufügen und die Werte aus zwei Arrays in einem dritten Array kombinieren.
Um den Wert eines bestimmten Elements in einem Array zu ändern, geben Sie den Arraynamen und den Index des Elements an, das Sie ändern möchten, und verwenden Sie dann den Zuweisungsoperator (=), um einen neuen Wert für das Element anzugeben. Geben Sie z. B. Folgendes ein, um den Wert des zweiten Elements im $a Array (Indexposition 1) in 10 zu ändern:
$a[1] = 10
Sie können auch die SetValue-Methode eines Arrays verwenden, um einen Wert zu ändern. Im folgenden Beispiel wird der zweite Wert (Indexposition 1) des $a Arrays in 500 geändert:
$a.SetValue(500,1)
Sie können den += Operator verwenden, um einem Array ein Element hinzuzufügen. Im folgenden Beispiel wird gezeigt, wie dem $a Array ein Element hinzugefügt wird.
$a = @(0..4)
$a += 5
Hinweis
Wenn Sie den += Operator verwenden, erstellt PowerShell ein neues Array mit den Werten des ursprünglichen Arrays und dem hinzugefügten Wert. Dies kann zu Leistungsproblemen führen, wenn der Vorgang mehrmals wiederholt wird oder das Array zu groß ist.
Es ist nicht einfach, Elemente aus einem Array zu löschen, aber Sie können ein neues Array erstellen, das nur ausgewählte Elemente eines vorhandenen Arrays enthält. Geben Sie z. B. Folgendes ein, um das $t Array mit allen Elementen im Array mit Ausnahme des Werts an $a der Indexposition 2 zu erstellen:
$t = $a[0,1 + 3..($a.length - 1)]
Um zwei Arrays zu einem einzigen Array zu kombinieren, verwenden Sie den Plus-Operator (+). Im folgenden Beispiel werden zwei Arrays erstellt, kombiniert und dann das resultierende kombinierte Array angezeigt.
$x = 1,3
$y = 5,9
$z = $x + $y
Infolgedessen enthält das $z Array 1, 3, 5 und 9.
Um ein Array zu löschen, weisen Sie dem Array den Wert von $null zu. Der folgende Befehl löscht das Array in der $a Variablen.
$a = $null
Sie können auch das Remove-Item Cmdlet verwenden, aber das Zuweisen des Werts ist $null schneller, insbesondere bei großen Arrays.
Arrays von Null oder Eins
Ab Windows PowerShell 3.0 verfügt eine Auflistung von null oder einem Objekt über die Count Eigenschaften und Length . Sie können auch in ein Array eines Objekts indizieren. Mit dieser Funktion können Sie Skripterstellungsfehler vermeiden, die auftreten, wenn ein Befehl, der eine Sammlung erwartet, weniger als zwei Elemente erhält.
In den folgenden Beispielen wird diese Funktion veranschaulicht.
Null Objekte
$a = $null
$a.Count
$a.Length
0
0
Ein Objekt
$a = 4
$a.Count
$a.Length
$a[0]
$a[-1]
1
1
4
4
Indizierungsunterstützung für System.Tuple Objekte
PowerShell 6.1 hat die Unterstützung für den indizierten Zugriff auf Tuple Objekte hinzugefügt, ähnlich wie bei Arrays. Beispiel:
PS> $tuple = [Tuple]::Create(1, 'test')
PS> $tuple[0]
1
PS> $tuple[1]
test
PS> $tuple[0..1]
1
test
PS> $tuple[-1]
test
Im Gegensatz zu Arrays und anderen Auflistungsobjekten werden Objekte als einzelnes Objekt behandelt, Tuple wenn sie durch die Pipeline oder durch Parameter übergeben werden, die Arrays von Objekten unterstützen.
Weitere Informationen finden Sie unter System.Tuple.
Memberzugriffsenumeration
Wenn Sie ab PowerShell 3.0 den member-access-Operator verwenden, um auf ein Element zuzugreifen, das nicht in einer Listenauflistung vorhanden ist, listet PowerShell automatisch die Elemente in der Auflistung auf und versucht, auf das angegebene Element für jedes Element zuzugreifen. Weitere Informationen finden Sie unter about_Member-Access_Enumeration.
Beispiele
Im folgenden Beispiel werden zwei neue Dateien erstellt und die resultierenden Objekte in der Array-Variablen $filesgespeichert. Da das Arrayobjekt nicht über den LastWriteTime-Member verfügt, wird der Wert von LastWriteTime für jedes Element im Array zurückgegeben.
$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
Mit der Enumeration des Memberzugriffs können Sie Werte aus Elementen in einer Auflistung abrufen , aber keine Werte für Elemente in einer Auflistung festlegen . Beispiel:
$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.
Zum Festlegen der Werte müssen Sie eine Methode verwenden.
$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
Die set_LastWriteTime() Methode ist ein ausgeblendeter Member des FileInfo-Objekts . Im folgenden Beispiel wird gezeigt, wie Sie Member suchen, die über eine ausgeblendeteset Methode verfügen.
$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;}
Vorsicht
Da die Methode für jedes Element in der Auflistung ausgeführt wird, sollte beim Aufrufen von Methoden mithilfe der Memberaufzählung Vorsicht walten gelassen werden.