SlideShare ist ein Scribd-Unternehmen logo
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
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 !
Starten der Powershell
• Powershell-Ordner:
• Powershell.exe
• Powershell_ISE.exe
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
Powershell
Erweiterungen
Module
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
MyModule.psm1
Import-Module Modul
Geladene
Module
Powershell.Host
etc
Verfügbare
Module
ISE
etc
Get-Module
Get-Module -listAvailable
Remove-Module Modul
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
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
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
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“ ?
Unit 1: Powershell Monads
Function
Alias
CmdLet
Scripte
Binaries
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
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.
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
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
)
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
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 ?
UNIT 2 PipeLine
 Weiterverarbeitung von
Rückgabewerten
 Ähnlich der UnixPipe
 Aber: Kein Parsen von Text
 Elemente sind Objekte
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
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?
PsPipeLine Merksätze
• Eingangsmenge möglichst klein
• Wenig PipeLineseqmente
• Logische Operatoren nutzen
• Ranking / Filtern
• Konzept noun -> object
I/O Optionen
out
export
convertto
Get-command –verb xxx
Import
Format- Cmdlets
• Formatierungsbefehle steuern die Bildschirmausgabe
• Format-List
• Format-Table
• Format-Wide
• Format-Custom
• Parameter steuern die Format Cmdlets
WPF
Windows Presentation Foundation
WPF
• Trennung von Layout und Programmierlogik
• UI in XAML implementiert
• Unabhängigkeit vom Code
• DataProvider für Anbindung externer Datenquellen
• Codebehind
• Vektor basierte Grafiken
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
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>
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)
PsProvider
PSDRIVE
ITEM
ChildItem
ItemProperty
Location
Path
Content
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
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?
UNIT 4 Scripting
• Basics
• Sicherheit (Ausführungsberechtigungen)
• Konstrukte
• Scripttypen
C orientierte Sprache WPS
Konstrukt Syntax
Ausdruck (2 + 2)
Feldadressierung $arr[0]
Anweisungsblock If (a) {Anweisungen}
Anweisungsende ;
Variablenpräfix $
Scopes [Gültigkeitsbereiche]
GLOBAL
SCRIPT
PRIVAT
• Variablen
• Aliase
• Funktionen
• PSDrives
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)
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.
Template
Parameter
Struktur
INC
Exception
Handling
Rohfunktionalität DOKU
Testen
PESTER
Ausnahmen behandeln
IOException
ItemNotFoundException
SecurityException
Ausnahmebehandlung
nach :
• Gültigkeitsbereich
• Anweisungsbezogen
• ExitCodes
Ausnahmen behandeln
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
)
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
Modularisierung
Scriptlets
exportieren:
Konstanten / Variablen
Standardfunktionen
Funktions
bibliotheken
exportieren:
Gekapselte Anweisungen
Scriptmodule
exportieren:
Aliase, CmdLets,
Funktionen, Variablen
.SOURCING
.SOURCING
Import-Module
Wartung
Verteilung
Verteilung
Modularisierung /
Funktionsbibliotheken
Function tool1()
Function tool2()
KONSOLE
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
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
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.
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
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"
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‚
…….
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“
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}“
UNIT 6 Hintergrundjobs
• Ziel: Asynchrone Verarbeitung
• Performancesteigerung
• Methode: Mehrere komplexe Routinen in
eigene Prozessräume auslagern
Hintergrundjobs
Powershell
Host-Prozess Powershell
Child-
Prozess
Powershell
Child-
Prozess
Start-job {}
Get-Job
Wait-job
Synchrone Weiterverarbeitung
Rückgabewert
Receive-Job
Rückgabewert
Receive-Job
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 !
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
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)
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
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
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
Remoting Vorausetzung
• .NET 3 (WPS 2)
• Set-Service WinRM -computername $servers -startup
Automatic
• CNAME records
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:
TroubleShooting
• Import-Module PsDia*
• Enable-PSWSManCombinedTrace
• Enter-Pssession
• get-Winevent Microsoft-Windows-winrm/operational
Remoting Architektur
Lokaler Verwaltungsrechner / Powershell.exe
WS-MAN
HTTP(S)
Entfernte Maschine / Powershell.exe
HTTP Listener
WINRM
EndPoint EndPoint
WinRM, DCOM , RPC
• WMI + DCOM = zufällige Ports der Kommunikation
Port 315 Init
• Get-WmiObject –ComputerName $srv
Implizites Remoting
• get-Command -CommandType Cmdlet | ?
{$_.Parameters.keys -eq "ComputerName"}
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)
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
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
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()
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)
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“
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)
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 }
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" };
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.
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
WMI Einsatz
Get-Member nicht
vergessen!
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)
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;
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
• }
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“
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)
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
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
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
DSC Beispiel
• configuration wsh{
• node "AT" {
• Registry wshremote {
• Ensure ="Present"
• Key ="HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows Script
HostSettings"
• ValueName="Remote"
• ValueData="1" }
• }
• }
• [DSC-COMPLETE.PS1]
DSC Resourcen (WMF 4)
DSC Resourcen
DSC Resourcen
http://technet.microsoft.com/en-us/library/dn282127.aspx
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
DSC Resourcen
DSC Befehle
Local
Configuration
Manager
(LCM)
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)
Local Configuration Manager
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
Push und Pull
Modus
Push vs. Pull
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!
DSC Push und Pull
http://blogs.msdn.com/b/powershell/archive/2013/11/26/push-and-pull-configuration-modes.aspx

Weitere ähnliche Inhalte

Was ist angesagt?

C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1
DraphonyGames
 
Wordpress Template Workshop
Wordpress Template WorkshopWordpress Template Workshop
Wordpress Template Workshop
phillipgroschup
 
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
Stephan 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-Entwickler
Gregor Biswanger
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino Developers
Ulrich 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
 
SciflowWriter
SciflowWriterSciflowWriter
SciflowWriter
Michael Sievers
 
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
Gregor Biswanger
 
The Lotus Code Cookbook
The Lotus Code CookbookThe Lotus Code Cookbook
The Lotus Code Cookbook
Ulrich Krause
 
Neuerungen in TYPO3 6.0
Neuerungen in TYPO3 6.0Neuerungen in TYPO3 6.0
Neuerungen in TYPO3 6.0
Wolfgang Wagner
 

Was ist angesagt? (11)

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
 
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

Betriebsysteme: zwei wichtige Konzepte aus der Praxis
Betriebsysteme: zwei wichtige Konzepte aus der PraxisBetriebsysteme: zwei wichtige Konzepte aus der Praxis
Betriebsysteme: zwei wichtige Konzepte aus der Praxis
Brigitte Jellinek
 
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
Christian Münch
 
C++ kompakt
C++ kompaktC++ kompakt
Python Mike Müller
Python Mike MüllerPython Mike Müller
Python Mike Müller
Aberla
 
AdminCamp 2011 Performance
AdminCamp 2011 PerformanceAdminCamp 2011 Performance
AdminCamp 2011 Performance
Ulrich Krause
 
C API for Lotus Notes & Domino
C API for Lotus Notes & DominoC API for Lotus Notes & Domino
C API for Lotus Notes & Domino
Ulrich Krause
 
C / C++ Api for Beginners
C / C++ Api for BeginnersC / C++ Api for Beginners
C / C++ Api for Beginners
Ulrich Krause
 
Überblick über aktuelle Versionsmanagementsysteme
Überblick über aktuelle VersionsmanagementsystemeÜberblick über aktuelle Versionsmanagementsysteme
Überblick über aktuelle Versionsmanagementsysteme
Andreas Schreiber
 
Der oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerterDer oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerter
Gunther Pippèrr
 
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
Institute for Digital Humanities, University of Cologne
 
NRWConf2013_T4CodeGeneration
NRWConf2013_T4CodeGenerationNRWConf2013_T4CodeGeneration
NRWConf2013_T4CodeGeneration
Christian Giesswein
 
Dnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondDnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyond
Ulrich Krause
 
Node.js Security
Node.js SecurityNode.js Security
Node.js Security
Sebastian Springer
 
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
panagenda
 
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
 
Ec2009 Templates
Ec2009 TemplatesEc2009 Templates
Ec2009 Templates
Ulrich Krause
 
OpenCL Grundlagen
OpenCL GrundlagenOpenCL Grundlagen
Creasoft - Windows powershell
Creasoft - Windows powershellCreasoft - Windows powershell
Creasoft - Windows powershellCreasoft AG
 
Templates, Code & Tools
Templates, Code & ToolsTemplates, Code & Tools
Templates, Code & Tools
Ulrich Krause
 
Doctrine 2 - An Introduction (German)
Doctrine 2 - An Introduction (German)Doctrine 2 - An Introduction (German)
Doctrine 2 - An Introduction (German)Michael Romer
 

Ähnlich wie Windows Powershell (20)

Betriebsysteme: zwei wichtige Konzepte aus der Praxis
Betriebsysteme: zwei wichtige Konzepte aus der PraxisBetriebsysteme: zwei wichtige Konzepte aus der Praxis
Betriebsysteme: zwei wichtige Konzepte aus der Praxis
 
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)
 

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.