SlideShare ist ein Scribd-Unternehmen logo

Windows Powershell

Grundlagen und Konzepte Der Powershell

Windows Powershell

1 von 106
Downloaden Sie, um offline zu lesen
Windows Powershell
Automatisierung der Administration
Warum eine neue Shell?
• Schwächen von CMD und VBScript
• I / O
• API Zugriff, Objektorientierung
• Unübersichtliche Sammlung von Tools ablösen
• Einheitliche Programmierumgebung im Windows Umfeld
• C#, ASP.NET, Powershell -> .Net Famework
Was ist die Windows Powershell?
• Konsole Host – Verarbeitung von Befehlen
• Interpreter für ps1, psm1, psd1 (powershell.exe)
• Provider für Dateisystem, Registry,
Umgebungsvarablen,etc
• Objekt basierende Sprache
Exkurs: Klassen & Objekte
• Klassen fungieren als Baupläne für gleichartige
Datentypen
• Klassen definieren Schnittstellen (Eigenschaften,
Methoden, Ereignisse) und Zugriffsmethoden (Lesen,
Schreiben)
• Objekte sind konkrete Instanzen einer Klasse
(Notepad.exe als Instanz der Prozess-Klasse)
Klassentypen (Objektmodelle)
.NET Library (ca. 3500 Klasen)
Windows Management Information (ca. 1400
Klassen)
Component Object Model (100-x Klassen)
P
R
O
V
I
D
E
R
C
O
N
S
U
M
E
R
(vbs,
WPS,
AutoIT
,etc)
Consumer & Provider
.NET Framework System.ServiceProcess.ServiceController Get-Service
Windows
Management
Instrumentation
(WMI)
rootcimv2Win32_QuickFixEngineering Get-Hotfix
PROVIDER Klasse Befehl

Recomendados

Zentrale Dokumentengenerierung mit dem Open XML SDK
Zentrale Dokumentengenerierung mit dem Open XML SDKZentrale Dokumentengenerierung mit dem Open XML SDK
Zentrale Dokumentengenerierung mit dem Open XML SDKAndré Krämer
 
C Sharp Einfuehrung Teil 2
C Sharp Einfuehrung Teil 2C Sharp Einfuehrung Teil 2
C Sharp Einfuehrung Teil 2DraphonyGames
 
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...NETWAYS
 
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...André Krämer
 
Einführung in die funktionale Programmierung mit Clojure
Einführung in die funktionale Programmierung mit ClojureEinführung in die funktionale Programmierung mit Clojure
Einführung in die funktionale Programmierung mit ClojureSascha Koch
 
Javascript done right
Javascript done rightJavascript done right
Javascript done rightDirk Ginader
 
Entity Framework hinter den Kulissen
Entity Framework hinter den KulissenEntity Framework hinter den Kulissen
Entity Framework hinter den KulissenAndré Krämer
 

Más contenido relacionado

Was ist angesagt?

C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1DraphonyGames
 
Wordpress Template Workshop
Wordpress Template WorkshopWordpress Template Workshop
Wordpress Template Workshopphillipgroschup
 
Web 2.0 Mit Der Yahoo User Interface Library
Web 2.0 Mit Der Yahoo User Interface LibraryWeb 2.0 Mit Der Yahoo User Interface Library
Web 2.0 Mit Der Yahoo User Interface LibraryStephan Schmidt
 
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-EntwicklerYes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-EntwicklerGregor Biswanger
 
JVM Concurrency auf der JavaLand am 8. März 2016
JVM Concurrency auf der JavaLand am 8. März 2016JVM Concurrency auf der JavaLand am 8. März 2016
JVM Concurrency auf der JavaLand am 8. März 2016Lutz Hühnken
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersUlrich Krause
 
.NET Datenzugriff einfach und performant mit Micro O/R Mappern
.NET Datenzugriff einfach und performant mit Micro O/R Mappern .NET Datenzugriff einfach und performant mit Micro O/R Mappern
.NET Datenzugriff einfach und performant mit Micro O/R Mappern André Krämer
 
Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Gregor Biswanger
 
The Lotus Code Cookbook
The Lotus Code CookbookThe Lotus Code Cookbook
The Lotus Code CookbookUlrich Krause
 

Was ist angesagt? (12)

C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1
 
Daisy
DaisyDaisy
Daisy
 
Wordpress Template Workshop
Wordpress Template WorkshopWordpress Template Workshop
Wordpress Template Workshop
 
Web 2.0 Mit Der Yahoo User Interface Library
Web 2.0 Mit Der Yahoo User Interface LibraryWeb 2.0 Mit Der Yahoo User Interface Library
Web 2.0 Mit Der Yahoo User Interface Library
 
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-EntwicklerYes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
 
JVM Concurrency auf der JavaLand am 8. März 2016
JVM Concurrency auf der JavaLand am 8. März 2016JVM Concurrency auf der JavaLand am 8. März 2016
JVM Concurrency auf der JavaLand am 8. März 2016
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino Developers
 
.NET Datenzugriff einfach und performant mit Micro O/R Mappern
.NET Datenzugriff einfach und performant mit Micro O/R Mappern .NET Datenzugriff einfach und performant mit Micro O/R Mappern
.NET Datenzugriff einfach und performant mit Micro O/R Mappern
 
SciflowWriter
SciflowWriterSciflowWriter
SciflowWriter
 
Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1
 
The Lotus Code Cookbook
The Lotus Code CookbookThe Lotus Code Cookbook
The Lotus Code Cookbook
 
Neuerungen in TYPO3 6.0
Neuerungen in TYPO3 6.0Neuerungen in TYPO3 6.0
Neuerungen in TYPO3 6.0
 

Ähnlich wie Windows Powershell

Abläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenAbläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenChristian Münch
 
Python Mike Müller
Python Mike MüllerPython Mike Müller
Python Mike MüllerAberla
 
AdminCamp 2011 Performance
AdminCamp 2011 PerformanceAdminCamp 2011 Performance
AdminCamp 2011 PerformanceUlrich Krause
 
C API for Lotus Notes & Domino
C API for Lotus Notes & DominoC API for Lotus Notes & Domino
C API for Lotus Notes & DominoUlrich Krause
 
C / C++ Api for Beginners
C / C++ Api for BeginnersC / C++ Api for Beginners
C / C++ Api for BeginnersUlrich Krause
 
Überblick über aktuelle Versionsmanagementsysteme
Überblick über aktuelle VersionsmanagementsystemeÜberblick über aktuelle Versionsmanagementsysteme
Überblick über aktuelle VersionsmanagementsystemeAndreas Schreiber
 
Der oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerterDer oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerterGunther Pippèrr
 
Dnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondDnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondUlrich Krause
 
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG KonferenzDomino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenzpanagenda
 
Best Practices SharePoint and SQL Installation
Best Practices SharePoint and SQL InstallationBest Practices SharePoint and SQL Installation
Best Practices SharePoint and SQL InstallationSamuel Zürcher
 
Creasoft - Windows powershell
Creasoft - Windows powershellCreasoft - Windows powershell
Creasoft - Windows powershellCreasoft AG
 
Templates, Code & Tools
Templates, Code & ToolsTemplates, Code & Tools
Templates, Code & ToolsUlrich Krause
 
Doctrine 2 - An Introduction (German)
Doctrine 2 - An Introduction (German)Doctrine 2 - An Introduction (German)
Doctrine 2 - An Introduction (German)Michael Romer
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsJosef Adersberger
 

Ähnlich wie Windows Powershell (20)

Abläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenAbläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisieren
 
C++ kompakt
C++ kompaktC++ kompakt
C++ kompakt
 
Python Mike Müller
Python Mike MüllerPython Mike Müller
Python Mike Müller
 
AdminCamp 2011 Performance
AdminCamp 2011 PerformanceAdminCamp 2011 Performance
AdminCamp 2011 Performance
 
C API for Lotus Notes & Domino
C API for Lotus Notes & DominoC API for Lotus Notes & Domino
C API for Lotus Notes & Domino
 
C / C++ Api for Beginners
C / C++ Api for BeginnersC / C++ Api for Beginners
C / C++ Api for Beginners
 
Überblick über aktuelle Versionsmanagementsysteme
Überblick über aktuelle VersionsmanagementsystemeÜberblick über aktuelle Versionsmanagementsysteme
Überblick über aktuelle Versionsmanagementsysteme
 
Der oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerterDer oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerter
 
BIT I WiSe 2014 | Basisinformationstechnologie I - 07: Betriebssysteme
BIT I WiSe 2014 | Basisinformationstechnologie I - 07: BetriebssystemeBIT I WiSe 2014 | Basisinformationstechnologie I - 07: Betriebssysteme
BIT I WiSe 2014 | Basisinformationstechnologie I - 07: Betriebssysteme
 
NRWConf2013_T4CodeGeneration
NRWConf2013_T4CodeGenerationNRWConf2013_T4CodeGeneration
NRWConf2013_T4CodeGeneration
 
Dnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondDnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyond
 
Node.js Security
Node.js SecurityNode.js Security
Node.js Security
 
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG KonferenzDomino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
 
Best Practices SharePoint and SQL Installation
Best Practices SharePoint and SQL InstallationBest Practices SharePoint and SQL Installation
Best Practices SharePoint and SQL Installation
 
Ec2009 Templates
Ec2009 TemplatesEc2009 Templates
Ec2009 Templates
 
OpenCL Grundlagen
OpenCL GrundlagenOpenCL Grundlagen
OpenCL Grundlagen
 
Creasoft - Windows powershell
Creasoft - Windows powershellCreasoft - Windows powershell
Creasoft - Windows powershell
 
Templates, Code & Tools
Templates, Code & ToolsTemplates, Code & Tools
Templates, Code & Tools
 
Doctrine 2 - An Introduction (German)
Doctrine 2 - An Introduction (German)Doctrine 2 - An Introduction (German)
Doctrine 2 - An Introduction (German)
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 

Windows Powershell

  • 2. Warum eine neue Shell? • Schwächen von CMD und VBScript • I / O • API Zugriff, Objektorientierung • Unübersichtliche Sammlung von Tools ablösen • Einheitliche Programmierumgebung im Windows Umfeld • C#, ASP.NET, Powershell -> .Net Famework
  • 3. Was ist die Windows Powershell? • Konsole Host – Verarbeitung von Befehlen • Interpreter für ps1, psm1, psd1 (powershell.exe) • Provider für Dateisystem, Registry, Umgebungsvarablen,etc • Objekt basierende Sprache
  • 4. Exkurs: Klassen & Objekte • Klassen fungieren als Baupläne für gleichartige Datentypen • Klassen definieren Schnittstellen (Eigenschaften, Methoden, Ereignisse) und Zugriffsmethoden (Lesen, Schreiben) • Objekte sind konkrete Instanzen einer Klasse (Notepad.exe als Instanz der Prozess-Klasse)
  • 5. Klassentypen (Objektmodelle) .NET Library (ca. 3500 Klasen) Windows Management Information (ca. 1400 Klassen) Component Object Model (100-x Klassen) P R O V I D E R C O N S U M E R (vbs, WPS, AutoIT ,etc)
  • 6. Consumer & Provider .NET Framework System.ServiceProcess.ServiceController Get-Service Windows Management Instrumentation (WMI) rootcimv2Win32_QuickFixEngineering Get-Hotfix PROVIDER Klasse Befehl
  • 7. Consumer & Provider • Effektiv: Klassenbibliotheken als Werkzeugkiste • Schnittstellenanalyse mit Get-Member • Bei Bedarf Providerwechsel • Provider filtern unseren Blick auf die Dinge • Ordnen Sie die richtigen Provider Ihren administrativen Aufgaben zu !
  • 8. Starten der Powershell • Powershell-Ordner: • Powershell.exe • Powershell_ISE.exe
  • 9. Vorbereitung: Ausführungsrichtlinie Wert Auswirkung Restricted Alle Skripte werden blockiert AllSigned Alle Skripte müssen vor der Ausführung signiert werden Unrestricted Ausführung aller Skripte, Externe Skripte lösen eine Warnung aus Bypass Alle Skripte werden ohne Warnung ausgeführt Undefined Die im aktuellen Kontext gesetzte Ausführungsrichtlinie wird entfernt. GPO bleibt bestehen
  • 11. Zielsetzung • Anpassung des Konsolen Host • Portierung von Befehlen auf andere Systeme / Admins • Vereinfachte Handhabung komplexer Verarbeitungen • Integration eigener Erweiterungen in die Verarbeitungslogik und • In das Hilfesystem der Powershell
  • 13. UNIT 0 Basics • Syntaxvervollständigung mit • Get-P • Get-Process – • Get-Childitem C:Windowssystem32 –ErrorAction • Befehlhistory abrufen mit • Nicht case-sensitive • Get-Process ~ get-Process ~ GET-PROCESS • $pc = $env:ComPuterName ~ $PC = $ENV:computername; etc • Anweisungsende oder „;“ F7 Enter
  • 14. UNIT 0 Basics Ausdrucksmodus: 2 + 2 Der Befehl wird als mathematische Operation interpretiert Befehlsmodus: Write-host 2 + 2 2+2 wird als Parameter des Befehls „write-host“ interpretiert Subparse: Write-host $(2+2;4+4) Komplexe Parameterwerte müssen zunächst ausgewertet werden
  • 15. UNIT 0 Basics • Selbstdokumentierendes Hilfesystem • Update-help -UiCulture „en-US“ –Module * -EA SilentlyContinue (Version 3+) • Get-help Befehl -detailed • Get-help Befehl –online (Version 3+) • Show-Command (Version 3+) • Get-Help about_ [Hilfe zu Konzepten und Konstrukten] • Konzepte: Wildcards, Remoting, Signing, etc • Konstrukte: if, foreach, function, etc
  • 16. Fragen & Übungen • Was macht einen leistungsstarken „Consumer“ aus? • Überdauert eine Variable oder ein Alias die Konsole? • Wie können wir die Ausgabe von Get-History noch erreichen ? • Was ist dann ein „RunSpace“ ?
  • 17. Unit 1: Powershell Monads Function Alias CmdLet Scripte Binaries
  • 18. Programme starten • Get-ChildItem $env:windir -Filter *.log | Invoke-Item #Standardaktion durchführen • $Str = "Ping 127.0.0.1"; # invoke-Expression führt Zeichenketten aus Invoke-Expression $Str • $pc = $env:COMPUTERNAME; $cred = get-Credential invoke-command -ScriptBlock {ipconfig} -Credential $cred -ComputerName $pc
  • 19. Alias • Verweis auf einen anderen Befehl • Anlage und Bearbeitung: • Export-Alias • Get-Alias • Import-Alias • New-Alias • Set-Alias Aliase verarbeiten keine Parameter. Für flexible, selbstdefinierte Monads eignen sich Funktionen.
  • 20. Cmdlet • Verb[Aktion]-Noun[Ziel] • 3 Parametertypen steuern CmdLets: • Benannte Parameter • Positionierte Parameter • Allgemeine [Common] Parameter Get-Command –Noun Process Get-Command –Verb Export Get-Command –ParameterName id Get-Command -Syntax -Name get-process Get-Command –CommandType CmdLet
  • 21. Function • Schlüsselwort „function“ • Get-help about_function Eine Funktion kapselt eine beliebige Anzahl von Anweisungen. Beim Aufruf werden Parameter durch Leerzeichen getrennt übergeben. function get-wpsbef($pfad){ …… #> function get-filecount { param( [parameter(Mandatory=$true)] [String] $path )
  • 22. Merksätze Konzept Monad • Ranking 1.ALIAS 2.FUNCTION 3.CMDLET 4.SCRIPT • Alias ist schlecht (Vermittlung an andere MONADS, Verwirrt den ADMIN) • Namenskonzept Verb-Noun, bei Funktionen eigene Praefix • Comment based help nutzen
  • 23. Fragen & Übungen • Was sind die 3 eingebauten Befehlstypen der Powershell ? • Was ist eigentlich der Unterschied zwischen get- childitem C:Windows -include *.log und get- Childitem C:windows -filter *.log? • Warum funktioniert das : Set-Mailbox -id testuser –Office Sales Und das nicht: Get-Mailbox -OrganizationalUnit contoso.com/Sales Users/Phoenix ?
  • 24. UNIT 2 PipeLine  Weiterverarbeitung von Rückgabewerten  Ähnlich der UnixPipe  Aber: Kein Parsen von Text  Elemente sind Objekte
  • 25. UNIT 2 PipeLine Ziel CmdLet Sortieren Sort-Object Gruppieren Group-Object Filtern Where-Object Messen Measure-Object Verzweigen Tee-Object Auswählen Select-Object Vergleichen Compare-Object
  • 26. Fragen & Übungen • Alle Prozesse die nicht von Hersteller „Microsoft“ sind finden wir wie? • Die 2 größten XML Dateien unter C:Windows und Unterordnern werden gesucht. • Welche EventID hat die häufigsten Einträge im Ereignissprotokoll „Application „ verursacht?
  • 27. PsPipeLine Merksätze • Eingangsmenge möglichst klein • Wenig PipeLineseqmente • Logische Operatoren nutzen • Ranking / Filtern • Konzept noun -> object
  • 29. Format- Cmdlets • Formatierungsbefehle steuern die Bildschirmausgabe • Format-List • Format-Table • Format-Wide • Format-Custom • Parameter steuern die Format Cmdlets
  • 31. WPF • Trennung von Layout und Programmierlogik • UI in XAML implementiert • Unabhängigkeit vom Code • DataProvider für Anbindung externer Datenquellen • Codebehind • Vektor basierte Grafiken
  • 32. WPF XAML Namensräume • http://schemas.microsoft.com/winfx/2006/xaml/presen tationMarkup extensions • Controls Definitions • http://schemas.microsoft.com/winfx/2006/xaml • Markup Schema
  • 33. WPF XAML • Properties Elements • Markup extensions • <Button Content="Button" HorizontalAlignment="Left" Margin="142,114,0,0" VerticalAlignment="Top" Width="224" Height="69" Name="B1"> • <Button.Background> • red • </Button.Background>
  • 34. UNIT 3 PSProvider • Alles ist Container oder Leaf • Provider bereiten Daten auf und bieten vereinfachte Schnittstellen • Gleiche Syntax zur Änderung im Dateisystem, Registry, AD, etc • Module bieten spezielle Laufwerke (ActiveDirectory, Web-Administration, etc)
  • 36. PsProvider Noun Bedeutung Location Orte adressieren / ermitteln Item ,childitem,ItemProperty Elemente in PsDrives von Provider spezifischem Typ Content Inhalt -> schreiben, lesen, anhängen von Inhalt PsProvider, PsDrive Laufwerke, von Providern gestellt Path Achsen zwischen den Items [Pfade] Get-Command –noun xxx; get-help Befehl - detailed
  • 37. Fragen & Übungen • Sie möchten alle *.log Dateien unter C:Windows nach C:Backup sichern. Wie ? • Legen Sie einen Ordner „C:udat“ an. Darin eine Textdatei „datum.txt“. • Diese soll das aktuelle Datum enthalten. • Versehen Sie diese Datei mit einem Schreibschutz. • Wie lese ich alle Einträge in der Registry im Schlüssel „HKLM“ mit dem Namen "*Microsoft*" aus?
  • 38. UNIT 4 Scripting • Basics • Sicherheit (Ausführungsberechtigungen) • Konstrukte • Scripttypen
  • 39. C orientierte Sprache WPS Konstrukt Syntax Ausdruck (2 + 2) Feldadressierung $arr[0] Anweisungsblock If (a) {Anweisungen} Anweisungsende ; Variablenpräfix $
  • 41. Scripting • PS ist Konsole und Scriptinterpreter • Ablaufumgebung ist die Powershell.exe • Sie interpretiert zeilenweise (bis Version 2!) • Es gibt 3 Gültigkeitsbereiche: • Konsole (Global) • Script (Script) • Function (Private)
  • 42. Powershell - Scripte • Erstellen Sie einen Skriptkopf • Für jedes größere Skript sollten Sie einen Skriptkopf erstellen, der das nachfolgende Skript hinreichend beschreibt. • Kommentierung des Skripts • Kommentieren Sie Ihr Skript an allen kritischen Stellen. Im Zweifel gilt der Grundsatz: Eher einen Kommentar zu viel als zu wenig! • Modularisieren Sie das Skript • Verwenden Sie Funktionen zur Modularisierung Ihres Skripts. Dadurch erhöht sich die Lesbarkeit und verbessert sich im Allgemeinen auch die Wiederverwendbarkeit. • Achten Sie auf eine strikte Funktionskapselung • Wenn Sie Funktionen verwenden, dann sollten Sie es in der Funktion vermeiden, auf Variablen aus dem aufrufenden Skript zuzugreifen. Der einzige Austausch von Werten zwischen Skript und Funktion sollte über Parameter und Rückgabewerte erfolgen. Nur so erstellen Sie wiederverwendbare Funktionen.
  • 46. Powershell – Scripte Parameterübergabe Unbenannte Parameter werden beim Scriptaufruf automatisch in das Array $Args überführt ./script.ps1 argument argument2 Benannte Parameter werden in Form eines Anweisungsblocks übergeben: param( [PARAMETER (mandatory=$true,Position=0)] [STRING]$file )
  • 47. Notwendige Konstrukte 1. Kapselung (Function, PsObject) 2. Wertecontainer (Variablen, Arrays, Hash, Konstanten) 3. Verzweigung (if, switch) 4. Modularisierung (.Sourcing, Script-Module) 5. I/O Funktionen (Konsolenverben) 6. Fehlerbehandlung, Debugging (#require, set-PsDebug, trap, try, etc) 7. Schleifen (for,foreach,do,while) 8. Argumente, Parameter Get-help about_Konstrukt
  • 48. Modularisierung Scriptlets exportieren: Konstanten / Variablen Standardfunktionen Funktions bibliotheken exportieren: Gekapselte Anweisungen Scriptmodule exportieren: Aliase, CmdLets, Funktionen, Variablen .SOURCING .SOURCING Import-Module Wartung Verteilung Verteilung
  • 50. Modularisierung / Scriptbibliotheken Main.ps1 . C:tool1.ps1 . C:tool2.ps1 Tool1.ps1 Tool2.ps1 Motivation Wiederwendung / Vereinfachung / Automatische Funktionserweiterung Portiere auf andere Systeme / andere Admins
  • 51. Nutzen Sie … Vermeiden Sie .. Kapselung durch Funktionen „Spaghetti Code“ ohne Struktur Script-Bibliotheken durch .Sourcing Ungewollte Bildschirmausgaben Kommentar basierte Hilfe Nicht ausgelagerte Konstanten Verteilung über Script Module „Willkürliche“ oder fehlende Dokumentation „Forking“ mit Jobs Langsame Pipeline Konstrukte Fehlerbehandlung mit ExitCodes Script Header zur Steuerung der Anwendung Fazit
  • 52. Script Module • Powershell Scripte mit der Endung PSM1 • Exportieren Aliase, Funktionen und Variablen • Können im Module Pfad in einem Unterordner gleichen Namens liegen Wichtige Befehle: • Export-ModuleMember Definiert die Member eines Moduls, die in die aufrufende Umgebung exportiert (= sichtbar gemacht) werden. • New-ModuleManifest Erzeugt eine neue Metadatendatei für ein Modulverzeichnis. • Test-ModuleManifest Führt eine Reihe von Tests zur Überprüfung der Manifestdatei aus.
  • 53. Script Module Konzepte: • Module Member Ein Module Member ist jede Funktion, Variable oder Alias, der innerhalb eines Skripts definiert wird. • Module Manifest Ein Manifest ist eine Datendatei, die Informationen über das Modul als solches enthält und kontrolliert, wie ein Modul geladen wird. • Module Type Es gibt drei Arten von Modulen: Skript-, Binär- und Manifestmodule. • Nested Module Ein Modul kann weitere Module laden. Entweder über das Cmdlet Import-Module oder über Funktionen im Manifest. • Root Module Ein Root Module ist die Hauptmoduldatei, die geladen wird, wenn ein Modul importiert wird. • Exported Member Ein exportiertes Member ist ein Modul Member, welches nach Import des Moduls sichtbar ist
  • 54. Manifest Dateien • Ein Modulmanifest ist eine .PSD1 Datei welche selber einen Hash definiert • Die Schlüssel und Werte dieser Hashtabelle beschreiben den Inhalt und die Attribute des Moduls • Definieren die notwendige Bedingungen zum Laden des Moduls • Bestimmen, wie die einzelnen Komponenten des Moduls verarbeitet • Werden • Liegt im root des Moduls • Die Erstellung eines Manifests ist optional. New-ModuleManifest -Author thomas -Description filetools -FunctionsToExport get-filecount,reset-filecount -Path "C:udatmod.psd1" -ModuleToProcess "module-adv1"
  • 55. Manifest Dateien Auszug: @{ # Die diesem Manifest zugeordnete Skript- oder Binärmoduldatei. RootModule = 'module-adv1' # Die Versionsnummer dieses Moduls ModuleVersion = '1.0' # ID zur eindeutigen Kennzeichnung dieses Moduls GUID = '53d949af-be3d-458d-85d8-e8511df1af9d' # Autor dieses Moduls Author = 'thomas‚ …….
  • 56. UNIT 5 Zeichenketten Technik Beispiel String-Object („Thomas“).ToUpper() -replace „T“,“z“ Thomas –replace „K“,“z“ Operatoren -like „*de*“, -match „Muster“ Select-String Eingabemenge | Select-String –Pattern „Muster“
  • 57. Reguläre Ausdrücke Syntax Beispiel [a-d] „H[a-d]“ w (a-z, A-Z) „Kwoedel“ d (0-9) 48ddd s „HallosWelt“ . (Beliebiges Zeichen) .ww (Anfang bel. Gefolgt von 2 Buchstaben) Thomas „Thomasl“ . (Escape Sequence) „Test.com“ Syntax Häufigkeit + (1-n) *(0-n) ? (0-1) „w+“ {3} (genau 3x) {3,4} (3-4x) „d{3,4}“
  • 58. UNIT 6 Hintergrundjobs • Ziel: Asynchrone Verarbeitung • Performancesteigerung • Methode: Mehrere komplexe Routinen in eigene Prozessräume auslagern
  • 60. Hintergrundjobs Jobs (eigener Prozess, Austausch über XML) -asJob (get-help * -parameter asjob) Get-command –noun job Rückgabe durch Receive-job (nur 1x !), speichern Vor dem Entfernen müssen Jobs beendet werden. Maximal 30 Jobs !
  • 61. Cron Jobs • Einmalige Ausführung oder Wiederholung möglich • Intervallsteuerung in Zeiteinheiten(day, week, month) durch Trigger • Eigenes Modul PSScheduledJob • -JobTrigger(Zeitsteuerung) • -ScheduledJob (Registrierung) • etc • Ereignisse können verwendet werden (LogOn, etc) • Alternative Credentials können übergeben werden • PSScheduledJob module with 16 cmdlets
  • 62. Remoting -Sicherheit • Powershell Remoting ist sicher: • Keine „erhöhten“ Rechte, kein „Superuser“ Modus • Keine Scripte, nur Befehle werden an das Zielsystem portiert • Nur Befehle zu denen der Admin die Berechtigung hat • Beschränkt auf Administratoren • Credentials werden verschlüsselt (Kerberos) • Remote-Maschinen haben keinen Zugriff auf die Credentials, nur auf den delegierten „Security token“ (Kerberos ticket)
  • 63. Remoting -Sicherheit • Powershell Remoting ist sicher: • WPS bietet mehr Möglichkeiten der Einschränkung: • Endpunktkonfiguration selbst für Admins • SSL möglich • Passwörter werden nicht permanent gespeichert • Im Speicher der nicht auf Festplatte geschrieben werden kann • Alle Absicherungen gegen Angriffe gelten auch für die WPS
  • 64. Unumgänglich • Fernadministration ohne Remoting unmöglich • Selbst GUI Elemente in der Remoteverwaltung nutzen Remotetechnologien • Teil von Windows Server 2012 • MMC nutzt WSMAN Remoting • Kritische Dienste ohne Remoteprotokolle auch über Server Konsole oder RDP nicht zu verwalten • Kein Unterschied zwischen lokaler / remote Konsole • Aber: Remoting kann besser abgesichert werden
  • 65. Unumgänglich • WPS Remoting hat weniger Overhead als RDP • Nur WPS Remoting bietet „Fan out“ • WPS Remoting ist automatisierbar • Remoting ist Microsofts Standardweg der Administration • Remoting verlangt gegenseitige Authentifizierung • Kein versehentliches Einloggen auf der falschen Konsole
  • 66. Remoting Vorausetzung • .NET 3 (WPS 2) • Set-Service WinRM -computername $servers -startup Automatic • CNAME records
  • 67. Remoting aktivieren • PowerShell als Administrator starten (!) • Get-Service winrm: ist der Dienst gestartet? • Enable-PSRemoting [-force] –SkipNetworkProfileCheck • Testen: • Get-PSSessionConfiguration • Winrm get winrm/config • Cd WSMAN:
  • 68. TroubleShooting • Import-Module PsDia* • Enable-PSWSManCombinedTrace • Enter-Pssession • get-Winevent Microsoft-Windows-winrm/operational
  • 69. Remoting Architektur Lokaler Verwaltungsrechner / Powershell.exe WS-MAN HTTP(S) Entfernte Maschine / Powershell.exe HTTP Listener WINRM EndPoint EndPoint
  • 70. WinRM, DCOM , RPC • WMI + DCOM = zufällige Ports der Kommunikation Port 315 Init • Get-WmiObject –ComputerName $srv
  • 71. Implizites Remoting • get-Command -CommandType Cmdlet | ? {$_.Parameters.keys -eq "ComputerName"}
  • 72. PSSession • Remote – Sessions verbleiben auch inaktiv bis zu 4 Minuten im Zustand “Connected” • Danach wird der Zustand (state) auf “DisConnected” geändert • Befehlen und Sitzungen arbeiten auch im Zustand “DisConnected” • Sitzungen können wieder aufgenommen warden (Connect-PsSession)
  • 73. Unit 11: Administration - WMI  Implementierung des Web Based Enterprise Managements (WBEM)  Standardisierung durch die DMTF (Desktop Management Task Force)  Common Information Model (CIM) als Kern von WMI  Beschreibung sowohl physischer (z. B. Festplatte) als auch logischer Objekte (Dateien, Prozesse) innerhalb eines Objektmodells  CIM als Vereinigung von Standards wie ISO Management Framework, X.700 und SNMP  Zugriffsmöglichkeiten auf Active Directory, Windows Installer, Performance Counters
  • 74. Administration - WMI  Ermitteln verschiedenster Systemparameter  Sammeln von Informationen über mehrere Systeme hinweg  Setzen von Parametern / Konfigurieren von Geräten/Programmen  Auslösen von Events zu bestimmten Systemereignissen  Abfrage von Informationen in WQL
  • 75. Type hinting (Accelerator) - WMI  Namespace: System.Management Namespace  [wmiclass] = ManagementClass  $bios = [WMICLASS]"rootcimv2:Win32_BIOS"  [wmi] = ManagementObject  $Platte = [WMI]"Win32_LogicalDisk.DeviceID='C:'"  [wmisearcher] = ManagementObjectSearcher  $netadapter = [wmisearcher]"select * from win32_networkadapter“  $netAdapter.get()
  • 76. Administration - WMI Aufrufe: Get-WmiObject <Klasse> Get-WmiObject <Klasse> -filter <Where-Teil einer WQL> Get-WmiObject –query <WQL> Zugriff auf Remote-Systeme Get-WmiObject <Klasse> -computername <Name des Systems> Get-WmiObject <Klasse> -computername <Name des Systems> -credential <Credential> Casting: $laufwerk = [WMI] "F171rootcimv2:Win32_LogicalDisk.DeviceID='C:'" "Die aktuelle Bezeichnung von Laufwerk C ist: " + ($laufwerk.Volumename)
  • 77. Administration – WMI Query WQL Erläuterung SELECT * FROM Win32_Service WHERE state='running' and startmode='manual' Alle Windows-Dienste, die laufen, aber manuell gestartet wurden SELECT Name, CategoryId FROM Win32_ComponentCategory Name und CATID aller Komponentenkategorien SELECT IPAddress FROM Win32_NetworkAdapterConFiguration WHERE IPEnabled=TRUE Das mehrwertige Attribut IPAddress einer Netzwerkkarte, die für das IP-Protokoll zuge- lassen ist SELECT RecordNumber, Message FROM Win32_NTLogEvent WHERE LogName='Application' Eintragsnummer und Nachricht aller Einträge in das Ereignisprotokoll „Anwendung“
  • 78. Administration – Werte setzen # Instanzmitglied abrufen aus Instanz $laufwerk = [wmi] ".rootcimv2:Win32_LogicalDisk.DeviceID='C:'" # Zugriff auf aktuellen Wert "Die aktuelle Bezeichnung von Laufwerk C ist: " + ($laufwerk.Volumename) # Änderung des Wertes "Laufwerksname wird geändert" $laufwerk.Volumename = "Sys" $laufwerk.Put() "Die aktuelle Bezeichnung von Laufwerk C ist nun: " + ($laufwerk.Volumename)
  • 79. Administration – Methode ausführen Get-CimInstance -computername F171 -namespace "rootcimv2" -class "Win32_ LogicalDisk" -Filter "DeviceID='t:'" | Invoke-CimMethod -MethodName "Chkdsk" -Arguments @{ FixErrors=$false; VigorousIndexCheck=$false; SkipFolderCycle=$false; ForceDismount=$false; RecoverBadSectors=$false; OKToRunAtBootUp=$false }
  • 80. Ereignisse - WMI IE Startet: Register-WmiEvent ` -Query "select * from __InstanceCreationEvent within 50 where TargetInstance ISA 'Win32_Process' and TargetInstance.Name = 'iexplore'" ` -Action { Write-Host -Object ("Process gestartet:" + $Event.SourceArgs.NewEvent.TargetInstance.Name) }; & "C:Program FilesInternet Exploreriexplore.exe„ Druckjob erstellt: Register-WmiEvent ` -Query "select * from __InstanceCreationEvent within 5 where TargetInstance ISA 'Win32_PrintJob'" ` -Action { Write-Host -Object "New print job created" };
  • 81. Ereignisse - WMI SELECT * FROM __InstanceModiFicationEvent WITHIN 5 WHERE TargetInstance ISA "Win32_Service" AND Target Instance. State="Stopped" Alle fünf Sekunden wird geprüft, ob ein Dienst den Status Stopped bekommen hat. SELECT * FROM __InstanceCreationEvent WHERE TargetInstance ISA "Win32_ NTLogEvent" AND TargetInstance. LogFile="Application" OR TargetInstance.LogFile="System" Jeder neue Eintrag in den Ereignisprotokollen System und Application löst ein Ereignis aus.
  • 82. WMI-Schemaquery - WMI Systemklasse Meta_Class und deren Eigenschaft __Class abfragen: $namespace="root/cimV2" $query=”Select * From Meta_Class Where __Class = 'Win32_bios'" $class=Get-WMIObject –query $query -namespace $namespace $class.properties | select name
  • 84. Unit 12 COM / DCOM • Instanzbildung durch New-Object –ComObject • Argument für den Parameter „ComObject“ is die ProgID • Beispiel: $net = New-Object -ComObject Wscript.Shell • $net.popUp($host.Version,4)
  • 85. Unit 12 COM / DCOM • COM Klassen listen: • get-ChildItem -Path HKLM:SOFTWAREClasses - ErrorAction SilentlyContinue | • Where-Object {$_.PSChildName -match '^w+.w+$' - and (Get-ItemProperty "$($_.PSPath)CLSID" - - ErrorAction SilentlyContinue )} | • Select-Object PsChildName | Out-GridView;
  • 86. Typen erweitern • Erweitern der Klasse DirectoryInfo um Attribut Size • function Get-DirSize($Path) • { • # Zugriff auf Unterverzeichnisse des Wurzelverzeichnises • $WurzelVerzeichnisse = Get-ChildItem $Path -Force | where { $_.GetType().Name -eq • "DirectoryInfo" } • # Iteration über die Unterordner • foreach ($AktuellesVerzeichnis in $WurzelVerzeichnisse) • { • # Ermitteln der Größe aller Dateien in dem Ordner und seinen Unterordnern • $groesse = ($AktuellesVerzeichnis | Get-ChildItem -Recurse -ea silentlycontinue | • where { $_.GetType().Name -ne "DirectoryInfo" } | Measure-Object length -Sum) • # Anfügen des Mitglieds "Size" an das DirectoryInfo-Objekt • Add-Member -InputObject $AktuellesVerzeichnis -Value $groesse.Sum -Name "Size" • -MemberType "NoteProperty" • } • WurzelVerzeichnisse | sort Size -desc • }
  • 87. Desired State Configuration (DSC) • Serverkonfiguration nach definierter Zielsetzung • Keine Sicherheitsfunktionalität • In der Zukunft einziger Weg Windows Systeme zu konfigurieren • Leicht zu erweitern über „Ressourcen“
  • 88. Desired State Configuration (DSC) • Deklarativ: Es wird eine Konfiguration beschrieben, DSC prüft und führt die notwendigen Schritte selbst aus • Imperativ: Der Administrator stellt über Anweisungen den gewünschten Zustand selbst her • DSC Ist deklarativ (Configuration) und imperativ (Ressourcen)
  • 89. DSC Voraussetzung: • Remoting / WinRM muss verfügbar sein • Enable-PsRemoting -Force • WMF 4 Voraussetzung auf allen Computern die DSC nutzen • Teil des Windows Management Framework (WMF) 4.0 [SERVER 2012 R2, Win 8.1] • Ressourcen sind als Modul implementiert • Set-ExecutionPolicy
  • 90. DSC Umsetzung: • DSC basiert auf Open Management Infrastructure (OMI) • Implementiert als kleiner Server mit CIM Repository • CIM / WMI Standard der DMTF • WMI Namensraum: Root/Microsoft/DesiredStateConfiguration Get-CimClass * root/Microsoft/Windows/DesiredStateConfiguration
  • 91. DSC Anwendung: • Neues Konstrukt Configuration • Kapselt Anweisungen wie eine Unterroutine • -OutputPath bestimmt optional den Ort der MOF Datei • Nodes sind Kindelemente von Configuration • Beschreiben die Zielelemente • Für jeden Node wird eine MOF Datei erstellt. • Ressourcen sind Kindelemente von Nodes • Definieren administrative Zielsetzungen • Bestehen aus Typ & Bezeichner
  • 92. DSC Beispiel • configuration wsh{ • node "AT" { • Registry wshremote { • Ensure ="Present" • Key ="HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows Script HostSettings" • ValueName="Remote" • ValueData="1" } • } • } • [DSC-COMPLETE.PS1]
  • 96. DSC Resourcen • Bestehen aus : • Optional Manifest (psd1) • Modul Datei (psm1) • MOF Schema Datei (-Schema.mof) • Müssen drei Funktionen imlementieren • Get-Targetresource • Set-TargetResource • Test-Targetresource
  • 100. Local Configuration Manager • Der Local Configuration Manager (LCM) besteht aus • Der CIM Klasse: MSFT_DSCLocalConfigurationManager • Diese Arbeitet mit dem Computer Account 'NT AuthoritySystem' • besteht aus 2 Scheduled Tasks (Pull Modus) • Ein Task läuft beim Start des Rechners im Pullmode • Der Zweite Task läuft alle 30 Minuten im Pullmode • Die Scheduled Tasks starten die CIM Klasse und holen (Pull) Konfigurationen von einem Share oder Webservice. (Je nach Einstellung des LCM)
  • 102. DSC Local Configuration Manager http://technet.microsoft.com/en-us/library/dn249922.aspx http://blogs.msdn.com/b/powershell/archive/2013/12/09/understanding-meta-configuration-in-windows-powershell-desired-state-configuration.aspx
  • 105. Pull Modus über SMB Share • SMB File Share (Best practice: nutzen Sie ein DFS Share) • Der LCM arbeitet immer mit dem Computer Account 'NT AuthoritySystem'‚ dieser braucht leserecht auf dem Share! • Der Node-Name muss eine GUID sein. • Konfigurations Dateien müssen eine Checksum haben • Die Konfiguration des Local Configuration Managers auf den Clients muss für den Pull Modus vom Share eingestellt sein (DSCFileDownloadManager) • Benötigte Ressourcen müssen Lokal auf dem Client vorhanden Sein!
  • 106. DSC Push und Pull http://blogs.msdn.com/b/powershell/archive/2013/11/26/push-and-pull-configuration-modes.aspx

Hinweis der Redaktion

  1. he only solution I have found to work is to use the Component Services Manager to set the range that the random port is allocated from to something small and then manually open each one. To do this you start the Component Services Manager again and right click on My Computer and select Properties. Click the Default Protocols tab and double click on the entry “Connection oriented TCP/IP”. Use the Add button to add a suitable range of ports say 5000-5010 and click OK. After this all COM+/DCOM services will select a port in this range. To open the ports open the Windows Firewall from the Control Panel, and add one entry for each port in the range 5000 to 5010 and one for port 315 which is the port used for the initial connection.