Powershell

Anmeldedaten hinterlegen:

$UserCredential = Get-Credential

Verbindung aufbauen:

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://server.domain.net/PowerShell/ -Authentication Kerberos -Credential $UserCredential

Session starten:

Import-PSSession $Session

Unter Powershell und und für jede andere Scriptsprache gibt es die sogenannten Vergleichsoperatoren, welche in Prinzip nur dafür eingesetzt werden um Werte zu Filtern.

Dabei kann man unterscheiden, ob diese Vergleichsoperationen für Zahlen oder für Namen eingesetzt werden können.

Zahlen-Werte

KürzelEnglischDeutschFunktionMathematisch
 -eq  equal  gleich  vergleicht zwei Werte auf Gleichheit  =
 -ne  not equal  nicht gleich / ungleich  vergleicht zwei Werte auf Ungleichheit  ≠
 -lt  less than  weniger als  prüft ob der  Wert weniger als das Kriterium ist  <
 -le  less equal  weniger gleich  prüft ob der Wert weniger oder gleich dem Kriterium ist  ≤
 -gt  greater than  größer als  prüft ob der Wert größer als das Kriterium ist  >
 -ge  greater equal  größer gleich  prüft ob der Wert größer oder gleich dem Kriterium ist  ≥

Das Ergebnis der Prüfung ist entweder TRUE oder  FALSE.

Namen (String) 

KürzelDeutschFunktion
 -like  wie  vergleicht zwei Strings auf Gleichheit, Wildcards möglich
 -notlike nicht wie  vergleicht zwei Strings auf Ungleichheit, Wildcards möglich
 -contains  enthält  sucht in Collections / Arrays nach dem Kriterium
 -notcontains  enthält nicht  sucht in Collections / Arrays nach dem Kriterium, in diesem Fall ob etwas nicht vorhanden ist
 -match  (in diesem Fall) enthält  sucht innerhalb eines Strings nach Übereinstimmungen, selbe Funktion wie -like mit Wildcards
 -notmatch  (in diesem Fall) enthält nicht  prüft ob String etwas nicht enthält, selbe Funktion wie -notlike mit Wildcards

Das Ergebnis der Prüfung ist entweder TRUE oder  FALSE.

Unter Umständen ist es erforderlich, dass die Powershell Scripte automatisch zbsp. über die Auftragsplanung ausgeführt werden müssen.
Dies ist eigentlich recht einfach, jedoch gibt es einige Dinge zu beachten:

- Execution Policy
- erhöhte Rechte
- UAC

Um diese Hürden zu umgehen, sind einige zusätzliche Angaben erforderlich. Aber fangen wir mal klein an. Im Normalfall wird ein Powershell Script recht einfach aufgerufen:

PowerShell.exe -Command "& 'C:Scripte\ich_bin ein_script.ps1'"

Wichtig ist hier das kaufmännische Und (&-Zeichen), da die PowerShell den Pfad in den Anführungszeichen ansonsten als String interpretiert. Anstelle des &-Zeichens kann
man auch einen Punkt (.) nehmen:

PowerShell.exe -Command ". 'C:Scripte\ich_bin ein_script.ps1'"

Standardmäßig lassen sich PowerShell Skripte nicht ausführen, da dies von der Execution Policy verhindert wird. Um dies gleich beim Aufruf zu berücksichtigen, lässt sich

die Execution Policy im Batch entsprechend setzen mit -ExecutionPolicy Bypass:

PowerShell.exe -ExecutionPolicy Bypass -Command "& 'C:Scripte\ich_bin ein_script.ps1'"

Um die UAC zu umgehen oder dies mit erhöhten Rechten bzw. unter einem anderen benutzer zu starten, gibt es die Möglichkeit das Script mit -verb runas auszuführen.


PowerShell.exe -ExecutionPolicy Bypass -verb runas -Command "& 'C:Scripte\ich_bin ein_script.ps1'"

Zusätzlich gibt es noch viele andere Möglichkeiten, diese Powershell Script mit den verschiedensten Parameter zu starten, zbsp mit -noprofile, wobei dadurch das Powersshell
Profil nicht geladen wird oder -NoLogo, dabei werden die Copyrightinformationen ausgeblendet.

PowerShell.exe -ExecutionPolicy Bypass -noprofile -nologo -verb runas -Command "& 'C:Scripte\ich_bin ein_script.ps1'"


Eine Übersicht ist bei Microsoft zu finden unter:

https://docs.microsoft.com/de-de/powershell/scripting/core-powershell/console/powershell.exe-command-line-help?view=powershell-5.1

 

Ab und an kann es durchaus mal vorkommen, dass eine etwas größere Anzahl von Dateien umbenannt werden muss. Dies geht relativ einfach mit Powershell.

Bei diesem einfachen Beispiel wird zbsp. die Endungen sämtlicher PDF-Dateien umbenannt mit der Endung "tmp", wobei der Name der Datei beibehalten wird.

 

Get-Childitem *.pdf | ren -NewName {$_.BaseName + ".tmp"}

 

Etwas komlizierter werden bei diesem Beispiel mit RegEx zbsp. Bilder umbenannt, welche in den Format "Urlaub_27032017_143245.png" vorliegen in ein lesbares Format umgewandelt: Urlaub_2017-03-27_14-32-45.png

 

Get-Childitem *.png | Rename-Item -NewName {$_.Name -replace "Urlaub_(\d{2})(\d{2})(\d{4})_(\d{2})(\d{2})(\d{2})",'ffxvi_$3-$2-$1_$4-$5-$6'}