Automatisierung mit Windows PowerShell V1 / V2
Ralf FeestDirector Enterprise ServicesAddOn (Schweiz) AG, Zürich
Meine Ziele für diesen Vortrag
PowerShell-Anfängerabholen & begeistern
PowerShell-Nutzern Tipps & Tricks sowie einen Ausblick auf die V 2.0 zeigen
Den richtigen Mix aus Theorie & LiveDemo präsentieren
Einführung in PowerShell
Erweiterung der bekannten cmd.exeunterstützt/integriert das .NET Objektmodell
Schnittstellen zu.NET Framework
Voraussetzungen der V 1.0
.NET Framework 2.0Unterstützte Betriebssysteme
Einstieg mit Webcasts, Doku etc. unter www.addon-ag.ch?ad1033
Windows XP Service Pack 2• Installation via Servermanager als „Feature“• Keine Unterstützung innerhalb von ServerCore vor Erscheinen von R2!
Windows Server 2003 Service Pack 1
Windows Vista
Windows Server 2008
Aufbau eines cmdlet
cmdlet (sprich: „commandlet“) = Befehl, der nur innerhalb einer PS ausgeführt werden kannBeispiel:get-Process | select-Object Name,StartTimeVerb
Subjekt
Pipe-Symbol zum objektorientierten
(!) Verkettenzweier cmdlets
AttributeAuswahl
Wo bekomme ich Hilfe?
Übersicht der cmdlets: get-commandListe der Kurzkommandos (Alias): get-alias
z. B. ps steht für Get-Processoder dir steht für Get-Childitem
Syntax eines Befehls abrufen:get-help get-processget-help get-process -detailedget-help get-process -full
Erste Schrittemit der PowerShell
demo
PowerShell Beispiele (1)
Welche Datei-Endungen kommen wie häufig in einer Verzeichnisstruktur vor?Get-ChildItem -recurse | group-object extension |sort -property Count -descending
PowerShell Beispiele (2)
Zugriff auf die RegistryWert aus der Registry abfragenget-itemproperty-path "HKCU:\Software\AddOn\Snake“-name Highscore
Wert in der Registry neu setzenset-itemproperty-path "HKCU:\Software\AddOn\Snake“-name Highscore –value 1740
PSdrives
demo
Neue AD-Schnittstelle ab W2008 R2
Erweiterung für die PowerShellImport-Module ActiveDirectory
Voraussetzungenmind. ein Windows 2008 R2 DC .NET Framework 3.5.1Client: W2008 R2 oder Windows 7
Ein PSdrive für das AD
Mit cd durch's AD browsen…
>70 neue AD-cmdletsAdd-ADComputerServiceAccountAdd-ADDomainControllerPasswordReplicationPolicyAdd-ADFineGrainedPasswordPolicySubjectAdd-ADGroupMemberAdd-ADPrincipalGroupMembershipClear-ADAccountExpirationDisable-ADAccountDisable-ADOptionalFeatureEnable-ADAccountEnable-ADOptionalFeatureGet-ADAccountAuthorizationGroupGet-ADAccountResultantPasswordReplicationPolicyGet-ADComputerGet-ADComputerServiceAccountGet-ADDefaultDomainPasswordPolicyGet-ADDomainGet-ADDomainControllerGet-ADDomainControllerPasswordReplicationPolicyGet-ADDomainControllerPasswordReplicationPolicyUsageGet-ADFineGrainedPasswordPolicyGet-ADFineGrainedPasswordPolicySubjectGet-ADForestGet-ADGroupGet-ADGroupMemberGet-ADObjectGet-ADOptionalFeatureGet-ADOrganizationalUnitGet-ADPrincipalGroupMembershipGet-ADRootDSEGet-ADServiceAccountGet-ADUser
Get-ADUserResultantPasswordPolicyInstall-ADServiceAccountMove-ADDirectoryServerMove-ADDirectoryServerOperationMasterRoleMove-ADObjectNew-ADComputerNew-ADFineGrainedPasswordPolicyNew-ADGroupNew-ADObjectNew-ADOrganizationalUnitNew-ADServiceAccountNew-ADUserRemove-ADComputerRemove-ADComputerServiceAccountRemove-ADDomainControllerPasswordReplicationPolicyRemove-ADFineGrainedPasswordPolicyRemove-ADFineGrainedPasswordPolicySubjectRemove-ADGroupRemove-ADGroupMemberRemove-ADObjectRemove-ADOrganizationalUnitRemove-ADPrincipalGroupMembershipRemove-ADServiceAccountRemove-ADUserRename-ADObjectReset-ADServiceAccountPasswordRestore-ADObjectSearch-ADAccountSet-ADAccountControlSet-ADAccountExpirationSet-ADAccountPassword
Set-ADComputerSet-ADDefaultDomainPasswordPolicySet-ADDomainSet-ADDomainModeSet-ADFineGrainedPasswordPolicySet-ADForestSet-ADForestModeSet-ADGroupSet-ADObjectSet-ADOrganizationalUnitSet-ADServiceAccountSet-ADUserUninstall-ADServiceAccountUnlock-ADAccount
Eigene PSdrive Provider
Kennen Sie noch den subst-Befehl?New-PSDrive -name X –psprovider FileSystem -root c:\scripts New-PSDrive -name Y -psprovider Registry-root HKCU:\Software\Microsoft\Windows\CurrentVersion
SQL Server 2008 mit eigenem PSdrivecd SQLSERVER:\SQL\localhost\DEFAULT\Databases\Sales\TablesGet-ChildItem | where {$_.Schema -eq "Sales"}
3rd Party Provider downloadbarMSDN-Artikel"Creating a Windows PowerShell Drive Provider"
Zugriff auf Ereignisprotokoll
Welche Ereignislogs gibt es?get-eventlog –list
Ereignisliste einesbestimmten Log abfragen:get-eventlog –LogName Application
Die fünf jüngsten Einträge abrufen:get-eventlog –LogName Application –newest 5
Alle Attribute eines einzelnen Eintrags abrufen:get-eventlog -LogName Application |where-object {$_.index -eq 17015} | select-object *
Formatierung der Ausgabe
Ausgabe als Liste format-list (Objekte einzeln untereinander)Ausgabe in Tabelle format-table
Ausgabe in eine DateiCSVGet-ChildItem Brief.pdf | export-csv -path test.csv
XMLGet-ChildItem Brief.pdf | export-Clixml -path test.xml
Befehle mitschneiden
Protokollierungstart-transcript –path <Datei>stop-transcript
Ausgabe einer Datei auf dem Bildschirm
type log.txtget-content log.txt
Druckausgabean den Standarddruckerout-printer –name <Datei>
an einen bestimmten Netzwerkdruckerout-printer -name "\\Server01\Prt-6B Color"
Skripte erstellen und ausführen
Default:Nur signierte PowerShell Skriptedürfen ausgeführt werden!Ausführungsrichtlinie
abfragen: Get-ExecutionPolicy
setzen: Set-ExecutionPolicy -ExecutionPolicy unrestricted(einmal durch Administrator)
Skript aufrufen:
Die Datei "C:\Users\rfeest\Desktop\ralf.ps1" kann nicht geladen werden, da die Ausführung von Skripts auf diesem System deaktiviert ist.
Variablen (1)
eingebaute Variablenz. B. $PWD, $HOME, $PROFILE etc.Liste abfragbar mit dir variable: | sort nameUmgebungsvariablen mit dir env: | sort name
Eigene VariablenKeine Deklaration notwendig, einfach verwenden$netto= 270$brutto= $netto * 1.075"Der Rechnungsbetrag beträgt $brutto CHF."
Variablen (2)
Alternative: Variable mit New-Variable anlegen:
new-Variable Mehrwertsteuer 0.19 –option ReadOnly
Typ der Variablen abfragen:$Mehrwertsteuer.GetType()$Mehrwertsteuer.GetType().Name
ohne Dollarzeichen! Wertzuweisun
g
Zusatzoptionen
Schleifen
Beispiel: Quadratzahlen 1, 4, 9, 16, … 100#Skript zur Berechnung von Quadratzahlen$Quadrat=1while ($Quadrat -le 10){ write-host ($Quadrat * $Quadrat) $Quadrat +=1}
while(expression){ …}
for([initializer];[condition];[iterator]{…}
do { …} until/while(expression)
foreach-object(identifier in collection){…}
IE fernsteuern
demo1. $ie= new-object -com "InternetExplorer.Application"2. $ie.Visible= $true 3. $ie.navigate("http://www.denver.com")4. $ie |get-member 5. $ie.StatusText 6. $ie.document | get-member 7. $ie.document.title8. $ie.document.documentElement.innerHTML9. $ie.document.documentElement.innertext10. $ie.document.documentElement.innertext.indexOf("IIS")11. $ie.document.documentElement.innertext.substring(110,7)12. $ie.quit()
WMI und Office
Zugriff per WMIget-Wmiobject -class Win32_LogicalDisk | ft Name,VolumeName,Size,FreeSpace
Zugriff auf Office-ApplikationenBeispiel: Anzahl Mails im Posteingang undAuflisten der Absender aller Mails
$Outlook= new-object -comobject Outlook.Application$Posteingang= $Outlook.Session.GetDefaultFolder(6)write-host $Posteingang.Items.Countforeach ($Mail in $Posteingang.Items) {$Mail.SenderName}
ADSI$u= [ADSI]”LDAP://cn=Ralf
Feest,ou=Training,dc=denver,dc=com”
Abfragen der Beschreibung eines Benutzers$u.description
Ändern der Telefonnummer eines Benutzers$u.TelephoneNumber= “+41 17 4897-11“$u.SetInfo()
Auflisten aller Computerkonten der Domäne $ad=[ADSI]"LDAP://dc=denver,dc=com“$ds= new-object System.DirectoryServices.DirectorySearcher$ds.SearchRoot= $ad$ds.Filter="(objectCategory=computer)"$Ergebnisse= $ds.FindAll()foreach ($PC in $Ergebnisse) {write-host $PC.Properties.name}
.Net Framework
Unterstützung für XML
$MA = [xml]"<Mitarbeiter><Person> <Name>Meier</Name> <Tel>(0123)4567</Tel></Person><Person> <Name>Schuster</Name> <Tel>(0987)6543</Tel></Person></Mitarbeiter>"
write-host $MA.Mitarbeiter.Person[1].Namewrite-host $MA.Mitarbeiter.Person[1].Tel
Exchange Administration
Exchange 2007 Administration per PowerShell
nur auf dem Exchange Server direktper RDP-Session remote
Exchange-Remote-Admin z. B. von VISTA aus:
PowerShell V1 installierenExchange 2007 Administrationstools installieren
Exchange 2007
Benutzer mit Postfach anlegen
$maildb= get-mailboxDatabase$pwd= convertto-securestring
-string ".ServerSummit2008" -asplaintext -force
new-mailbox -name "Hans Dampf" -alias hdampf -organizationalUnit "contoso.com/Training" -userPrincipalName [email protected] -samAccountName hdampf -FirstName Hans -LastName Dampf -password $pwd -ResetPasswordOnNextLogon $false -Database $maildb
Remote Administration mit V1
Remote Admin via WMIBeispiel:
$PCs= $("BBN25", "BBS12", "BBS5")Get-WmiObject Win32_OperatingSystem -computer $PCs
SystemDirectory : C:\Windows\system32Organization :BuildNumber : 6001RegisteredUser : RalfSerialNumber : 89587-014-3171252-71989Version : 6.0.6001
SystemDirectory : C:\WINDOWS\system32Organization : AddOnBuildNumber : 3790RegisteredUser : AddOnSerialNumber : 69713-286-0895857-44217Version : 5.2.3790
SystemDirectory : C:\WINDOWS\system32Organization : addonBuildNumber : 3790RegisteredUser : ctecSerialNumber : 69713-640-1693711-45097Version : 5.2.3790
PowerShell V2
Momentan Beta-/CTP-Status*), connect.microsoft.cominstallierbar auf
ca. 60 neue cmdletsBessere Unterstützung für remote Administration
Windows Management Instrumentation (WMI)Windows Remote Management (WinRM)built-in bei Vista SP1 und Windows 2008,Download für Windows 2003 und XP (in CTP noch nicht unterstützt)
Abfrage von mehreren Systemen oder Ausführung mehrere Aufgaben können mit Hilfe von Background Threads parallelisiert werden!grafische Entwicklungsoberfläche *) Community Technology Preview
XP SP3
Win
Server 2003 SP2
Vista SP1
Windows
2008
Windows
2008 R2
Windo
ws 7
V2 included
Remote PowerShell in V2
WS-Management Protocol
Invoke-Command –computername FileSrv02–scriptblock {get-process}
verschlüsselter
Datentransfer
technische Voraussetzungen:• WinRM Dienst muss laufen• Enable-PSremoting muss einmal aufgerufen werden• Noch keine Unterstützung für Windows 2003 und Vista
bisher (könnte aber kommen)
RunSpaces in V2
Mit RunSpaces (jetzt: PSsessions) können PowerShell cmdlets auf remote Computer initiiert werdentemporärer RunSpace:
Persistenter RunSpace:
Invoke-Command –computername DC –scriptblock {ps winlogon}
$dc= New-PSsession –Computername DC –Credential [email protected] –session $dc –scriptblock {ps winlogon}Invoke-Command –session $dc –scriptblock {get-Psdrive}get-PSsessionremove-PSsession –session $dc
PowerShell V2 – Background Prozesse
Start-job -scriptblock {get-process}führt die Kommandos im Hintergrund ausPrompt kommt sofort zurück
Get-Jobzeigt eine Übersicht der Background-Prozesse anGezielte Stausabfrage eines Prozesses möglich
Wait-Job –id <JobID>gibt einen Prompt zurück, wenn Job fertig
Receive-Job –id <JobID>ermittelt die Ergebnisse der Background-Prozesse
Die PowerShell ISE
PowerShell V 2.0
demo
Your MSDN resourcescheck out these websites, blogs & more!
PresentationsTechDays: www.techdays.chMSDN Events: http://www.microsoft.com/switzerland/msdn/de/presentationfinder.mspxMSDN Webcasts: http://www.microsoft.com/switzerland/msdn/de/finder/default.mspx
MSDN EventsMSDN Events: http://www.microsoft.com/switzerland/msdn/de/events/default.mspxSave the date: Tech•Ed 2009 Europe, 9-13 November 2009, Berlin
MSDN Flash (our by weekly newsletter)Subscribe: http://www.microsoft.com/switzerland/msdn/de/flash.mspx
MSDN Team BlogRSS: http://blogs.msdn.com/swiss_dpe_team/Default.aspx
Developer User Groups & CommunitiesMobile Devices: http://www.pocketpc.ch/Microsoft Solutions User Group Switzerland: www.msugs.ch.NET Managed User Group of Switzerland: www.dotmugs.chFoxPro User Group Switzerland: www.fugs.ch
Your TechNet resourcescheck out these websites, blogs & more!
PresentationsTechDays: www.techdays.ch
TechNet EventsTechNet Events: http://technet.microsoft.com/de-ch/bb291010.aspx Save the date: Tech•Ed 2009 Europe, 9-13 November 2009, Berlin
TechNet Flash (our by weekly newsletter)Subscribe: http://technet.microsoft.com/de-ch/bb898852.aspx
Schweizer IT Professional und TechNet BlogRSS: http://blogs.technet.com/chitpro-de/
IT Professional User Groups & CommunitiesSwissITPro User Group: www.swissitpro.ch NT Anwendergruppe Schweiz: www.nt-ag.ch PASS (Professional Association for SQL Server): www.sqlpass.ch
Save the date for tech·days next year!
7. – 8. April 2010Congress Center Basel
Classic Sponsoring Partners
Media Partner
Premium Sponsoring Partners