Private/Wissen/B_Basics/B10_Operatoren.ps1
# ? TITEL Operatoren # ? DESCRIPTION Die Operatoren der PowerShell # ? TAGS Operator Arithmetic Assignment Logical Comparison Type Split Join # ? VERSION 2019.10.11.0800 # ! Die Operatoren beginnen i.d.R. mit einem Bindestrich '-' oder sind # ! besondere alleinstehende Zeichen wie . + - & etc. # ! Die Bindestrich-Operatoren dürfen nicht mit Parametern verwechselt werden: # ! Where-Object 1 -EQ 1 => -EQ ist ein SwitchParameter # ! 1 -eq 1 => -eq ist ein Vergleichs-Operator # TODO Weiterführende und Nachschlage-Informationen Get-Help -Name about_Operators -ShowWindow # Übersicht aller Operatoren Get-Help -Name about_Operator_Precedence -ShowWindow # Vorrangregeln Get-Help -Name about_Arithmetic_Operators -ShowWindow # Arithmetische- Operatoren Get-Help -Name about_Assignment_Operators -ShowWindow # Zuweisungs- Operatoren Get-Help -Name about_Logical_Operators -ShowWindow # Logische- Operatoren Get-Help -Name about_Comparison_Operators -ShowWindow # Vergleichs- Operatoren Get-Help -Name about_Type_Operators -ShowWindow # Typen- Operatoren Get-Help -Name about_Split -ShowWindow # String-Zerlege- Operator Get-Help -Name about_Join -ShowWindow # String-Zusammenfüge-Operator #region about_Arithmetic_Operators Get-Help -Name about_Arithmetic_Operators -ShowWindow 1 + 1 9 - 1 -10 2 * 10 10 / 2 9 % 2 15 -shl 1 15 -shr 1 #endregion #region about_Assignment_Operators Get-Help -Name about_Assignment_Operators -ShowWindow $zahl=1 # Start: 1 $zahl++ # $zahl = $zahl + 1 $zahl-- # $zahl = $zahl - 1 $zahl+=2 # $zahl = $zahl + 2 $zahl-=3 # $zahl = $zahl - 3 $zahl++ # $zahl = $zahl + 1 $zahl # Ergebnis: ??? $zahl=-10 $zahl # Ergebnis: ??? $varA = (Get-Process)[0] $varA += (Get-Process)[1] # ! FEHLER Process-Objekte können nicht addiert werden # vs. $varB = @() # Erzeugt ein leeres Array ... $varB += (Get-Process)[0] # ... und fügt diesem ein Process-Objekt hinzu. $varB += (Get-Process)[1] # ... und fügt diesem ein Process-Objekt hinzu. # ! ACHTUNG ARRAYS KÖNNEN NICHT ERWEITERT WERDEN ! $varC = @() Measure-Command { 1..2000 | ForEach-Object {$varC += "Objekt $_"} } | Select-Object TotalSeconds $varC.Length $varC[500] # ! VS. $varD = New-Object -TypeName System.Collections.ArrayList Measure-Command { 1..20000 | ForEach-Object { $varD.Add("Objekt $_") | Out-Null } } | Select-Object TotalSeconds $varD.Count $varD[500] $varE = $varD.ToArray() $varE #endregion #region about_Logical_Operators Get-Help -Name about_Logical_Operators -ShowWindow $true -and $true $true -or $false ($true -and $true) -or ($true -or $false) (1 -eq 1) -or (1 -eq 2) (1 -eq 1) -xor (2 -eq 2) !$true -and $true -not $true -and $true #endregion #region about_Comparison_Operators Get-Help -Name about_Comparison_Operators -ShowWindow "Köln" -eq "köln" "Köln" -ceq "köln" "Köln" -ieq "köln" # ieq IST ceq MIT eq "Köln", "Hamburg", "München" -ceq "Köln" "Köln" -cin "Köln", "Hamburg", "München" "Köln", "Hamburg", "München" -contains "Köln" # ! ACHTUNG "010" -eq 010 # FALSE 010 -eq "010" # TRUE # ? -like "abc" -like "?b?" # *, ?, ... "abc@abc.de" -like "*@*.*" "abc@@@@abc.de" -like "*@*.*" # ! PROBLEM, Lösung -match # ? -match (Reguläre Ausdrücke, kurz "regex", Wikipedia) # siehe u.a. https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck <# REGEX = TARGET a = a [abc] = a b c [a-z] = a b c d e f g ... [a-züöä] = a b c d ä ö z ... a{2,5} = aa aaa aaaa aaaaa . = Alle Zeichen außer Zeilenumbrüche \ = Maskieren [\.\\] ^ = Vom ersten Zeichen $ = Bis zum letzten Zeichen + = {1,} * = {0,} #> "AB678.docx" -match "^[A-Z]{2,2}[0-9]{3,3}\.doc[x]{0,1}$" # True "AB678.doc" -match "^[A-Z]{2,2}[0-9]{3,3}\.doc[x]{0,1}$" # True "XX678.doc" -match "^[A-Z]{2,2}[0-9]{3,3}\.doc[x]{0,1}$" # True "XX123.docx" -match "^[A-Z]{2,2}[0-9]{3,3}\.doc[x]{0,1}$" # True "X123.docx" -match "^[A-Z]{2,2}[0-9]{3,3}\.doc[x]{0,1}$" # False "AA1.docx" -match "^[A-Z]{2,2}[0-9]{3,3}\.doc[x]{0,1}$" # False "AA123.xlsx" -match "^[A-Z]{2,2}[0-9]{3,3}\.doc[x]{0,1}$" # False "a.krick@gfu.net" -match "^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$" # ? Array-Vergleich 10,11,12,13,14,10 -eq 10 10,11,12,13,14,10 -ne 10 10,11,12,13,14,10 -gt 10 10 -in 10,11,12,13 10,11,12,13 -contains 10 # ? Vergleichsoperatoren z.B. nutzen in: Where-Object, if(){} 100 -eq 99 # Als Ausdruck if(10 -gt 5) # In if { # Code } Get-Process | Where-Object -Property Name -EQ -Value Code # Im Where-Object #endregion #region about_Type_Operators Get-Help -Name about_Type_Operators -ShowWindow (Get-Process)[0] -is [System.Diagnostics.Process] # Ist ein Objekt von einem bestimmten Typen (Get-Process) -is [System.Array] "2015-03-18" -is [DateTime] [DateTime]"2015-03-18" -is [DateTime] "2015-03-18" -as [DateTime] "2015-03-18".PSTypeNames (Get-Process)[0].PSTypeNames "2015-03-18".GetType() (Get-Process)[0].GetType() #endregion #region -f (Format-Operator) s. about_operators Get-Help -Name about_Operators -ShowWindow # "FORMAT" -f Value[s] "Wert 1 ist {0}, der letzte Wert ist {4} und die anderen sind: {1}, {2}, {3}" -f 10,11,99,230,1024 $zahlen = 10,11,99,230,1024 "Wert 1 ist $($zahlen[0]), der letzte Wert ist $($zahlen[3]) und die anderen sind: $($zahlen[1]), $($zahlen[2])" "Zahlenformat: {0}" -f 123456.6789 "Zahlenformat: {0:#,##}" -f 123456.6789 "Zahlenformat: {0:0.0}" -f 123456.6789 "Zahlenformat: {0:#,##0.00}" -f 123456.6789 "Zahlenformat: {0:c2}" -f 123456.6789 "Heute ist {0}" -f (Get-Date) "Heute ist {0} und wir haben {1} Uhr" -f (Get-Date), (Get-Date) "Heute ist {0} und wir haben {0} Uhr" -f (Get-Date) "Heute ist {0:dd.MM.yyyy} und wir haben {0:HH:mm} Uhr" -f (Get-Date) "Heute ist {0:dddd.} der {0:d. MMMM} anno {0:yyyy HH:mm} und {0:ss.fffffff} Sekunden" -f (Get-Date) "Heute ist {0:yyyy yy MMMM MMM MM M dddd ddd dd d HH hh mm ss fffffff}" -f (Get-Date) -f (Get-Date) # ! ACHTUNG das Rückgabeobjekt ist IMMER ein String "{0,-10:0.0} | {1,-10:0.0} | {2,-10:0.0}" -f "Wert A", "Wert B", "Sum" "{0, 10:0.0} | {1, 10:0.0} | {2, 10:0.0}" -f 12, 23, 167.889 "{0, 10:0.0} | {1, 10:0.0} | {2, 10:0.0}" -f 212, 123, 67.89 "{0, 10:0.0} | {1, 10:0.0} | {2, 10:0.0}" -f 3319, 3, 7.8 # # Beispiele # $pcs = (1..100 | ForEach-Object -Process {"PC{0:000}" -f $_}) $session = New-PSSession -ComputerName $pcs Invoke-Command -Session $session -ScriptBlock {Restart-Computer} "Log_{0:yyyyMMddHH}.log" -f (Get-date) #endregion #region about_Split Get-Help -Name about_Split -ShowWindow $result = "ADS001;127.0.0.1;1234.67;" -split ";" $result[1] $env:PSModulePath -split ";" #endregion #region about_Join Get-Help -Name about_Join -ShowWindow $result = "Hallo Köln!", "127.0.0.1", 123.45 $result -join ";" #endregion #region replace Get-Help -Name about_Comparison_Operators -ShowWindow "Hallo Köln!" -iReplace "Köln", "Berlin" #endregion #region Spezial-Operator Get-Help -Name about_Operators -ShowWindow # ? &-Operator # ! Führt einen Befehl, ein Skript oder einen Skriptblock aus. # ! Mit dem Aufrufoperator, können Sie Befehle ausführen, die in Variablen gespeichert und # ! durch Zeichenketten oder Skriptblöcke dargestellt sind. Der Aufrufoperator wird in # ! einem untergeordneten Bereich ausgeführt (s. about_scopes) $c = { Get-Service -Name Spooler } & $c # ? . Operator # ! Führt ein Skript im aktuellen Bereich aus, so dass alle Funktionen, Aliase und Variablen, # ! die das Skript erstellt, dem aktuellen Bereich hinzugefügt werden. . c:\scripts\sample.ps1 # ? Cast-Operator # ! Konvertiert oder begrenzt Objekte auf den angegebenen Typ. # ! Wenn die Objekte nicht konvertiert werden können, # ! generiert PowerShell einen Fehler. [datetime]$birthday = "1/20/88" ; $birthday [int64]$a = 34 ; $a # ? .. Range-Operator # ! Stellt die sequentiellen Ganzzahlen in einem ganzzahligen Array dar, # ! das eine obere und untere Grenze aufweist. 1..10 10..1 # ? :: Statische-Member-Operator # ! Ruft den Operator für statische Eigenschaften und Methoden einer .NET Framework-Klasse auf. # ! Um die statischen Eigenschaften und Methoden eines Objekts zu finden, # ! verwenden Sie den Static-Parameter des Cmdlets Get-Member. [datetime]::Now.AddHours(-1) [Math]::PI #endregion |