1.17.6. fejezet, Vezérlő szerkezetek

Több soros scriptek bevitele az ISE-be a SHIFT + ENTER kombinációval történik

Elágazások

if (kifejezés) {...} elseif (kifejezés) {...} else {...}

Switch

switch (2) {1 {'One'} 2 {'Two'; break} 2 {'another 2'} default {'default'} }
#Two
 
switch -wildcard ('abc') {a* {"a*: $_"} *c {"*c: $_"}} 
#a* : abc
#*c : abc
 
switch -regex ('abc') {^a {"a*: $_"} 'c$' {"*c: $_"}} 
#a* : abc
#*c : abc
 
#count files
switch -wildcard (Get-ChildItem c:\windows) {
     *.dll {$dll++}
     *.txt {$txt++}
     *.log {$log++}
}
 
#total size
$dll=$txt=$log=0
switch -wildcard (Get-ChildItem c:\windows) {
     *.dll {$dll += $_.length; continue}
     *.txt {$txt += $_.length; continue}
     *.log {$log += $_.length; continue}
} 
 
#process file (egyszerre egy sort olvas, memóriatakarékos megoldás)
$lg=$tm=$cr=0
switch -regex -file $env:TEMP\files.txt {
     '\.log$' {$lg++}
     '\.tmp$' {$tm++}
     '\.cvr$' {$cr++}
} 
 
#process file (az egész file tartalmát felolvassa)
switch -regex (${c:\temp\files.txt}) {
     '\.log$' {$lg++}
     '\.tmp$' {$tm++}
     '\.cvr$' {$cr++}
} 
 
switch -regex ('abc') {'(^a)(.*$)' {$matches}}
switch -regex ('abc') {'(^A)(.*$)' {$matches}}
switch -regex -case  ('abc') {'(^A)(.*$)' {$matches}}
#Key                            Value
#---                            ----
#2                              bc
#1                              a
#0                              abc
 
switch (8) {
     {$_ -gt 3} {'greater than three'}
     {$_ -gt 7} {'greater than 7'}
}
#greater than three
#greater than 7
 
switch(1,2,3,4,5,6) {
{$_ % 2} {"Odd $_"; continue}
  4 {'FOUR'}
  default {"Even $_"} 
}
#Odd 1
#Even 2
#Odd 3
#FOUR
#Odd 5
#Even 6
 
$options= -split '-a -b Hello -c'
switch ($options){
     '-a' { $a=$true }
     '-b' { [void] $switch.MoveNext(); $b= $switch.Current }
     '-c' { $c=$true }
     '-d' { $d=$true }
}
#a=True b=Hello c=True d=

For és ForEach

$numbers = 12, 21, 34, 44
$numbers | foreach {$_}
 
for($i = 0; $i -lt $numbers.length; $i++){ $numbers[$i] }
 
$obj2 = @{Account="User01";Domain="Domain01";Admin="True"}
foreach ($element in $obj2) { $element }

While, Do..While és Do..Until

#használható a break és a continue elem
$array = @("item1", "item2", "item3")
$counter = 0;
 
while($counter -lt $array.length){
   $array[$counter]
   $counter += 1
}
 
$counter = 0;
do {
   $array[$counter]
   $counter += 1
} while($counter -lt $array.length) #amig igaz az állítás
 
$i = 0
do {
  $i++
  $i
} until ($i -gt 9) #amig hamis az állítás