PowerShell das geniale Allzweck-Werkzeug ! Hubert Köppen MCT Microsoft Certified Trainer for SharePoint, since 2011 @ Connect, 2014
Kursablauf Voraussetzungen für und Erste Schritte mit Windows PowerShell 4 Cmdlets und Funktionen in der Windows PowerShell Klassen und Objekte in der Windows PowerShell PowerShell-Sprache Prozesse automatisieren, Anpassungen, Skripte Administration der EDV-Landschaft Erweiterte Techniken
Voraussetzungen und unterstützte Betriebssysteme in Win 8.1 und Server 2012 R2 enthalten Auf Win 7 SP1, Srv 2008 R2 SP1 und 2012 installierbar Win 8 geht gar nicht gebraucht wird das Win-Management Framework 4 von: http://www.microsoft.com/de-de/download/details.aspx?id=40855 (enthält Win-RM 3 und ISE , …) .NET FrameWork 4.5 wird vorausgesetzt !
Unterstütze / Nicht-unterstütze Systeme Nicht unterstützte Systeme Exchange Server 2013 SP1 Exchange Server 2010 SP3 mit UR5 Machine Manager System Center 2012 Configuration System Center Virtual Manager 2008 R2 SharePoint Server 2013 SP1 SharePoint Server 2010 mit CU Februar 2014 Exchange Server 2007 Small Business Server 2011 Aktuelle Liste auf der Download-Seite des WMF-4-Pakets !
Erste Schritte mit der PS Klassische Eingabeaufforderung Wichtig: TABs, Pfeile, F7 Grafische Entwicklungsumgebung „von nun an : Öffne immer die ISE als Admin … !“ Wichtig: F9-Haltepunkte setzen, F11 Einzelschritte Virtuelle Laufwerke mit Get-PSDrive Zugriff auf Registry (HKLM und HKCU) Zugriff auf Zertifikatsspeicher Zugriff auf WSMAN Zugriff auf Variablen Klassische: Get-Service cls Get-AD.. Tab Tab Tab Tab geht auch mit Parametern, z.B. Get-Service - Tab Tab Tab Pfeil rauf Pfeil runter Get-History bzw. F7 oder auch Start-Transcript c:\Transcript.txt Grafische ISE: Gibt grafische Hilfe , auch bei Parametern Randbereich erklären Debugger mit F9 und F11 Virtuelle Laufwerke: Zur Registry per cd HKLM: und cd Software\Microsoft mit md Test neuen Ordner erstellen und nachschauen Mit rm test entfernen Zum Zerti-Speicher per cd cert: cd currentUser\My Zum Variablen-Laufwerk mit cd Variable: analog cd Functions:
Cmdlets , Alias_se, Funktionen Dieses Kapitel ist sehr umfangreich Die nächste Folie zeigt deshalb erstmal den Überblick über den Inhalt Danach geht es einzeln weiter
Cmdlets , Alias_se, Funktionen Cmdlets und Funktionen Befehle finden Kommando-Aufrufvarianten Hilfe aktualisieren auf Alle Module bezogen Hilfe aufrufen auf einzelne Cmdlets-bezogen Syntax Aliase Cmdlets verketten CSV-Strukturen verarbeiten XML-Strukturen verarbeiten Wichtige Ausgabe-Cmdlets Snap-Ins und Module Datum und Uhrzeit
Cmdlets: Befehlsfülle durch zusätzl. Erweiterungen PS-Erweiterung Cmdlets/Funktionen PowerShell 4 Basis 300 Exchange 2007 400 Exchange 2010 1000 Exchange 2013 2500 SQL Server 2012 40 SharePoint 2010 650 SharePoint 2013 800
Befehle finden / eingeben Get-command evtl. mit verb/noun filtern Unterschied cmdlets, alias, function Die Pipe | Get-Command | sort-object noun Get-Command –noun service | format-list Get-Command *-Service | fl Get-Service | Format-Table Get-Service | ft DisplayName, Status, Name, Servicetype Get-Command –module NetAdapter
Kommando-Aufrufvarianten Get-Service –name wuauserv –ComputerName . (der punkt . steht für den localhost ) Get-Service –N wuauserv –C . Get-Service –C . –N wuauserv Get-Service wuauserv (hierbei ist die Reihenfolge der Argumente wichtig) Get-Service -? Dies zeigt die Standardreihenfolge der Parameter
Hilfe aktualisieren Get-Service -? Achtung Erstmal nein zu folgender Meldung! Get-Help Get-Service –full Update-Help * -force
Hilfe aufrufen Get-Service -? = get-help get-service Get-help Get-Service –examples -detailed -full
Syntax Get-Service wuauserv,winrm,dnscache Vgl. Sie jeweils die Hilfe-Ausgabe für Get-Service und Get-EventLog Get-Service [[-Name] <string[]>] [-ComputerName <string[]>] … => Get-Service wuauserv,winrm,dnscache Get-EventLog [-LogName] <string> [[-InstanceId] <long[]>] [- ComputerName <string[]>] [-Newest <int>] [-After <datetime>] Get-Eventlog (PS fragt nach !) Get-Eventlog System -Newest 20
Aliase Dir Dir /s Get-ChildItem Get-childitem –recurse Get-Alias Set-Alias -Name gs -Value Get-Service
Cmdlets verketten Get-Process Get-Process | Sort-Object cpu Get-Process | Sort-Object cpu | Select-Object processname, cpu Get-Process | Sort-Object cpu | Select-Object processname, cpu | Export-CSV ausgabe.csv Notepad ausgabe.csv Get-Process | Sort cpu -Descending | Select processname, cpu | Export-CSV ausgabe.csv
Arbeiten mit CSV Get-service > ausgabe.txt (mit notepad angucken) Get-Service | Export-CSV ausgabe.csv WICHTIG: dies ergibt keine simple Ausgabeumleitung, sondern alle gelieferten, Werte, komplett ausgeschrieben, mit definiertem Trennzeichen Import-CSV ausgabe.csv Import-CSV ausgabe.csv | get-Member Exkurs: notepad personen.csv Wir schreiben darin Vorname, Nachname, Abteilung und ein paar Personen, was wir dann speichern, ändern dann das Trennzeichen aufs Semikolon, lesen es erneut ein und lesen es nochmal mit -delimiter „;“ ein
Arbeiten mit XML Get-Service | export-Clixml ausgabe.xml notepad ausgabe.xml Import-Clixml ausgabe.xml Import-Clixml ausgabe.xml | Get-Member
Grids Get-Service | Select-Object Name,CanStop,MachineName Get-Service | Format-Table Name,CanStop,MachineName Get-Service | ft Name,CanStop,MachineName –Autosize Get-Service | select Name,CanStop,MachineName | export-csv select.csv Get-Service | ft Name,CanStop,MachineName | export-csv format.csv (die NotepadAugabe zeigt deutlich, dass ft zur Weiterverarbeitung unsinnig ist !) Get-Process | Out-GridView Im erscheinenden Fenster kann man sortieren und filtern ! Starten Sie nun vorab notepad und dann: Get-Process | Out-GridView –PassThru | Stop-Process Wählen Sie im Grid-fenster den Notepad-Prozess, bestätigen mit OK, und sehen Sie wie der ausgewählte Prozess mittels „Passthrough“ gestoppt wird!
SnapIns und Module Anfänglich fehlende AD-, SharePoint- oder Exchange-Befehle müssen nachgeladen werden Get-PSSnapin Get-PSSnapin –Registered Add-PSSnapin –Name *SQL* Get-Command –Module *SQL* Get-Module Get-Module -ListAvailable Import-Module ServerManager Get-WindowsFeature
Datum und Uhrzeit „07/04/14“ dies ist ein String „05/03/14“ | Get-Member zeigt dies (siehe oben) [DateTime]“07/04/14“ dies ist ein DatumsZeit-Objekt [DateTime]“07/04/14“ | Get-Member die Ausgabe zeigt oben auch Rechenmethoden [DateTime]“07/04/14 05:17:20 PM“ Get-Date Get-Date –displayhint time [ bzw. date ] (Get-Date).AddDays(-20) Get-EventLog System –After ((Get-Date).AddDays(-1))
Klassen / Objekte / Methoden / Eigenschaften Beispiel: In der KLASSE „Datei“ gibt es die drei OBJEKTE „abc.txt“, „nix.docx“ und wert.xls“ . Jedes dieser Objekt ist auch eine INSTANZ einer Klasse. Die Klasse definiert, welche Mitglieder/Member jede Instanz haben soll (Eigenschaften, Methoden, Ereignisse). Die Klasse enthält auch den Programmcode zum Aufruf einer Methode, der also nur einmal gespeichert wird. Eine Klasse ist eine Schablone zur Erzeugung von Objekten Ein Synonym für Klasse ist : Objekttyp
Wichtige begriffe .NET => enthält 13542 Klassen ! (Stand .NET 4.5) ($guid = New-Object System.Guid oder $Zufallszeichen = New-object System.randon oder $w = New-Object System.Net.WebClient ) COM => ComponENT Object Model Vorgänger von .NET CIM => Common Information Model kern von WBEM , dem Web based Enterprise management WMI => Windows Management Instrumentation Zugriff auf System- und Netzwerkinformationen, hardwarenah, Microsofts Implementierung von WBEM, auf Windows 8 mit Office 2010 liefert WMI 25114 klassen !
Klassen und Objekte in der Windows PowerShell Es gibt Klassen und Objekte . Deren Eigenschaften und Methoden können mit: „ … | Get-Member „ bzw. „Get-Service | Select-Object * „ ausgelesen werden Punktnotation (Damit erfolgen Aufrufe von Eigenschaften und Methoden) z.B.: „ (Get-Service wuauserv).Status „ => zeigt „Running“ als property und: „ (Get-Service wuauserv).Stop() „ beendet den Dienst per Methodenaufruf Objekte suchen z.B.: Get-service | where-object { $_.Status -eq „Running“ } z.B.: dir C:\windows | where { $_.Length -gt 100KB } Objekte mit einer Schleife verarbeiten das Geheimnis von foreach { .. $_ .. }
Punktnotation und mehr: Übung dir c:\windows | measure-object dir c:\windows | measure-Object -property Length -sum (dir c:\windows | measure-Object -property Length -sum).sum (dir c:\windows | measure-Object -property Length -sum).sum / 1KB Cls “Connect IT Schulung” | Get-Member [welche Methoden gibt es?] “Connect IT Schulung”.ToLower() “Connect IT Schulung”.SubString(0, 7) Get-service | where-object { $_.Status -eq „Running“ } Get-service | where Status -eq „Running“ Get-service | ? Status -eq „Running“ Get-service | where-object { $_.Status -eq „Running“ –and $_.CanStop –eq $true} dir C:\windows | ? { $_.Length -gt 100KB }
Schleifen mit foreach { .. $_ .. } „London“, „Paris“ , „Wien“ „London“, „Paris“ , „Wien“ | foreach { „Verarbeite Wert“ } „London“, „Paris“ , „Wien“ | foreach { „Verarbeite Wert $_“ } „London“, „Paris“ , „Wien“ | New-Item –Type Directory „London“, „Paris“ , „Wien“ | foreach { New-Item –Type Directory -Path $_ } Get-Process | Where { $_.Processname –ieq „wordpad“ } | foreach { $_.Kill() } (Get-Process „wordpad“).Kill() Get-help about_for Get-Help about
PowerShell-Sprache Variablen Operatoren Werte abfragen Prozesse wiederholen Fehler erkennen und behandeln
Variablen $GutVarWort = „London“ $GutVarWort = 5 $GutVarWort = Get-Service [dateTime]$datum = „07/04/14“ $datum = Get-Service [Fehlertext beachten] $vorname = „Udo“ $nachname = „Herbst“ $vorname „Guten Morgen $vorname $nachname“ cls „Pa$$w0rd“ ‚Pa$$w0rd‘
Operatoren Durch + - * / hat man die 4 Basis-Rechenarten Mit % bekommt man den Divisionsrest : 30 % 7
Vergleichsoperatoren Siehe Bild Greater than (gt) lesser or equal (le) not equal (ne) [schlimmer noch ..] -is –contains –match –notlike sind auch möglich …
Werte abfragen if(Get-date).day = 1 { „Beim ersten Tag der Woche erscheint diese Zeile!“ } Else { „anderer Tag““ } Mein Vorschlag: Sie präsentieren sich gleich gegenseitig, einige Varianten wie while-Schleifen, Switch-Abfragen, o.ä!
Prozesse automatisieren eigene Funktionen, Skripte, Profile Benutzerdefinierte Funktionen Benutzerdefinierte Filter Erweiterte Funktionen Skript entwickeln Skript ausführen PowerShell-Profile
Administration Ihrer Server, der Domäne und HV-VMs PowerShell-Remote-Verwaltung Windows Server Manager Active Directory: Benutzer anlegen Active Directory: Benutzer verwalten Active Directory: Gruppen anlegen und verwalten Active Directory: Navigationsparadigma Hyper-V-VMs anlegen und verwalten Grundlagen DSC DSC-Konfiguration
Erweiterte Techniken Reaktion auf bestimmte Ereignisse Aufgaben im Hintergrund ausführen Aufgaben zeitlich planen Windows Management Instrumentation