Forums.ATC.no

Teknisk => Generelt teknisk => Emne startet av: Floyd-ATC på 30. November 2011, 14:11 pm

Tittel: Powershell ARRAY tips and gotchas
Skrevet av: Floyd-ATC30. November 2011, 14:11 pm
Define an empty array:
Kode: [Velg]
$array = @();
Define an array with data elements in it:
Kode: [Velg]
$array = [array]( "foo", "bar", "baz" );or
Kode: [Velg]
$array = @( "foo", "bar", "baz" );
Note: Do NOT simply use $array = "foo", "bar", "baz" because if you later edit your code and specify only one element you won't get an array object anymore, possibly introducing weird problems.

Access (read or write) an existing entry:
Kode: [Velg]
$element = $array[$index];and
Kode: [Velg]
$array[$index] = $element;Note: These will throw an exception if the array does not contain atleast $index+1 elements (the first entry is index 0)

Add (push) an element to the end of an array:
Kode: [Velg]
$array += $element;
Insert (unshift) an element at the beginning of an array:
Kode: [Velg]
$array = @($element) + $array;
Remove (shift) first element from an array:
Kode: [Velg]
$element, $array = $array;
Remove (pop) last element from an array:
Kode: [Velg]
[array]::Reverse($array);
$element, $array = $array;
[array]::Reverse($array);
Note: After hours of scouring the web I have found no simpler, universally working way to pop the last element from an array. Many people recommend using slices and arithmetics, but those usually break in special cases. One can only hope (albeit, most likely in vain) that Microsoft have seen fit to implement the Reverse method in an efficient way.

Get the number of entries in an array:
Kode: [Velg]
$count = @($array).Count;Note: Do NOT simply use $count = $array.Count because this will break if $array contains only one object and that object happens to come with its own Count method! (And yes, I spent some time finding that bug in my script...)

List contents of an array:
Kode: [Velg]
$array
Loop through an array:
Kode: [Velg]
foreach ($element in $array) {
  Write-Host $element;
}

Manually loop (C style) through an array:
Kode: [Velg]
for ($index=0; $index -lt $array.length ; $index++) {
  Write-Host $array[$index];
}

Manually loop (C style) in reverse:
Kode: [Velg]
for ($index=$array.length -1 ; $index -ge 0 ; $index--) {
  Write-Host $array[$index];
}