Microsoft Powershell // Grundlagen

Ausbildung Fachinformatiker Grundlagen Microsoft Microsoft Powershell Systemintegration

Microsoft PowerShell ist eine leistungsstarke Befehlszeilen-Schnittstelle und Skriptsprache für Windows-basierte Betriebssysteme. Es wurde erstmals im Jahr 2006 veröffentlicht und hat sich seitdem zu einem unverzichtbaren Tool für Systemadministratoren und Entwickler entwickelt. Mit PowerShell können Benutzer verschiedene Aufgaben automatisieren und Verwaltungsaufgaben auf Windows-Systemen effizienter erledigen.

In diesem Blogbeitrag werden wir uns näher mit Microsoft PowerShell befassen und seine wichtigsten Funktionen, Vorteile und Anwendungen untersuchen. Wir werden auch einen Einblick in die Skripterstellung und -ausführung mit PowerShell geben und einige Beispiele für die Verwendung von PowerShell in verschiedenen Szenarien diskutieren.

Grundsätzlich ist die Powershell für administrative Arbeiten immer als Administrator zu starten.


Microsoft PowerShell: Die Funktionen, die Systemadministratoren lieben werden

  1. Automatisierung von Aufgaben

Eines der wichtigsten Merkmale von PowerShell ist die Fähigkeit, Aufgaben zu automatisieren. Mit PowerShell können Systemadministratoren Prozesse automatisch durchführen lassen, wie z.B. das Erstellen von Benutzerkonten, das Verwalten von Netzwerkeinstellungen oder das Installieren von Software auf mehreren Systemen gleichzeitig. Hier ist ein Beispiel dafür, wie PowerShell bei der Erstellung von Benutzerkonten helfen kann:

# Benutzerkonto erstellen
New-LocalUser -Name "MaxMustermann" -Description "Standardbenutzer" -Password (ConvertTo-SecureString "password123" -AsPlainText -Force)

# Benutzer zu einer Gruppe hinzufügen
Add-LocalGroupMember -Group "Administratoren" -Member "MaxMustermann"

In diesem Beispiel wird ein neues lokales Benutzerkonto namens „MaxMustermann“ erstellt und dem Administratoren-Gruppe hinzugefügt. Dieser Prozess kann automatisiert werden, um Zeit zu sparen und Fehler zu reduzieren.

  1. Verwaltung von Systemkonfigurationen

Du kannst PowerShell auch viele Funktionen zur Verwaltung von Systemkonfigurationen nutzen. Mit PowerShell ist es möglich, Informationen über Systemkonfigurationen abzurufen, diese zu ändern oder zu überwachen. Ein Beispiel dafür, wie PowerShell bei der Überwachung von Systemereignissen helfen kann, ist:

# Ereignisprotokolle abrufen
Get-EventLog -LogName Application -EntryType Error

# Ereignisse filtern
Get-EventLog -LogName Application -InstanceId 1000

# Ereignisse in Echtzeit überwachen
Get-EventLog -LogName System -Newest 10 -Wait

In diesem Beispiel rufst du das Anwendungsereignisprotokoll ab und filterst nach Fehlern (EntryType Error). Du kannst auch nach bestimmten Ereignis-IDs suchen oder Ereignisse in Echtzeit überwachen, um Probleme auf deinem System schnell zu erkennen.

  1. Verwaltung von Netzwerkeinstellungen

Du kannst PowerShell auch bei der Verwaltung von Netzwerkeinstellungen nutzen. Mit PowerShell ist es möglich, Netzwerkadapter, IP-Adressen, DNS-Server und vieles mehr zu konfigurieren und zu überwachen. Hier ist ein Beispiel dafür, wie PowerShell bei der Konfiguration von Netzwerkadaptern helfen kann:

# Netzwerkadapter abrufen
Get-NetAdapter

# Netzwerkkonfiguration abrufen
Get-NetIPConfiguration

# IP-Adresse konfigurieren
New-NetIPAddress -IPAddress 192.168.1.100 -PrefixLength 24 -DefaultGateway 192.168.1.1

# DNS-Serveradresse hinzufügen
Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses ("192.168.1.10","192.168.1.11")

In diesem Beispiel wird eine neue IP-Adresse für das System konfiguriert und DNS-Serveradressen hinzugefügt.

PowerShell kann auch verwendet werden, um Netzwerkverbindungen zu überwachen und Netzwerkdiagnosen durchzuführen. Hier ist ein Beispiel dafür, wie PowerShell bei der Überwachung von Netzwerkverbindungen helfen kann:

# Netzwerkverbindungen anzeigen
Get-NetTCPConnection

# Netzwerkdiagnose durchführen
Test-NetConnection -ComputerName google.com -Port 80

In diesem Beispiel werden alle aktiven TCP-Verbindungen auf dem System angezeigt und eine Netzwerkdiagnose für die Verbindung zu Google.com auf Port 80 durchgeführt.

Die Verwaltung von Netzwerkeinstellungen ist eine wichtige Aufgabe für Systemadministratoren, da sie die Netzwerkverbindung und den Zugriff auf Ressourcen auf dem System beeinflussen. PowerShell bietet eine leistungsstarke Möglichkeit, diese Einstellungen zu konfigurieren, zu überwachen und zu diagnostizieren.

  1. Verwaltung von Dateien und Ordnern

PowerShell bietet auch viele Funktionen zur Verwaltung von Dateien und Ordnern. Du kannst PowerShell verwenden, um Dateien und Ordner zu erstellen, zu kopieren, zu löschen, umzubenennen und vieles mehr. Hier ist ein Beispiel dafür, wie PowerShell beim Kopieren von Dateien helfen kann:

# Datei von einem Ort zum anderen kopieren
Copy-Item -Path C:\Users\MaxMustermann\Documents\example.txt -Destination C:\Users\MaxMustermann\Desktop

# Mehrere Dateien kopieren
Copy-Item -Path C:\Users\MaxMustermann\Documents\*.txt -Destination C:\Users\MaxMustermann\Desktop

In diesem Beispiel wird eine Datei von einem Ort zum anderen kopiert. Du kannst auch mehrere Dateien auf einmal kopieren, um Zeit zu sparen und Fehler zu reduzieren.

WICHTIG: Sollten im Pfad Leerzeichen vorhanden sein, muss der Pfad in „“ gesetzt werden.

  1. Integration mit anderen Tools

PowerShell kann auch nahtlos mit anderen Tools und Systemen integriert werden. Du kannst PowerShell-Skripte in andere Programme einbinden oder PowerShell verwenden, um Informationen von anderen Tools zu erhalten. Hier ist ein Beispiel dafür, wie PowerShell mit Active Directory integriert werden kann (Module evtl. notwendig):

# Benutzer aus Active Directory abrufen
Get-ADUser -Filter * -Properties *

# Neue Benutzergruppe erstellen
New-ADGroup -Name "IT-Abteilung" -GroupScope Global -Path "CN=Users,DC=example,DC=com"

In diesem Beispiel wird Active Directory verwendet, um Benutzer und Benutzergruppen zu verwalten. PowerShell kann auch mit anderen Tools wie SQL Server, Exchange Server und SharePoint integriert werden.

6. Neue Module installieren/importieren

Um neue Cmdlets in PowerShell zu importieren, musst du zuerst das entsprechende PowerShell-Modul installieren, das diese Cmdlets enthält. Ein PowerShell-Modul ist eine Sammlung von Cmdlets, Funktionen, Variablen und anderen Ressourcen, die in PowerShell wiederverwendet werden können.

Es gibt verschiedene Möglichkeiten, PowerShell-Module zu installieren. Eine Möglichkeit besteht darin, das Modul manuell von einer Website oder einem Netzwerkfreigabe herunterzuladen und zu installieren. Eine andere Möglichkeit besteht darin, das Modul direkt aus dem PowerShell Gallery-Repository zu installieren, das eine Sammlung von PowerShell-Modulen und Skripten bereitstellt.

Hier sind einige Beispiele, wie Sie PowerShell-Module installieren und importieren können:

  1. PowerShell Gallery-Modul installieren und importieren:
  • Öffnen PowerShell als Administrator.
  • Gebe den Befehl „Install-Module <Modulname>“ ein, um das Modul aus der PowerShell Gallery zu installieren. Zum Beispiel: „Install-Module ActiveDirectory“.
  • Gebe den Befehl „Import-Module <Modulname>“ ein, um das Modul zu importieren und die darin enthaltenen Cmdlets und Funktionen zu aktivieren. Zum Beispiel: „Import-Module ActiveDirectory“.
  1. Lokales PowerShell-Modul installieren und importieren:
  • Lade das Modul von der Website oder der Netzwerkfreigabe herunter und speichere es in einem Verzeichnis auf deinem Computer.
  • Öffnen PowerShell als Administrator.
  • Gebe den Befehl „Import-Module <Pfad zum Modulverzeichnis>“ ein, um das Modul zu importieren und die darin enthaltenen Cmdlets und Funktionen zu aktivieren. Zum Beispiel: „Import-Module C:\Modules\MyModule“.
  1. PowerShell-Modul in einer PowerShell-Sitzung installieren und importieren:
  • Gebe den Befehl „Install-Module <Modulname>“ ein, um das Modul aus der PowerShell Gallery zu installieren. Zum Beispiel: „Install-Module ActiveDirectory“.
  • Gebe den Befehl „Import-Module <Modulname> -Force“ ein, um das Modul zu importieren und die darin enthaltenen Cmdlets und Funktionen zu aktivieren. Der Parameter „-Force“ sorgt dafür, dass das Modul sofort importiert wird. Zum Beispiel: „Import-Module ActiveDirectory -Force“.

Sobald du das PowerShell-Modul erfolgreich installiert und importiert hast, kannst du die darin enthaltenen Cmdlets und Funktionen verwenden, um Verwaltungsaufgaben auszuführen. Zum Beispiel kannst du das „ActiveDirectory“-Modul verwenden, um Benutzer- und Gruppenkonten im Active Directory zu verwalten. Ein Beispiel für die Verwendung des „Get-ADUser“-Cmdlets aus dem „ActiveDirectory“-Modul wäre:

# Benutzerkonto im Active Directory abfragen
Get-ADUser -Identity john.doe -Properties DisplayName, EmailAddress

Dieser Befehl ruft Informationen über das Benutzerkonto „john.doe“ ab, einschließlich des Anzeigenamens und der E-Mail-Adresse, die im Active Directory gespeichert sind.


Vorteile von Microsoft PowerShell:

Microsoft PowerShell bietet eine Vielzahl von Vorteilen gegenüber anderen Befehlszeilen-Schnittstellen. Hier sind einige der wichtigsten Vorteile:

  1. Automatisierung und Effizienz: PowerShell ermöglicht es, wiederkehrende Verwaltungsaufgaben zu automatisieren und dadurch Zeit und Aufwand zu sparen. Durch die Verwendung von Cmdlets kannst du komplexe Aufgaben in kurzer Zeit erledigen, da mehrere Schritte in einem Befehl ausgeführt werden können.
  2. Umfangreiche Skriptsprache: PowerShell verfügt über eine umfangreiche Skriptsprache, die es ermöglicht, komplexe Aufgaben zu automatisieren. Mit PowerShell kannst du Funktionen, Schleifen, Bedingungen und andere Kontrollstrukturen erstellen, um Skripts zu schreiben, die mehrere Aufgaben ausführen können.
  3. Remote-Verwaltung: PowerShell ermöglicht die Verwaltung von entfernten Systemen über eine einzige Schnittstelle. Du kannst PowerShell-Cmdlets verwenden, um Remote-Verbindungen zu öffnen, Dateien und Ordner zu kopieren, Dienste zu starten und zu stoppen und vieles mehr.
  4. Einfache Handhabung von Objekten: PowerShell behandelt alles als Objekte, einschließlich Dateien, Ordner, Dienste, Benutzer und Gruppen. Dies erleichtert die Handhabung von Objekten und die Automatisierung von Aufgaben, da du einfach auf die Eigenschaften und Methoden dieser Objekte zugreifen kannst.
  5. Unterstützung für Module: PowerShell unterstützt Module, die eine Sammlung von Cmdlets, Funktionen und Variablen sind. Module können einfach installiert und importiert werden, um zusätzliche Funktionen und Möglichkeiten hinzuzufügen.

Zusammenfassend bietet Microsoft PowerShell eine leistungsstarke Befehlszeilen-Schnittstelle mit umfangreichen Funktionen, die es Benutzern ermöglicht, Aufgaben effizienter und schneller zu erledigen. Mit PowerShell können Verwaltungsaufgaben automatisiert und eine Vielzahl von Aufgaben durchgeführt werden, einschließlich der Verwaltung von lokalen und entfernten Systemen, Dateien und Ordnern, Benutzern und Gruppen und vielem mehr.


Skripterstellung und -ausführung mit Microsoft PowerShell:

Microsoft PowerShell ist nicht nur eine leistungsstarke Befehlszeilen-Schnittstelle, sondern auch eine mächtige Skripting-Sprache. Hier sind einige wichtige Informationen zur Skripterstellung und -ausführung mit PowerShell:

  1. PowerShell ISE: PowerShell ISE ist eine integrierte Skripting-Umgebung, die das Erstellen und Debuggen von PowerShell-Skripten erleichtert. PowerShell ISE bietet Syntaxhervorhebung, Intellisense und Debugging-Tools, um die Skriptentwicklung zu vereinfachen. Um PowerShell ISE zu öffnen, gibst du einfach „powershell_ise“ in die PowerShell-Eingabeaufforderung ein.
  2. Erstellen von Skripten: PowerShell-Skripte können mit jedem Texteditor erstellt werden. Speichere das Skript als .ps1-Datei, um es später auszuführen. PowerShell-Skripte können auch in PowerShell ISE erstellt und gespeichert werden.
  3. Ausführung von Skripten: PowerShell-Skripte können auf verschiedene Arten ausgeführt werden. Wenn du das Skript in PowerShell ISE erstellt hast, kannst du es einfach ausführen, indem du auf die Schaltfläche „Ausführen“ klickst oder die F5-Taste drückst. Wenn das Skript in einem Texteditor erstellt wurde, kannst du es in PowerShell mit dem Befehl „.\skriptname.ps1“ ausführen. Beachte jedoch, dass PowerShell standardmäßig keine nicht signierten Skripte ausführt. Um ein nicht signiertes Skript ausführen zu können, musst du zunächst die Execution Policy ändern.
  4. Syntax: PowerShell-Skripte verwenden eine einfache, leicht verständliche Syntax. Cmdlets und Parameter werden durch Leerzeichen getrennt. Beispiel: „Get-ChildItem -Path C:\Temp“ gibt eine Liste der Dateien und Ordner im Ordner „C:\Temp“ zurück.
  5. Beispiele:

Beispiel 1: Dieses Skript gibt die Größe aller Dateien im Ordner „C:\Temp“ aus:

Get-ChildItem -Path C:\Temp | ForEach-Object { $_.Name + ": " + $_.Length } 

Beispiel 2: Dieses Skript führt eine Suche nach Dateien mit der Endung „.log“ im Ordner „C:\Logs“ durch und gibt das Ergebnis aus:

Get-ChildItem -Path C:\Logs -Filter *.log 

Beispiel 3: Dieses Skript erstellt einen neuen Ordner „Test“ im Ordner „C:\Temp“:

New-Item -ItemType Directory -Path C:\Temp\Test

Zusammenfassend bietet PowerShell eine einfache Syntax und eine Vielzahl von Tools zur Skripterstellung und -ausführung. PowerShell ISE erleichtert die Skriptentwicklung und -debugging, während PowerShell-Skripte auf einfache Weise in Texteditoren erstellt und ausgeführt werden können.

Execution Policy ändern

Um die aktuelle Execution Policy in PowerShell zu speichern, kannst du die folgenden Schritte ausführen:

  1. Öffne die PowerShell-Eingabeaufforderung.
  2. Gebe den Befehl „Get-ExecutionPolicy“ ein, um die aktuelle Execution Policy anzuzeigen.
  3. Speichere die Ausgabe des Befehls, in eine Variable $policy = Get-ExecutionPolicy
  4. Um die Execution Policy zu ändern, gebe den Befehl „Set-ExecutionPolicy“ ein und wähle eine der verfügbaren Optionen:
    • „Restricted“ (keine Skripts erlaubt)
    • „AllSigned“ (nur signierte Skripts erlaubt)
    • „RemoteSigned“ (signierte Skripts von lokalen Computer erlaubt)
    • „Unrestricted“ (alle Skripts erlaubt)
    Beispiel: „Set-ExecutionPolicy RemoteSigned“
  5. Wenn die Execution Policy wiederhergestellt werden soll, setze die Policy einfach auf den Wert, der zuvor gespeichert wurde: Set-ExecutionPolicy $policy

Weitere Option: „Bypass": Die Execution Policy wird für das aktuelle PowerShell-Skript deaktiviert.

Beachte, dass hier Administratorrechte benötigt werden, um die Execution Policy zu ändern. Es ist auch wichtig zu beachten, dass die Execution Policy auf Systemebene festgelegt ist und für alle Benutzer und Skripts gilt. Natürlich kann die Policy auch auf Benutzerebene umgestellt werden.

Die verfügbaren Werte für den Scope-Parameter sind:

  • Process: Die Änderung der Execution Policy wird nur für die aktuelle PowerShell-Sitzung angewendet.
  • CurrentUser: Die Änderung der Execution Policy wird für den aktuellen Benutzer auf dem aktuellen Computer angewendet.
  • LocalMachine: Die Änderung der Execution Policy wird für alle Benutzer auf dem aktuellen Computer angewendet.

Der Scope-Parameter kann wie folgt in PowerShell verwendet werden:

Set-ExecutionPolicy <Parameter> -Scope <Scope-Parameter>

Beispiel:

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

Dies setzt die Execution Policy nur für den aktuellen Benutzer auf dem aktuellen Computer.

Signieren von Skripten

Um ein PowerShell-Skript mit einem selbstausgestellten Zertifikat zu signieren, kannst du die folgenden Schritte ausführen:

Generiere ein selbstsigniertes Zertifikat auf deinem Computer. Dazu kannst du das PowerShell-Modul „New-SelfSignedCertificate“ verwenden. Gebe dazu den folgenden Befehl ein:

$cert = New-SelfSignedCertificate -CertStoreLocation Cert:\CurrentUser\My -DnsName "MyCertName" 

Dieser Befehl erstellt ein neues Zertifikat mit dem Namen „MyCertName“ im aktuellen Benutzerzertifikatspeicher.

Exportiere das Zertifikat als PFX-Datei. Gebe dazu den folgenden Befehl ein:

$pwd = ConvertTo-SecureString -String "MyPassword" -Force -AsPlainText Export-PfxCertificate -Cert $cert -FilePath "C:\MyCert.pfx" -Password $pwd

Ersetze „MyPassword“ durch ein sicheres Kennwort, das zum Schutz der PFX-Datei verwendet werden soll.

Importiere das Zertifikat in den Trusted Publishers Store. Gebe dazu den folgenden Befehl ein:

Import-PfxCertificate -FilePath "C:\MyCert.pfx" -CertStoreLocation Cert:\CurrentUser\TrustedPublisher -Password $pwd

Signiere das PowerShell-Skript mit dem Zertifikat. Gebe dazu den folgenden Befehl ein:

Set-AuthenticodeSignature -FilePath "C:\MyScript.ps1" -Certificate $cert -TimestampServer http://timestamp.digicert.com 

Ersetze „C:\MyScript.ps1“ durch den Pfad zu deinem Skript und „http://timestamp.digicert.com“ durch den Zeitserver deiner Wahl.

Das Skript ist jetzt signiert und kann sicher ausgeführt werden. Beachte, dass Benutzer, die das Skript ausführen, das selbstsignierte Zertifikat manuell in ihren Trusted Publishers Store importieren müssen, um das Vertrauen in das Zertifikat zu bestätigen.

In einer großen Umgebung kann das Zertifikat natürlich auch via GPO ausgerollt werden, hier bietet es sich auch an ein Zertifikat aus der eigenen PKI zu verwenden.

Um ein Zertifikat von der eigenen PKI zu verwenden, musst du sicherstellen, dass das Zertifikat den Zweck „Code Signing“ unterstützt. Dies ist in der Regel durch ein spezielles Template in deiner PKI festgelegt, das für die Ausstellung von Code Signing-Zertifikaten konfiguriert ist.

Das Template sollte die folgenden Einstellungen enthalten:

  • Zweck: Code Signing
  • Verwendung: Digital Signature
  • Private Key: Key Exchange
  • Exportable: Ja

Wenn das Template nicht vorhanden ist, musst du es möglicherweise erstellen oder die erforderlichen Einstellungen in einem vorhandenen Template ändern.

Nachdem ein Zertifikat mit den richtigen Einstellungen erstellt wurde, kann das Zertifikat in PowerShell importiert werden und dann das Skript signiert werden, indem der folgende Befehl ausgeführt wird:

Set-AuthenticodeSignature -FilePath "C:\MyScript.ps1" -Certificate $cert -TimestampServer http://timestamp.digicert.com

Ersetze „C:\MyScript.ps1“ durch den Pfad zu deinem Skript und „$cert“ durch das Zertifikat, das du importiert hast.

Beachte, dass der TimestampServer optional ist, aber empfohlen wird, um sicherzustellen, dass das signierte Skript auch nach Ablauf des Zertifikats vertrauenswürdig bleibt. Verwende die URL des Timestamp-Servers, den deine PKI oder dein Vertrauensprovider empfiehlt.


Ein paar Exchange Skript Beispiele:

  1. Skript zum Überprüfen von Postfachberechtigungen:

Dieses Skript überprüft die Postfachberechtigungen für ein bestimmtes Postfach und gibt eine Liste der Benutzer und Gruppen aus, die Zugriff auf das Postfach haben.

Get-MailboxPermission -Identity "Postfachname" | where {$_.user.tostring() -ne "NT-AUTORITÄT\SELBST" -and $_.IsInherited -eq $false} | Select Identity,User,AccessRights
  1. Skript zum Exportieren von Postfachdaten:

Dieses Skript exportiert die Postfachdaten eines bestimmten Benutzers in eine PST-Datei.

New-MailboxExportRequest -Mailbox "Benutzername" -FilePath "\\Servername\Export\Benutzername.pst"
  1. Skript zum Erstellen von Regeln:

Dieses Skript erstellt eine Regel, die Nachrichten von einer bestimmten E-Mail-Adresse direkt in einen bestimmten Ordner verschiebt.

New-InboxRule -Name "Regelname" -MailFrom "E-Mail-Adresse" -MoveToFolder "Ordnername"

4. Skript zum löschen eines Postfaches:

Dieses Skript löscht ein bestimmtes Postfach und alle dazugehörigen Datenbankobjekte.

Remove-Mailbox -Identity "Benutzername" -Database "Datenbankname" -Confirm:$false

Abschließend noch eine generelle Empfehlung, nutzt immer vorab zum Test den -WhatIf Parameter am Ende des Codes oder testet eure Skripte in einer Demo-Umgebung.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert