Skriptausführung zulassen
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Allgemein
- Powershell ist nicht case-sensitiv
- Skripte werden mit der Dateiendung .ps1 gespeichert
- Entwicklungsumgebung “Windows Powershell ISE”
- Skripte ausführen mit F5 oder dem grünen Pfeil
- Zeilenende gleich Befehlsende (kein Semikolon wie bei Java oder C/C++)
Variablen
Variablen anlegen: Dollarzeichen und Variablennamen z.B. $zahl. Im Namen sind Buchstaben, Zahlen und der Unterstrich erlaubt
Ein Wert wird zu einer Variable folgendermaßen zuweisen: $zahl = 7. Der Datentyp muss nicht angegeben werden. Type-Casting: wenn nötig kann ein Datentyp erzwungen werden.
Mögliche Datentypen sind: string, char, byte, int, long, bool, decimal, single, double, DateTime, xml, array, hashtable.
logische Operatoren
| Operator | Klassisch | Beschreibung | Beispiel | Ergebnis |
|---|---|---|---|---|
| -eq | = oder == | Gleich | 10 -eq 15 | false |
| -ne | <> oder != | Ungleich | 10 -ne 15 | true |
| -gt | > | Grösser | 10 -gt 15 | false |
| -ge | >= | Grösser oder gleich | 10 -ge 15 | false |
| -lt | < | Kleiner | 10 -lt 15 | true |
| -le | <= | Kleiner oder gleich | 10 -lt 15 | true |
| -contains | Enthält | 1,2,3 -contains 1 | true | |
| -notcontains | Enthält nicht | 1,2,3 -notcontains 1 | false | |
| -is | Typengleicheit | $array = 1,2 | true |
Funktionen dauerhaft einbinden
Rufen Sie zuerst folgenden Befehl auf:
Get-Content Env:PSModulePath
In der Variablen PSModulePath ist gespeichert, wo alle Powershell-Module gespeichert sind.
Im Verzeichnis System32 sind alle von Microsoft zur Verfügung gestellten Module gespeichert. Dieses Verzeichnis sollte nicht für eigene Module genutzt werden.
Der zweite Standardpfad befindet sich unter:
C:\Users\"Benutzername"\Documents\WindowsPowerShell\Modules
Die Ordner WindowsPowerShell und Modules müssen noch erstellt werden.
Das Skript mit der Funktion, die eingebunden werden soll, muss umbenannt werden: statt der Endung ps1 in die Endung psm1.
Im Ordner Modules erstellen Sie dann einen Ordner mit dem gleichen Namen wie Ihr Skript. Darin speichern Sie das Skript.
Jetzt stehen Ihnen alle Funktionen im Skript bei jedem Start einer Powershell-Session zur Verfügung.
Befehle
Info
Commandlets setzen sich zusammen aus einem Verb und einem Tätigkeitsbereich, verbunden werden diese mit einem Bindestrich (z.B. write-host für die Ausgabe von Text).
Liste der möglichen Befehls-Verben ab S. 47 im Buch. Um Hilfe zu einem Befehl aufrufen: get-help (Buch S. 58). Oder nach einem Befehl suchen: get-command (Buch S. 53ff.).
Jeder Befehl hat Parameter, die häufig aber auch weggelassen werden können
etc.
Append: ohne ‘Append’ wird der Inhalt der Textdatei überschrieben, mit ‘Append’ wird der Text an den bestehenden Inhalt angehängt.
| –> Pipe: verbindet 2 Befehle
Schlaufen, if/else, Switch
IF/Else
if(bedingung) {
anweisung
} elseif(bedingung) {
anweisung
} else(bedingung) {
Falls Bedingung nicht zutrifft
}
switch-case
switch (Ausdruck) {
1 {anweisung}
2 {anweisung}
3 {anweisung}
4 {anweisung}
default {Falls keine der Werte zutreffen}
}
while
while(bedingung = true) {
anweisung
}
do…while
do {
anweisung
}while(bedingung = true)
Ein- und Ausgabe Routinen
Textausgabe
Write-Host "Text Text Text"
Texteingabe
$eingabe = Read-Host "Text Text: "
Ordner
überprüfen, ob ein Ordner schon existiert: Test-Path
if(Test-Path $pfad\$ordner) {
Write-Host "Ordner schon vorhanden!"
} else {
md/cp/mv/rd $pfad\$ordner
}
Ordner erstellen:
md
New-Item -Name Ordnername -Path Pfad -ItemType directory
Ordner löschen:
rd
Remove-Item -Path Pfad -Force
Ordner verschieben:
mv
mv –Path C:\ordner –Destination C:\ordner\unterordner
Ordner kopieren:
cp
cp –Path C:\ordner –Destination C:\ordner\unterordner
Text
Textdatei erstellen
New-Item –Path Pfad\Datei –ItemType file
Textdatei löschen
Remove-Item Pfad\Datei
in Textdatei schreiben:
$inhalt="Text" | Out-File –FilePath "Pfad" –Append
Textdatei lesen:
$content = Get-Content "Pfad"
Formatierung
Zeilenumbruch
bla bla `n bla bla
Funktionen
Wichtig: Funktionen müssen im Skript immer vor dem ersten Aufruf erstellt werden!
erstellen, ohne Übergabe von Werten
function Beispiel
{
Anweisungen
}
erstellen, mit Übergabe von Werten
function Summe
{
param ($zahl1, $zahl2)
$summe = $zahl1 + $zahl1
Write-Host $summe
}
oder
function Summe($zahl1, $zahl2)
{
$summe = $zahl1 + $zahl1
Write-Host $summe
}
Aufruf, ohne Übergabe von Werten
Beispiel:
Aufruf, mit Übergabe von Werten
Summe -zahl1 5 -zahl2 8
oder verkürzt
Summe 5 8
Netzwerkkarte konfigurieren
Netzwerkkarte
New-NetIPAddress –IPAddress 'IP-Adresse' –InterfaceAlias 'Name der
Netzwerkkarte' –AddressFamily IPv4 –DefaultGateway 'IP des Standard-Gateway'
–PrefixLength 'Netzteil der IP in Bit'
Set-NetIPAddress (gleiche Schalter wie bei New-NetIPAddress ausser
DefaultGateway)
DNS
Set-DNSClientServerAddress –InterfaceAlias 'Name der Netzwerkkarte' –
ServerAddresses ("IP des 1. DNS-Servers","IP des 2. DNS-Servers")
Befehle zum Testen der Konfiguration
Get-NetAdapter (Anzeigen der vorhandenen Netzwerkkarten)
Get-NetIPConfiguration (entspricht ipconfig)
Test-Connection -ComputerName (entspricht Ping-Befehl)
Probleme
Problem Set-NetIPAddress Der Parameter -IPAddress ist bei diesem Befehl nicht dazu da eine neue IP-Adresse zu vergeben, sondern ein Suchparameter. Wenn Sie der Netzwerkkarte eine neue IP-Adresse vergeben wollen, müssen Sie mit dem Befehl New-NetIPAddress arbeiten.
Problem Rechte Ein Skript das die Netzwerkkarte konfigurieren soll, muss als Administrator ausgeführt werden. Sonst wird der Zugriff verweigert.
String-Methoden
Split() Trennt einen String in mehrere Teile anhand des angegebenen Trennzeichens. Resultat ist ein Array mit allen Teilstrings als Inhalt.
Code Bsp.
$arrText = $text.Split(".")
Remove() Löscht einen Teil eines Strings. Es wird der Startpunkt und die Anzahl zu löschenden Zeichen angegeben.
Code Bsp.
$string.Remove(7,5) --> löscht das 8. bis 12. Zeichen des Strings
(der Zähler beginnt bei 0!)
Replace() Ersetzt ein Zeichen oder eine Zeichengruppe durch ein anderes Zeichen oder eineranderen Zeichengruppe.
Code Bsp.
$string.Replace("e","i") --> alle e werden durch ein i ersetzt
Trim() Entfernt am Anfang und am Ende eines Strings Leerzeichen
Code Bsp.
foreach ($satz in $arrText) {
$satz.Trim()
}
TrimStart() Ohne Argument wie Trim(), einfach nur für den Stringanfang. Oder mit Argument , z.B. TrimStart(“Ein”), um eine bestimmte Zeichenfolge abzuschneiden
TrimEnd() gleich wie TrimStart() für das Ende des Strings
SubString() mit einer Zahl in der Klammer als Argument. Stellt den String ab der entsprechenden Stelle dar.
Code Bsp.
$string.SubString(5) --> Der String wird ab dem 6. Zeichen dargestellt
Contains() Untersucht den String darauf ob eine bestimmte Zeichenkette darin vorhanden ist. Resultat ist entweder true oder false. Diese Methode ist Case-sensitiv.
Code Bsp.
foreach ($satz in $arrText) {
if ($satz.Contains("Haus")) { #--> sucht nach Haus im String
Write-Host $satz
}
}
ToLower() ToUpper() wandelt alle Buchstaben eines Strings in Klein- bzw. Grossbuchstaben um.
Code Bsp.
Write-Host $text.ToLower()
StartsWith() EndsWith() Untersucht einen String, ob er mit einer bestimmten Zeichenfolge beginnt bzw. aufhört. Resultat ist ein Boolean-Wert.
Code Bsp.
foreach ($satz in $arrInhalt) {
if ($satz.Contains("sind"))
Write-Host $satz
}
}
Length Gibt die Länge eines Strings (Anzahl Zeichen) aus
Bsp.
foreach ($satz in $arrInhalt) {
Write-Host $satz.Length
}
Benutzer und Gruppen Konfigurieren
Auflisten sämtlicher Cmdlets dieses Moduls
Get-Command -Module Microsoft.PowerShell.LocalAccounts
Benutzerkonto erstellen
New-LocalUser -Name $Bname -FullName $Fname -Password $Passwort
Benutzerkonto löschen
Remove-LocalUser -Name $Bname
Passwort ändern
Set-LocalUser -Name $Bname --Password $NewPasswort
Gruppe erstellen
New-LocalGroup -Name $Gruppenname
Gruppe löschen
Remove-LocalGroup -Name $Gruppenname
Benutzer in Gruppe hinzufügen
Add-LocalGroupMember -Name $Gruppenname -Member $Username
Benutzer in Gruppe entfernen
Remove-LocalGroupMember -Name $Gruppenname -Member $Username
Bestehende User und Gruppen anzeigen
Get-LocalUser
zeigt alle lokalen User an
Get-LocalUser G* | select *
zeigt alle Konten mit «G» (inkl. mit den Attributen des Users)
Get-LocalGroup
zeigt alle lokalen Gruppen an
AD
Neuen User im AD erstellen
New-ADUser -SamAccountName $user_name -Name $vollständiger_name -AccountPassword $pw -ChangePasswordAtLogon $True -Path 'OU=ABC,DC=wigger,DC=local'
Neue Gruppe im AD erstellen
New-ADGroup -SamAccountName $group_name -name $group_name -GroupScope 'DomainLocal/Global' -Path 'OU=ABC,DC=wigger,DC=local'
User/Gruppe zu einer Gruppe hinzufügen
Add-ADGroupMember -Identity 'Gruppe' -Members 'User/Gruppe '
Neue Organisationseinheit erstellen
New-ADOrganizationalUnit -Name 'Organisations-Name' -Path 'DC=wigger,DC=local'
New-ADOrganizationalUnit -Name 'Unterorganisations-Name' -Path 'OU=ABC,DC=wigger,DC=local'
Neues PW Setzen bei einem User im AD
Set-ADAccountPassword –Identity $user_name –OldPassword (ConvertTo-SecureString $pass_old -AsPlainText –Force) –NewPassword (ConvertTo-SecureString $pass_new -AsPlainText –Force)
Verändere Gruppentyp
Set-ADGroup -Identity "CN=$group,OU=$ou,DC=$domain,DC=$top" -GroupScope $typ
Verändere Gruppennamen
Set-ADGroup -Identity "CN=$group,OU=$ou,DC=$domain,DC=$top" -SamAccountName $group_new -DisplayName $group_new
Rename-ADObject -Identity "CN=$group,OU=$ou,DC=$domain,DC=$top" -NewName $group_new
Lösche Benutzer
Remove-ADUser -Identity $user -Confirm
Lösche Gruppe
Remove-ADGroup -Identity "CN=$group,OU=$ou,DC=$domain,DC=$top" -Confirm
Lösche Organisations Unit
Remove-ADOrganizationalUnit -Identity "OU=$ou,OU=$ou2,DC=$domain,DC=$top" -Confirm