Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich.

Post on 05-Apr-2015

134 views 3 download

transcript

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 hdampf@contoso.com -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 rfeest@contoso.comInvoke-Command –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