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

Lokale_Benutzer_und_Gruppen_verwalten_mit_PowerShell

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

Powershell_Grundlagen_und_AD