Arbejd med matrixlister i Windows PowerShell-scripts
I dine scripts skal du referere til de data, du placerer i matrixer. Du kan enten få adgang til alle elementer i matrixen samtidigt eller få adgang til dem enkeltvist. Hvis du vil have vist alle elementer i en matrix, skal du angive variabelnavnet og derefter trykke på Enter på samme måde som for en variabel med en enkelt værdi.
Du kan referere til individuelle elementer i en matrix ved hjælp af deres indeksnummer. Når du opretter en matrix, tildeles hvert element et indeksnummer, der starter ved 0. Så det første element, der placeres i matrixen, er vare 0, det andet element i matrixen er element 1 osv. Hvis du vil have vist et bestemt element, skal du placere indeksnummeret i kantede parenteser efter variabelnavnet. I følgende eksempel vises det første element i en matrix, der er gemt i variablen $users:
$users[0]
Du kan også føje et nyt element til en matrix. I følgende eksempel føjes den brugerkonto, der er gemt i $user1, til matrixen $users:
$users = $users + $user1
Når du føjer elementer til en matrix, kan du også bruge følgende korte notation:
$users += $user1
For at identificere, hvad du kan gøre med indholdet i et array, brug cmdlet'en Get-Member . Flyt indholdet af arrayet til Get-Member, og resultaterne identificerer de egenskaber og metoder, du kan bruge til elementerne i arrayet. For eksempel:
$files | Get-Member
Seddel
Når du sender et array med blandede datatyper til Get-Member, returnerer PowerShell resultater for hver datatype. Denne teknik er også en nyttig måde at afgøre, hvilke datatyper der er i arrayet.
Hvis du vil gennemse de egenskaber og metoder, der er tilgængelige for en matrix i stedet for elementerne i matrixen, skal du bruge følgende syntaks:
Get-Member -InputObject $files
Arbejde med matrixlister
Standardtypen af array, som PowerShell opretter, er et array med fast størrelse. Denne faste størrelsesbegrænsning betyder, at når du tilføjer et element til arrayet, genskaber PowerShell arrayet med det ekstra element. Når du arbejder med relativt små arrays, er denne overhead ikke et problem. Men hvis du føjer tusindvis af elementer til en matrix én efter én, har genskabelsen af en matrix hver gang en negativ indvirkning på ydeevnen. Den anden bekymring, når du bruger matrixer med fast størrelse, er at fjerne elementer. Der er ingen enkel metode til at fjerne et element fra en matrix med fast størrelse.
Hvis du vil afhjælpe manglerne i matrixer, kan du bruge en matrixliste. En matrixlistefunktion svarer til en matrix, bortset fra at den ikke har en fast størrelse. Denne fleksibilitet betyder, at du kan bruge metoder til at tilføje og fjerne genstande.
Hvis du vil oprette en matrixliste, når du tildeler værdier, skal du bruge følgende syntaks:
[System.Collections.ArrayList]$computers = "LON-DC1","LON-SVR1","LON-CL1"
Hvis du vil oprette en matrixliste, der er tom og klar til at tilføje elementer, skal du bruge følgende syntaks:
$computers=New-Object System.Collections.ArrayList
Når du bruger en matrixliste, kan du bruge metoder til både at tilføje og fjerne elementer. Disse metoder mislykkes dog, når du forsøger at bruge dem på en matrix med fast størrelse. For eksempel:
[void]$computers.Add("LON-SRV2")
$computers.Remove("LON-CL1")
Seddel
Metoden Add() returnerer indekset for det nytilføjede element som et heltal. Uden , sender et script, [void]der kalder Add() et script, dette heltal til konsollens output. Brug [void] den til at undertrykke denne returværdi.
Seddel
Når du fjerner et element fra en array-liste, og der er flere matchende elementer, fjerner PowerShell kun den første instans.
Hvis du vil fjerne et element fra en array-liste baseret på indeksnummeret, bruger du metoden RemoveAt() . For eksempel:
$computers.RemoveAt(1)
Seddel
ArrayList er forældet til fordel for den generiske List[T] samling. For nye scripts, brug [System.Collections.Generic.List[string]]::new() til strenglister eller [System.Collections.Generic.List[int]]::new() heltalslister. For eksempel:
$computers = [System.Collections.Generic.List[string]]::new()
$computers.Add("LON-DC1")
$computers.Add("LON-SRV1")
Generiske lister er stærkt typede, hvilket reducerer fejl, og kræver [void] ikke med Add() , fordi metoden ikke returnerer nogen værdi.