Windows Powershell
Holger Voges CCA,MCSE, MCDBA, MCT, MCITP DB Administrator / DB Developer, MCTIP Enterprise Administrator, MCSA Windows Server 2012 Netz-Weise Freundallee 13a 30173 Hannover www.netz-weise.de
Commandlets Bilden die Befehle der Powershell Aufbau immer aus Verb und Substantiv Können erweitert werden Get-command zeigt u.a. installierte Commandlets an Get-help zeigt Hilfe zum Commandlet
Aliase Aliase ermöglichen den Zugriff auf Commandlets über alternative Aufrufe NT-Shell-Kommandos sind als Aliase eingetragen Get-Alias zeigt verfügbare Aliase an Set-Alias fügt ein neues Alias ein
Provider Powershell-Provider stellen Zugriff auf Laufwerke, Registry, Variablen bereit Get-PSProvider zeigt die installierten Provider an Get-PSDrive zeigt die Laufwerke an, New- PSDrive legt ein neues an Set-Location (Alias: CD) wechselt den Provider Get-Item, Get-Childitem, Get-Itemproperty
Variablen PSH-Variablen basierten auf.net-datentypen PSH erkennt den Variablentyp automatisch Variablen beginnen mit einem $ Zuweisung erfolgt mit einem "= [Datentyp]$Variable legt den Datentyp fest $Var=Dies ist ein Text [Int16]$Zahl
Powershell und Objekte PSH arbeitet mit Objekten Es kann auf alle Objekteigenschaften und Methoden zugegriffen werden Variablen speichern Objekte > $Dir=get-childitem c:\windows\ > get-properties InputObject $Dir
Powershell Pipeline Befehle können mit dem " " Objekte sequentiell bearbeiten ForEach-object macht Befehle, die Pipes nicht unterstützen, Pipe-fähig Auf Einzelne Objekt wird mit $_ verwiesen > get-process -name sidebar format-list -prop * > Get-Process where-object {$_.VirtualMemorySize -gt 1000000} Sort-Object -Property VirtualMemorySize format-table ProcessName,VirtualMemorySize,"CPU(s)"
Funktionen Fassen Scriptblöcke zu einem Befehl zusammen Können Parametrisiert werden Provider Function: zeigt def. Funktionen an > Set-location Function: Get-childitem
Funktionen definieren Function Subtrahiere($Wert1=10, $Wert2=20) { $Wert1 - $Wert2 } Function Subtrahiere($Wert1=$(Throw Wert1 wurde nicht angegeben!, $Wert2=20) { $Wert1 - $Wert2 }
Powershell und WMI Get-WMIObject stellt Verbindung zu WMI- Klassen her mit computer kann ein Remotesystem angegeben werden mit credential kann ein Benutzerkonto angegeben werden mit query kann eine WQL-Abfrage abgesetzt werden
WMI-Beispiele > Get-WMIObject win32_service > gwmi -namespace root\cimv2 computer PC3 -list > Gwmi query select * from win32_service where name = 'Alerter' > $server = gwmi win32_operatingsystem > $server.reboot()
Powershell und.net Viele Standard-Assembly stehen in Powershell zur Verfügung Nachladen einer.net_assembly: [System.Reflection.Assembly+::LoadWithParti alname( System.Windows.Forms ) Direkter Zugriff auf Methoden: [Klasse]::Methode() Anlegen eines Objekts mit new-object
Beispiele $web = New-Object net.webclient $Seite = $web.downloadstring( http://blogs.technet.com/chitpro-de ) [System.IO.Path]::GetTempFileName()
Ausführungssicherheit Scripte starten nur mit Pfad bzw..\ Execution-Policy legt fest, ob ps-scripte gestartet werden Set-ExecutionPolicy / Get-ExecutionPolicy Policy Restricted AllSigned RemoteSigned Unrestricted Verhalten Es werden keine Scripte ausgeführt Scripte müssen digital signiert sein Lokal gespeicherte Scripte auch ohne Signatur Keine Einschränkungen
Powershell-Scripte Funktionieren ähnlich wie Funktionen Parameter werden im Kopf mit param() angegeben Scriptvariablen gelten nur lokal Beim Start von PSH können Profilscripte angegeben werden
Neues in Powershell 2.0
Integrated Scripting Environment GUI-Editor für die Powershell Integrierter Debugger Scripteditor und interaktive Umgebung
Remoting Benötigt WinRM-Dienst Commandlets mit Computername-Parameter Interaktive Sitzung mit Enter-Pssession Invoke-command computername scriptblock Persistent Connections ermöglichen, mehr als eine Kommando auszuführen Rechte werden per wsman-provider gesetzt
Beispiele Remoting > Enable-PSRemoting force > $s = new-pssession computername Server01, Server02 > Invoke-command session scriptblock {$p = get-process} > invoke-command -computername S1, S2 -filepath C:\Test\Sample.ps1
Background-Jobs Laufen im Hintergrund ab die Powershell kann weitere Befehle annehmen Get-Job ruft Informationen über den laufenden Job auf Start-Job, Get-Job, Receive-Job, wait-job > $job = start-job scriptblock {get-process} > $job = Get-Job -id 1 > Receive-Job job $job
Transaktionen Mehrere Kommandos können zu Transaktionen zusammengefasst werden Provider muß Transaktionen unterstützen Es kann immer nur eine Transaktion aktiv sein Ein Commandlet muß mit UseTransaction gestartet werden Start-Transaction, Complete-Transaction, Undo-Transaction
Beispiel Transaktionen > Start-Transaction > Cd hkcu:\software > New-item MyCompany UseTransaction > Complete-Transaction > Start-Transaction > new-item MyOtherCompany UseTransaction > Undo-Transaction
Script-Debugger Debuggen in der PSH mit neuen Debugger- Commandlets Debugger in der ISE integriert Set-PsBreakpoint, Get-PsBreakpoint, Disable- PsBreakpoint, Enable-PsBreakpoint, Remove- PsBreakpoint, Get-PsCallStack Try { } Catch{ } Finally { }
Debugger-Kommandos Debugger-Kommando s v o c l l <m> <n> q k Step-into Step-over Step-out Continue List (Teil des Scripts, der ausgeführt wird) List (ab Zeile m n Zeilen) stop?, h Hilfe Zeigt den Aufrufer-Stack an (Get- PsCallStack)
Internationalisierung Nutzt das neue Feature Data Language Strings können vom Scriptcode getrennt werden Mit Import-LocalizedData werden die übersetzten Dateien aus dem Sprachordner gesucht (en-us, de-de)
Advanced Functions Unterstützen benannte Parameter (-param) bzw. Parametersets Typkontrolle bei Parameterübergabe Überprüfung der Parameteranzahl Unterstützen Pipelining
Module Laufen in eigener Laufzeitumgebung Modul-lokale Variablen sind private und behalten Ihren Zustand über mehrere Aufrufe Script-Module, Binär-Module (dll), Manifest-Module, Dynamische Module user\documents\windowspowershell\modules\mym odule (=$PSModulePath) windows\system32\windowspowershell\v1.0\modul es\mymodule (=$PSModulePath)
Modul-Commandlets New-Module: neues dyn. Modul New-ModuleManifest: neues Manifest-Mod Import-Module: Fügt der Sitzung Mod hinzu Export-ModuleMember: Gibt die Modul-Mitglieder an, die von New-Module angelegt werden Remove-Module: Entfertn Module aus der Sitzung Test-ModuleManifest: Überprüft ein Manifest
Modul-Beispiel function fooize { if(!(test-path variable:script:count)) { $script:count = 0 } $script:count++ "He spoke 'foo' and then there were {0}!" -f $script:count } function barize { if(!(test-path variable:script:count)) { $script:count = 0 } $script:count-- "She spoke 'bar' and then there were {0}!" -f $script:count } function foobar($value) { $script:count = $value } Export-ModuleMember fooize, barize
Neue WMI-Funktionalitäten Neuer Parameter authentication Set-WMIInstance vereinfacht das Ändern von WMI-Eigenschaften Remove-WMIObject vereinfacht das Löschen von WMI-Elementen wie Prozessen und Druckwarteschlangen Invoke-WMIObjcect vereinfacht den Methodenaufruf
WMI-Beispiele Get-WMIObject -class iiscomputer -namespace "root\microsoftiisv2" -computer Web1 authentication 6 $a = Get-WMIObject Win32_WMISetting computername Web1 $a.logginglevel = 2 $a.put() Set-WMIInstance -class Win32_WMISetting ` -argument @{LoggingLevel=2} -computername atl-fs-001 Invoke-WMIMethod -path "Win32_Printer.DeviceID='TestPrinter'" -name RenamePrinter -argumentlist "NewPrinterName" -computer atl-fs-001 $a = Get-WMIObject -query "Select * From Win32_Process Where Name='notepad.exe'" $a Remove-WMIObject
Out-Gridview Gibt die Ausgabe in Tabellenform in eigenem Fenster aus Ausgabe ist sortier- und durchsuchbar
AD-Integration in Powershell Voraussetzung: mind. 1 W2008R2-Server Keine externen Commandlets mehr nötig Muß installiert werden
Beispiele > import-module servermanager > Add-WindowsFeature -Name "RSAT-AD-PowerShell" - IncludeAllSubFeature > import-module activedirectory > CD AD: > New-ADUser Name "John Smith" SamAccountName JohnS DisplayName "John Smith" Title "Account Manager" Enabled $true ChangePasswordAtLogon $true - AccountPassword (ConvertTo-SecureString "p@ssw0rd" - AsPlainText -force) -PassThru
Links Neues in Windows Powershell http://technet.microsoft.com/de-de/library/dd367858%28ws.10%29.aspx Windows Powershell Blog http://blogs.msdn.com/powershell/ What s new in Powershell 2.0 http://huddledmasses.org/whats-new-in-powershell-2/ MS Technet Windows Powershell Core Help http://technet.microsoft.com/en-us/library/bb978525.aspx Powershell Plus http://www.idera.com/products/powershell/powershell-plus/ Master Powershell ebook von Tobi Weltner http://powershell.com/cs/blogs/ebook/ Active Directory Powershell Blog http://blogs.msdn.com/adpowershell/default.aspx
Buchempfehlungen