Automa'sierung der VMware vSphere Administra'on
Dennis Zimmer, CEO, [email protected]
Allgemein, VMware
Copyright © 2013 opvizor GmbH 2 Dennis Zimmer
• 10:00 Uhr Begrüßung
• 10:15 Uhr: vSphere-Administration im Handumdrehen erledigen • PowerCLI als Administrationswerkzeug nutzen • Aufspüren und Beheben von VMware Performance-Limits • Finden und Entfernen von Snapshots • Automatisierung des VMware Tools-Upgrade & VMware Hardware-
Upgrade • Mini-Healthcheck per E-Mail
• 12:15 Mittagspause
• 13:30 Uhr: vSphere-Administration im Handumdrehen erledigen
• Dokumentation der Ressourcennutzung • Dokumentation der Konfigurationen (vCPU-Verteilung, Memory-
Verteilung, RDM-Nutzung) • Multipathing global konfigurieren • Und vieles mehr…
• Ende gegen 17:00 Uhr.
• Vorstellungsrunde – Name? – Job / Aufgabengebiet / Projekte? – Erfahrungen?
• Virtualisierung? • Automa'sierung? • Scrip'ng? • PowerShell?
– Warum dieser Kurs? – Ziele / Wünsche / Befürchtungen für diese Woche? – Themenschwerpunkte?
Copyright © 2013 opvizor GmbH 3 Dennis Zimmer
• Was ist die PowerShell? • Umgang mit der PowerShell? • Was ist ein Objekt? • Variablen, Filter, Schleifen • Basisbefehle • Zer'fikate, Skriptzugriff
1. Teil
4 Copyright © 2013 opvizor GmbH Dennis Zimmer
• VMware PowerCLI? • Connect-‐VIServer • Host Administra'on • VM Administra'on • Netzwerk Administra'on • Storage Administra'on • Repor'ng • Tasks & Events • Invoke-‐VMscript • VMware SDK -‐ Get-‐View • Get-‐PSDrive
2. Teil
5 Copyright © 2013 opvizor GmbH Dennis Zimmer
• Fragen ?
Copyright © 2013 opvizor GmbH 6 Dennis Zimmer
• Was ist die PowerShell? • Umgang mit der PowerShell? • Variablen, Filter, Schleifen • Basisbefehle • Zer'fikate, Skriptzugriff
1. Teil
7 Copyright © 2013 opvizor GmbH Dennis Zimmer
• Was ist die PowerShell? – Kommandozeilen Shell mit Fokus auf Administra'on – interak'v und kombinierbar wie Linux Shell (BASH) – einfach und zielorien'ert = produk'onsorien'ert
• Welche Unterstützung ist vorhanden? – MS Betriebssysteme (XP, Vista, W2K3, W2K8) – WMI, COM … – MS Applika'onen (Exchange 2007, SQL 2008, SCOM, SCVMM, DPM) – offene Integra'onsmöglichkeiten (z. B. VMware, Citrix)
Microsoft PowerShell
8 Copyright © 2013 opvizor GmbH Dennis Zimmer
• Basisfunk'onalität – Dateisystem Naviga'on (Dir, LS, MD) – Registry Naviga'on (cd HKLM: ) – Naviga'on Zer'fikatsspeicher (cd cert: )
• basiert auf: – .Net – viele CmdLets – vorgefer'gte Funk'onen
• Handhabung vergleichbar mit: – Batch/Shell Programmierung – Linux Kommandozeile – .Net Objektorien'erung – enlernt Perl
Microsoft PowerShell
9 Copyright © 2013 opvizor GmbH Dennis Zimmer
• PowerShell Aumau – Hilfesystem (get-‐help) – Namensrichtlinien (“verb-‐noun” Prinzip) – Aliases – CmdLets – Func'ons – Naviga'on, Tab-‐Autocomple'on – Objektorien'erung (kein pures Textparsing) – Pipelining Möglichkeiten
• und weiter? – WMI, COM Implemen'erung – Remote Command in Entwicklung – Vielzahl an freien und kommerziellen CmdLets für Grafiken, Reports, AD
Administra'on …
10
Microsoft PowerShell
Copyright © 2013 opvizor GmbH Dennis Zimmer
• PowerShell – Version1: hqp://support.microsor.com/kb/926139 – V2: hqp://support.microsor.com/kb/968929 – set-‐execu'onpolicy RemoteSigned
• VMware PowerCLI – hqp://www.vmware.com/go/powercli – Community Extension (V2): hqp://www.codeplex.com/vitoolkitextensions
• PowerGUI – hqp://www.powergui.org
11
Microsoft PowerShell - Installation
Copyright © 2013 opvizor GmbH Dennis Zimmer
• PowerShell Anwendergruppe – www.powershell-‐ag.de
• sons'ges – hqp://thepowershellguy.com – hqp://blogs.msdn.com/ – hqp://dmitrysotnikov.wordpress.com/ – hqp://www.powershell.com – www.icomasor.com – www.vmachine.de – hqp://technet.microsor.com/en-‐us/library/hh848797
12
Microsoft PowerShell – gute Hilfeseiten
Copyright © 2013 opvizor GmbH Dennis Zimmer
• hqp://www.microsor.com/technet/scriptcenter/scripts/msh/default.mspx?mfr=true
• hqp://www.codeplex.com/PsObject • hqp://www.myilorum.com/myITWiki/Default.aspx?
Page=WPScripts&AspxAutoDetectCookieSupport=1 • hqp://poshcode.org/ • hqp://pshscripts.blogspot.com/
13
Script Repository
Copyright © 2013 opvizor GmbH Dennis Zimmer
• PowerShell Ebook: hqp://powershell.com/cs/blogs/ebook/ • PowerShell Scrip'ng für Administratoren
– Tobias Weltner, Microsor Press – ISBN 978-‐3-‐86645-‐635-‐8
• Scrip'ng mit Windows PowerShell – Tobias Weltner, Microsor Press – ISBN 978-‐3-‐86645-‐620-‐4
• PowerShell in Prac'ce – Richard Siddaway, Manning – ISBN 978-‐1-‐93518-‐200-‐9
• Windows PowerShell in Ac'on – Bruce Payeqe, Manning – ISBN 193-‐2394-‐90-‐7
• VMware vSphere PowerCLI Reference! – ISBN 978-‐0470890790
14
Microsoft PowerShell - Bücherempfehlung
Copyright © 2013 opvizor GmbH Dennis Zimmer
• powershell.exe – Startmenü – Start-‐> Ausführen (Windows Taste + R) – powershell.exe –command in cmd.exe – Scheduler Task – Unterschiede 32 Bit, 64 Bit!!
• Sicherheit – Unter Vista/Win7 für Konfigura'onsänderungen -‐> Adminberech'gungen – Sicherheitseinstellungen Zer'fikat kann PSSnapins und Skripte verhindern
• Aufnahme von Sessions: – Start-‐transcript -‐path c:\temp\transcript0.txt – Stop-‐transcript
15
Microsoft PowerShell – 1. Start
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Basis – get-‐command – get-‐help – get-‐psdrive – get-‐member (get-‐process | get-‐member)
• Argumente – set-‐alias mygps get-‐process – set-‐alias mygc get-‐command – Wildcards: get-‐process w* – Teilparameter: connect-‐viserver –user administrator – Selbsterkennung: connect-‐viserver 192.168.1.1 staq –server 192.168.1.1
• Kommentar – #
• Zeilen zusammenfassen – ; z. B. : $a=1;$b=3;$c=9
16
Microsoft PowerShell - Einführung
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Kommentar – # – # Dies ist ein Kommentar
• Zeilen zusammenfassen – ; – $a=1;$b=3;$c=9
17
Microsoft PowerShell - Einführung
Copyright © 2013 opvizor GmbH Dennis Zimmer
• PowerShell installieren • Windows Kommandos in der PowerShell testen • Get-‐command testen • Tabulatoren (Autocomple'on) testen • Verhalten der PowerShell ausprobieren
• Abbruch von Befehlen: STRG + C • Löschen der aktuellen Zeile: ESC • Löschen der Kommandozeile: clear • Letzter Befehl: Cursor Pfeil-‐Oben • >> deutet auf einen nicht vollständigen Befehl hin • F7 = History
18
Übung 1
Copyright © 2013 opvizor GmbH Dennis Zimmer
• PowerShell Befehle produzieren Objekte – Objektmanipula'on staq Text möglich – Dynamische Ausgabe von Standard-‐Textansicht der Objekte – Objeklorma'erung zwecks Ausgabe oder Pipelining möglich – get-‐member zur Auswertung des Objekts (mygps | get-‐member)
19
Microsoft PowerShell - Objekte
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Ein Objekt ist etwas (Bezeichner) • Ein Objekt hat etwas (Aqribute) • Ein Objekt kann etwas (Methode)
20
Microsoft PowerShell – Was ist ein Objekt
Copyright © 2013 opvizor GmbH Dennis Zimmer
Beispiel: „Text“ • Ein Objekt ist etwas (Bezeichner)
– Zeichen
• Ein Objekt hat etwas (Aqribute) – Länge
• Ein Objekt kann etwas (Methode) – alles großschreiben
21
Microsoft PowerShell – Was ist ein Objekt (2)
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Ein Objekt ist etwas (Bezeichner) – $var.geqype()
• Ein Objekt hat etwas (Aqribute) – $var | get-‐member -‐MemberType property – Aqribut auslesen: $var.Aqribut
• Ein Objekt kann etwas (Methode) – $var | get-‐member -‐MemberType method – Methodenaufruf: $var.Methode()
22
Microsoft PowerShell – Was ist ein Objekt (8)
Copyright © 2013 opvizor GmbH Dennis Zimmer
Beispiel: „Text“ • Ein Objekt ist etwas (Bezeichner)
– $var.geqype()
• Ein Objekt hat etwas (Aqribute) – $var | get-‐member -‐MemberType property – Aqribut auslesen: $var.length, $var
• Ein Objekt kann etwas (Methode) – $var | get-‐member -‐MemberType method – Methodenaufruf: $var.toupper(), $var.replace(„x“,“s“)
23
Microsoft PowerShell – Was ist ein Objekt (9)
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Übergabe von Objekten an Funk'onen (Pipe) – direkter Bezug: get-‐process calc* | stop-‐process – Objektauswahl: get-‐process | where {$_.Handles –ge 500} | group company | sort – Eigene Funk'onen oder CmdLets – Umwandlung von Objekten:
• “String” = String • “123” = String • 123 = int32 • 123.23 = double • [int64]123 = int64
24
Microsoft PowerShell - Objekte
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Direkte Manipula'on – (get-‐process calc).Workingset/1kb – genutzte phys. RAM Seiten – (get-‐process calc).WaitForExit() – “abc”.ToUpper()
• Objekte – $d = New-‐Object -‐Type System.DateTime 2006,12,25 – $d.get_DayOfWeek() – $d.geqype()
• Klammern – Klammern werden immer zuerst ausgewertet
25
Microsoft PowerShell - Objekte
Copyright © 2013 opvizor GmbH Dennis Zimmer
26
Microsoft PowerShell - Pipelining
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Execu'on Policy auf RemoteSigned umstellen • Calc.exe starten • Skript auf Beendigung warten • Calc.exe beenden • Gestriger Wochentag anzeigen (Datumsobjekt durch get-‐date)
27
Übung 2
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Variablen – $zahl = “123” – [int]$i = 5 – $zeichen = “abc” – $myobject = get-‐process calc – Zahlen: [int], [long], [double], [decimal], [float], [single], [byte] – Zeichen: [string], [char] – $global:i = 5 (außerhalb des Skript); $script:i = 5; $local:i = 5 (Bereich und Funk'onen
im Bereich); $private:I = 5 (nur Funk'on)
• Konstanten – Set-‐Variable –name b –value 3.142 –op'on constant
• Variablentausch – $var1, $var2 = $var2, $var1
28
Microsoft PowerShell Variablen und Konstanten
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Arrays – $a = , 1 # Array 1 Element – $a = 1,2,3 # Array 3 Elemente – $a += , 4 # Array um ein Element erweitern
– $a[0] # 1. Element des Arrays anzeigen – $a[2] # 3. Element des Arrays anzeigen – $a[$i] # Element an Stelle $i anzeigen – $a[-‐1] # letztes Element – $a[0,-‐2] # erstes und vorletztes Element – $a[2] = $null # Arrayelement löschen – $t = $a[0,1 + 3..($a.length -‐ 1)] # Arraykopie bis auf Element 2
– $result = @( … ) # $result ist immer ein Array
29
Microsoft PowerShell - Arrays
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Hashtable anlegen – $liste = @{Land = “Deutschland”; Hauptstadt = “Berlin”} – $Werte = @{Wert = 99; Wert2 = 1,2,3,4}
• Hashtable auslesen – $liste[„Land“] – $liste[„Land“, „Hauptstadt“]
• Hashtable erweitern – $liste.Feld2 = „weiteres Feld“ – $liste.Feld3 = „Feld3“
• Hashtable leeren oder ini'alisieren – $hash = @{} – $liste.remove(„Feld3“) -‐> Hasheintrag löschen
• Hashtable ändern – $liste.Feld2 = „Feld2“
30
Microsoft PowerShell - Hashtables
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Hashtable messen - $Werte | Measure-‐Object - $Werte.GetEnumerator() | Measure-‐Object
• Rechnen – $i = $i +1 – $i += 1 – $i++ – “abc” + “def” – +, -‐, *, / – 5%4.5 = 0,5
• Einheiten – $i = 4gb /640mb – 1mb – 12 + 0xBF – “{0:x}” –f 15 – $a = $Null
31
Microsoft PowerShell - Rechenoperatoren
• Boolean – $bool = 5 –ge 4 – $i = $true – $i = $false
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Vergleichen – $i –eq 123 – $i –ne 5 – $i –le 5 – $i –lt 5 – $i –ge 5 – $i –gt 5 – „abc“ –like „a*“ – „abc“ –Notlike „a*“ – "book" -‐match "[iou]" – -‐notmatch – "Get-‐Process" -‐replace "Get", "Stop"
32
Microsoft PowerShell – Vergleichsoperatoren
• Vergleichen – -‐contains (array) – -‐notcontains – -‐or – -‐and – -‐not
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Carriage Return – `r
• Tabulator – `t
• Line Feed – `n – $a = “Ein Zweizeiliger`nText”
• Seitenvorschub – `f
• Alarm – `a
33
Microsoft PowerShell – Text Erstellen
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Zeichen ($a)-‐, Zahl($i)-‐ und Boolean ($b) Variable mit Werten anlegen – $a = “Test” – $i = 123 – $b = $true
• Array anlegen $arr – Werte 1, 2, 3, 4 – Array kompleq ausgeben – 1. Array Element ausgeben – 2. Array Element ausgeben
• mit $i rechnen – Addi'on – Mul'plika'on
34
Übung 3
Copyright © 2013 opvizor GmbH Dennis Zimmer
35
Microsoft PowerShell – Wild Cards
Wild Card Beschreibung
* Beliebiges Zeichen, keine Limi'erung
? Beliebiges Zeichen, ein Vorkommen
[a-‐c] Zeichen a-‐c, ein Vorkommen
[ajz] Zeichen a,j,z dürfen einmal vorkommen
Get-Help about_Wildcard
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Mehrere Zeilen – $text = @” – Dieser Text kann – mehrzeilig und beliebig – lang sein – “@
• Umgang mit Sonderzeichen – “Text mit “”Anführungszeichen””!” – “Text mit `”Anführungszeichen`”!” – ‘Text mit “Anführungszeichen”!’ – “Gib Variable `$a aus: $a”
• Variablen im Text – “Variable a hat den Inhalt: $a” – “Berechnung von 5 + 7 = $(5+7)” – “Das heu'ge Datum: “ + (get-‐date)
36
Microsoft PowerShell – Text Erstellen
Copyright © 2013 opvizor GmbH Dennis Zimmer
37
Microsoft PowerShell – Ausgabe formatieren
Copyright © 2009 icomasoft ag Dennis Zimmer
Operator Beschreibung
{0} Element der Ausgabe, z. B. „{0:d} {1:x}
{0:x} Hexadezimaldarstellung
{0:X} Hexadezimaldarstellung – Großschreibung
{0:dn} Linksbündige Zahl mit n Nullen führend
{0:p} Prozentzahl
{0:c} Währung
{0,n} n Leerzeichen, linksbündig
{0,-‐n} n Leerzeichen, rechtsbündig
{0:hh} , {0:mm} Stunden bzw. Minuten eines Datum
{0:C} Währung des aktuellen Systems anzeigen
Syntax: (<index>[,<alignment>][:<formatString>]) Aufruf: "{0:d8}" -f 3 oder "{0:hh}:{0:mm}" -f (Get-Date) Mehrfachelemente: "{0,0:10C} {1,0:1C}" -f (5/100),(6/100) Weitere Infos: http://msdn.microsoft.com/en-us/library/26etazsy(VS.71).aspx
• If if (condi'on) {…} elseif (condi'on) {…} else {…} – if (($i –ge 5) –and ($i –le 7)) {…}
• Switch switch (expression) { Value1 {…} Value2 {…} default {…} }
38
Microsoft PowerShell - Bedingungen
Copyright © 2013 opvizor GmbH Dennis Zimmer
$a = 5 switch ($a) { 1 {"The color is red."} 2 {"The color is blue."} 3 {"The color is green."} 4 {"The color is yellow."}
default {“white on white"} }
• Schleife solange Bedingung erfüllt ist – $a=1 – Do {$a; $a++} – While ($a –lt 10)
• Schleife bis Bedingung erfüllt ist – $a=1 – Do {$a; $a++} – Un'l ($a –gt 10)
39
Microsoft PowerShell - Schleifen
Copyright © 2013 opvizor GmbH Dennis Zimmer
• While while (expression) {…} while ($i –le 5) {…}
• for for([ini'alizer]; [condi'on]; [iterator]) { …} for($i = 1; $i –le 10; $i++) { …}
40
Microsoft PowerShell - Schleifen
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Foreach (alias foreach-‐object) foreach(iden'fier in Collec'on) {…} Foreach ($i in Get-‐Childitem c:\windows) {$i.name; $i.crea'on'me} foreach($vm in get-‐vm) {stop-‐vm $vm} foreach($host in $mul') {$host.name}
• Abkürzung
– % – (Get-‐Childitem c:\windows) | %{$_.name; $_.creaFonFme}
41
Microsoft PowerShell – Array Schleifen
Copyright © 2013 opvizor GmbH Dennis Zimmer
• If Bedingung – Wenn $a = “Test” gib wahr aus, ansonsten falsch – Bedingung
• If Ausgabe = kleiner/gleich 10 • Elseif Ausgabe = kleiner/gleich 20 • Else größer/gleich 20
• Get-‐Process Array kompleq durchlaufen – Array erstellen mit Get-‐Process – Ausgabe generell – Ausgabe der Process IDs mit Titel
42
Übung 4
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Where (alias Where-‐Object) – Get-‐Process | Where-‐Object{$_.Handles -‐gt 500} – Get-‐Service | Where{$_.Name -‐like "WM*" -‐and $_.Status -‐eq "Stopped"}
• Abkürzung
– ? – Get-‐process|?{$_.Handles-‐gt500}|%{$_.Name}
43
Microsoft PowerShell – Filter
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Select (alias Select-‐Object) – Get-‐Process | select processname, company, id
• Process Run'me
– $now = Get-‐Date – Get-‐Process | Where-‐Object{$_.StartTime} | Select Name, @{Name="Run Time";
Expression={[int]($now -‐ $_.StartTime).TotalMinutes}} | Sort "Run Time" -‐Descending | Format-‐Table –AutoSize
• Select-‐String (ähnlich Linux grep) – Get-‐Process | select processname, id, company | Select-‐String Microso\
44
Microsoft PowerShell – Filter
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Sort (alias Sort-‐Object) – Get-‐Process | sort processname
• Group (alias Group-‐Object) – Get-‐Process | group company
• Measure (alias Measure-‐Object) – Get-‐process | measure
• Measure-‐command – Measure-‐command –expression {get-‐service}]
• FT (alias Format-‐Table) – Get-‐service| r * – Get-‐process | r *
• FL (alias Format-‐List) – Get-‐service| fl
45
Microsoft PowerShell – Sort, Group, Measure, …
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Func'on func'on name ([string]$parameter1, [int]$parameter2, …) { … } func'on listvm([string]$vm) { $vms = Get-‐VM $vm return $vms } $vms = listvm("testbackup")
46
Microsoft PowerShell – Funktionen
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Get-‐process Filter – Select Handles, Paged Memory, Process Name, CPU Nutzung, Hersteller – Zurückschreiben in Array – Nur Objekte anzeigen mit Handles größer 500
• Sort – Filter Array nach Process Name sor'eren
• Group – Filter Array nach Hersteller gruppieren
• Measure – Elemente der Array Ausgabe auswerten
47
Übung 5
Copyright © 2013 opvizor GmbH Dennis Zimmer
• CmdLet Aumau – cmdlet –parameter1 –parameter# arg1 arg2 – get-‐eventlog –logname applica'on
• CmdLet Hilfe – get-‐command get-‐eventlog – get-‐help get-‐eventlog – get-‐help get-‐eventlog -‐full – get-‐help get-‐eventlog –examples – get-‐help about_* – get-‐help about_core_commands – Get-‐process | get-‐member – Get-‐command –module vmware.vimautoma'on.core –type CmdLet
48
Microsoft PowerShell – CmdLets
Copyright © 2013 opvizor GmbH Dennis Zimmer
• CmdLet Pipe – get-‐service | select-‐object -‐property name, status | sort-‐object -‐property name |
export-‐csv -‐path „c:\services.csv“
• mögliche Ausgaben auflisten – get-‐vm | get-‐member
• Ausgaben auswählen – get-‐service | where-‐object { $_.status -‐eq „stopped“ }
49
Microsoft PowerShell – CmdLets
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Browser starten – $ie = New-‐Object -‐ComObject "InternetExplorer.ApplicaCon" – $ie | Get-‐Member –MemberType Method – $ie.Navigate("hqp://www.opvizor.com") – $ie.Visible = $true
• Ordnerauswahl – $ui = New-‐Object –ComObject "Shell.ApplicaFon" – $path = $ui.BrowseForFolder(0, "Biqe Ordner auswählen", 0,0)
50
Microsoft PowerShell – Com Object
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Kurzfassung – powershell.exe „& c:\beispiel.ps1“ – powershell.exe „. c:\beispiel.ps1“ – “.” und “&” beschreiben den Sichtbarkeitsbereich von Variablen
in diesem Fall uninteressant
• Langfassung – powershell.exe -‐command „& c:\beispiel.ps1“ – powershell.exe -‐command „. c:\beispiel.ps1“
51
Microsoft PowerShell – Skripte starten
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Skriptstart aus der Shell – “.” + Skriptname = aktueller Scope (Variablen des aufrufenden Skripts vorhanden) – “&” + Skriptname = neuer Scope (keine Variablennutzung)
• Argumente bei Skriptstart – myscript.ps1 server1 user
• Argumente aus dem $args Array auslesen – $servername = $args[0] – $username = $args[1]
52
Microsoft PowerShell – Skripte starten
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Hilfe der CmdLets anzeigen – Get-‐process – Get-‐service
• PowerShell Skript starten – Skript in Datei schreiben und aufrufen
• Browser starten mit Webseitenaufruf
53
Übung 6
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Read-‐host – $eingabe = read-‐host – $a = Read-‐Host “Enter your name”
• Get-‐creden'al – $cred = get-‐creden'al – $cred = get-‐creden'al domain\administrator
54
Microsoft PowerShell Eingabe
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Datei – $a = Get-‐Content "c:\temp\servers.txt" – foreach ($i in $a) – {$i} – Get-‐content “Datei” –delimiter “:” – Get-‐content “Datei” -‐wait
• CSV / XML – import-‐csv – import-‐clixml
55
Microsoft PowerShell Eingabe
Copyright © 2013 opvizor GmbH Dennis Zimmer
• $variable – $a
• Letzter Error Code – $?
• write-‐host – Write-‐Host $a –foregroundcolor “green”
56
Microsoft PowerShell Ausgabe
Copyright © 2013 opvizor GmbH Dennis Zimmer
• out-‐file – $a = “Zeile 1" – $a | out-‐file datei.txt
• oder Ausgabe in Datei mit > umleiten – .\test.ps1 > datei.txt
• HTML – $a = Get-‐Process – $a | Converqo-‐Html -‐property Name,Path,Company > test.htm
57
Microsoft PowerShell Ausgabe
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Gridview – out-‐gridview (.net Framework 3.5) – Get-‐process | out-‐gridview
• CSV / XML – export-‐csv – Get-‐process | Select-‐Object Name,Path,Company | Export-‐Csv -‐path test.csv – export-‐clixml
58
Microsoft PowerShell Ausgabe
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Dir env: • $env
– $env:windir – ${env:temp} – ${env:path} – $env:appdata – $env:username – [io.path]::GetFullPath($env:temp)
• $home • Dir Variable: • $host
– $host.version – $host.ui.rawui.Foregroundcolor = “yellow” – $host.ui.rawui.window'tle = “meine PowerShell Konsole”
59
Microsoft PowerShell Basisvariablen
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Read-‐Host und Get-‐Creden'als testen – Summe von 2 Eingaben – Creden'als in Variable schreiben
• Ausgabe der Werte testen – Export-‐CSV – Out-‐file
• Umgebungsvariablen ausgeben – Path – AppData
• PowerShell anpassen – Schrirfarbe auf Gelb umstellen
• $host.UI.RawUI.ForegroundColor="yellow“
• PowerShell Skript starten – Skript miqels Windows Scheduler aufrufen und Ergebnis in Datei schreiben – powershell -‐command "& 'MyScript.ps1' "
60
Übung 7
Copyright © 2013 opvizor GmbH Dennis Zimmer
• .split – $array = (“abc-‐def-‐xyz”).split(“-‐”) – Aurrennen eines Strings (Delimiter) in ein Array
• .replace – (“abc-‐def-‐xyz”).replace(“-‐”, “..”) – Ersetzen von Zeichen
• .trim – (“ abc-‐def-‐xyz ”).trim – Enlernen der Leerzeichen zu Anfang des Strings
61
String Functions
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Quest PowerGUI: hqp://www.powergui.org • Idera PowerShell Plus: hqp://www.idera.com • Sapien Primalscript: hqp://www.sapien.com • AdminScriptEditor: hqp://www.adminscripteditor.com • Sapien PrimalForms:
hqp://www.primaltools.com/downloads/communitytools
62
PowerShell Editoren
Copyright © 2013 opvizor GmbH Dennis Zimmer
63
Basisbefehle
Copyright © 2013 opvizor GmbH Dennis Zimmer
• ipconfig • arp • nslookup • netstat • Tracert • Cmd /c help • … sämtliche Windows Befehle
64
Microsoft PowerShell Basic – Windows Befehle
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Get-‐Command –Commandtype CmdLet get*
• Get-‐alias • Get-‐childitem • Get-‐date • Get-‐Eventlog • Get-‐History • Get-‐loca'on • Get-‐Pssnapin • Get-‐psdrive • Get-‐service
– Get-‐service [a-‐f]* – Get-‐service w*
65
Microsoft PowerShell Basic – CmdLets 1
Copyright © 2013 opvizor GmbH Dennis Zimmer
$a = New-Object System.Globalization.CultureInfo("de-DE") $b = Get-Date $b.ToString("d", $a)
• Skript erstellen: – Auslesen der Server aus Textdatei – Erstellung Liste Hostname, IP Adresse, Macadresse – Befehle ipconfig, ping, arp
• Basic Cmdlets testen und Verwendung beschreiben – Test mit Variablenbelegung – Debugging von Schleifen
66
Übung 9
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Get-‐Command –Commandtype CmdLet set*
• Set-‐Acl • Set-‐Alias • Set-‐Date • Set-‐Execu'onPolicy • Set-‐Item • Set-‐Loca'on • Set-‐Service • Set-‐Variable
67
Microsoft PowerShell Basic - CmdLets
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Set-‐CmdLets (get-‐help Cmdlet –examples) – Set-‐Alias – Set-‐Date – Set-‐Execu'onPolicy – Set-‐Item – Set-‐Loca'on – Set-‐Service – Set-‐Variable
68
Übung 10
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Get-‐Command –Commandtype CmdLet invoke*
• Invoke-‐Command (Befehl –> lokal oder Remote) • Invoke-‐Expression (String als Befehl ausführen) • Invoke-‐History (Befehl Session History)
69
Microsoft PowerShell Basic - CmdLets
Copyright © 2013 opvizor GmbH Dennis Zimmer
• VMware PowerCLI? • Connect-‐VIServer • Host Administra'on • VM Administra'on • Netzwerk Administra'on • Storage Administra'on • Repor'ng • Tasks & Events • Invoke-‐VMscript • VMware SDK -‐ Get-‐View • Get-‐PSDrive • VI PowerScripter
2. Teil
70 Copyright © 2013 opvizor GmbH Dennis Zimmer
• Setup Rou'ne – hqp://www.vmware.com/go/powercli
• Installa'on – Set-‐Execu'onPolicy RemoteSigned
• Start in der PowerShell – Add-‐pssnapin vmware.vimautoma'on.core
71
VMware PowerCLI
Copyright © 2013 opvizor GmbH Dennis Zimmer
• PowerCLI Community – www.vmware.com/go/powercli
• sons'ges – www.lucd.info – www.virtu-‐al.net – www.vmachine.de/PowerCLI – www.icomasor.com
72
VMware PowerCLI – gute Hilfeseiten
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Über 200 CmdLets – C:\Program Files\VMware\Infrastructure\vSphere PowerCLI – vSphere PowerCLI Cmdlets Reference.chm
• Community Extension mit knapp 40 Funk'onen – Community Extension (CTP2): hqp://www.codeplex.com/vitoolkitextensions – import-‐module vitoolkitextension.psm1 – PowerShell v2 wird benoe'gt
73
VMware PowerCLI
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Trennen von CD-‐ROM und Floppy Laufwerken (VMo'on/DRS)
manuell: 1 Minute / VM Zeitverschwendung!
74
VMworld Präsentation Copyright © 2013 opvizor GmbH Dennis Zimmer
• Setup Rou'ne – hqp://www.vmware.com/go/powercli – Set-‐Execu'onPolicy RemoteSigned – Add-‐pssnapin vmware.vimautoma'on.core
• Community Extension installieren und impor'eren
– Community Extension (CTP3): hqp://www.codeplex.com/vitoolkitextensions – import-‐module vitoolkitextension.psm1
75
Übung 1
Copyright © 2013 opvizor GmbH Dennis Zimmer
• connect-‐viserver connect-‐viserver [-‐Server] <String[]> [-‐Port <Int32>] [-‐Protocol <String>] [-‐Creden'al
<PSCreden'al>] [-‐User <String>] [-‐Password <String>] [-‐Session <String>] connect-‐viserver vc.test.test –user admin –pass vmware Verbindung zu mehreren vCenter oder ESX Servern $vccon += connect-‐viserver vc.test.test –user admin –pass vmware $vccon += connect-‐viserver vc2.test.test –user admin –pass vmware
• disconnect-‐viserver disconnect-‐viserver disconnect-‐viserver $vccon[0]
76
VMware PowerCLI - Verbindung
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Anmeldung vCenter – Einfache Anmeldung
• Connect-‐viserver 192.168.1.250 • Connect-‐viserver 192.168.1.250 –user Benutzer –pass Passwort • Connect-‐viserver 192.168.1.250 –creden'al (get-‐creden'al)
– Mul'anmeldung • $vccon += connect-‐viserver vc.test.test –user admin –pass vmware • $vccon += connect-‐viserver vc2.test.test –user admin –pass vmware
– Abmeldung • disconnect-‐viserver –confirm:$false
• Anmeldung ESX Server – Einfache Anmeldung
• Connect-‐viserver 192.168.1.10 • Connect-‐viserver 192.168.1.10 –user Benutzer –pass Passwort • Connect-‐viserver 192.168.1.10 –creden'al (get-‐creden'al)
77
Übung 2
Copyright © 2013 opvizor GmbH Dennis Zimmer
• hqp://www.virtu-‐al.net/vcheck-‐pluginsheaders/vcheck/
78
vCheck
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Get-‐Datacenter • Get-‐VMhost • Get-‐Cluster
• Get-‐VM • Get-‐Folder • Get-‐ResourcePool
• Get-‐Datastore • Get-‐VirtualSwitch • Get-‐VirtualPortgroup
79
VMware PowerCLI – Basis Objekte
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Auslesen aller VMware Cmdlets – Get-‐command –module vmware.vimautoma'on.core – commandtype CmdLet
• Auslesen aller Hosts CmdLets – Get-‐command –module vmware.vimautoma'on.core *host*
• Beispiele in Textdateien schreiben Get-‐command –module vmware.vimautoma'on.core – commandtype CmdLet | % {get-‐help $_ -‐examples | out-‐file “c:\temp\$_.txt”}
80
Übung 3
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Add-‐VMHost • Add-‐VmHostNtpServer • Apply-‐VMHostProfile • Export-‐VMHostProfile • Get-‐VMHost • Get-‐VMHostAccount • Get-‐VMHostAdvancedConfigura'on • Get-‐VMHostAvailableTimeZone • Get-‐VMHostDiagnos'cPar''on • Get-‐VMHostFirewallDefaultPolicy • Get-‐VMHostFirewallExcep'on • Get-‐VMHostFirmware • Get-‐VMHostHba • Get-‐VMHostModule • Get-‐VMHostNetwork
81
VMware PowerCLI – Host CmdLets
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Get-‐VMHostNetworkAdapter • Get-‐VMHostNtpServer • Get-‐VMHostProfile • Get-‐VMHostService • Get-‐VMHostSnmp • Get-‐VMHostStartPolicy • Get-‐VMHostStorage • Get-‐VMHostSysLogServer • Import-‐VMHostProfile • Install-‐VMHostPatch • Move-‐VMHost • New-‐VMHostAccount • New-‐VMHostNetworkAdapter • New-‐VMHostProfile
82
VMware PowerCLI – Host CmdLets
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Remove-‐VMHost • Remove-‐VMHostAccount • Remove-‐VMHostNetworkAdapter • Remove-‐VMHostNtpServer • Remove-‐VMHostProfile • Restart-‐VMHost • Restart-‐VMHostService • Set-‐VMHost • Set-‐VMHostAccount • Set-‐VMHostAdvancedConfigura'on • Set-‐VMHostDiagnos'cPar''on • Set-‐VMHostFirewallDefaultPolicy • Set-‐VMHostFirewallExcep'on • Set-‐VMHostFirmware • Set-‐VMHostHba
83
VMware PowerCLI – Host CmdLets
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Set-‐VMHostModule • Set-‐VMHostNetwork • Set-‐VMHostNetworkAdapter • Set-‐VMHostProfile • Set-‐VMHostService • Set-‐VMHostSnmp • Set-‐VMHostStartPolicy • Set-‐VMHostStorage • Set-‐VMHostSysLogServer • Start-‐VMHost • Start-‐VMHostService • Stop-‐VMHost • Stop-‐VMHostService • Suspend-‐VMHost • Test-‐VMHostProfileCompliance • Test-‐VMHostSnmp
84
VMware PowerCLI – Host CmdLets
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Benutzer auslesen – Get-‐VMHostAccount
• Benutzer/Gruppe anlegen – New-‐VMHostAccount -‐ID User1 -‐Password pass –UserAccount –GrantShellAccess – New-‐VMHostAccount -‐Id Group1 -‐GroupAccount -‐AssignUsers User1
• Benutzer/Gruppe anpassen $userAccount = New-‐VMHostAccount -‐ID User1 -‐Password pass –UserAccount $groupAccount = New-‐VMHostAccount -‐ID Group1 -‐GroupAccount -‐AssignUsers User1 Set-‐VMHostAccount -‐UserAccount $userAccount -‐UnassignGroups Group1
• Benutzer löschen – Get-‐VMHostAccount -‐Group -‐ID user | Remove-‐VMHostAccount -‐Confirm
85
VMware PowerCLI – ESX Host Benutzer Übung 4
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Benutzer mit Shell Zugriff – Get-‐View func'on Create-‐ShellUser { param($id, $password=$null, $descrip'on=$null, $posixId=$null) $si = get-‐view serviceinstance $accountManager = get-‐view $si.Content.AccountManager $as = new-‐object VMware.Vim.HostPosixAccountSpec $as.id = $id $as.password = $password $as.descrip'on = $descrip'on $as.shellAccess = $true $as.posixId = $posixId $accountManager.CreateUser($as) }
86
VMware PowerCLI – ESX Host Benutzer Übung 4
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Host Objekte auslesen – Get-‐VMHost
• Host VC hinzufügen – Add-‐VMHost 10.23.113.24 –Loca'on (Get-‐Datacenter Main) -‐User root -‐Password MyPass
• Host aus VC Inventar löschen – Get-‐VMHost ESX1| Remove-‐VMHost
• Host im Inventar verschieben – Move-‐VMHost (Get-‐VMHost ESX1) -‐Des'na'on (Get-‐Datacenter MyDC)
• Status des Hosts anpassen – Set-‐VmHost -‐VmHost (Get-‐VmHost –Name „ESX1") -‐State "Disconnected„ – Set-‐VMHost -‐State maintenance – Set-‐VMHost –State connected
87
VMware PowerCLI – VI Host Beispiele – Übung 5
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Advanced Se�ngs $VMSummaries = @() foreach ($VMHost in Get-‐VMHost) {
$VMSummary = "" | Select HostName, TCPIPHeapMax, TCPIPHeapSize, HeartbeatFrequency, HeartbeatMaxFailures, MaxVolumes $VMSummary.HostName = $VMHost.Name $VMSummary.TCPIPHeapMax = (Get-‐VMHostAdvancedConfigura'on -‐VMHost ($VMhost) -‐Name Net.TcpipHeapMax).Values $VMSummary.TCPIPHeapSize = (Get-‐VMHostAdvancedConfigura'on -‐VMHost ($VMhost) -‐Name Net.TcpipHeapSize).Values $VMSummary.HeartbeatFrequency = (Get-‐VMHostAdvancedConfigura'on -‐VMHost ($VMhost) -‐Name NFS.HeartbeatFrequency).Values $VMSummary.HeartbeatMaxFailures= (Get-‐VMHostAdvancedConfigura'on -‐VMHost ($VMhost) -‐Name NFS.HeartbeatMaxFailures).Values $VMSummary.MaxVolumes = (Get-‐VMHostAdvancedConfigura'on -‐VMHost ($VMhost) -‐Name NFS.MaxVolumes).Values $VMSummaries += $VMSummary
} $VMSummaries | Format-‐Table
88
VMware PowerCLI – VI Host Beispiele
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Get-‐CDDrive • Get-‐FloppyDrive • New-‐CDDrive • New-‐FloppyDrive • Remove-‐CDDrive • Remove-‐FloppyDrive • Set-‐CDDrive • Set-‐FloppyDrive • Copy-‐HardDisk • Get-‐HardDisk • New-‐HardDisk • Remove-‐HardDisk • Set-‐HardDisk
89
VMware PowerCLI – VM Medien CmdLets
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Get-‐VMGuestRoute • Remove-‐VMGuestRoute • Set-‐VMGuestRoute • Get-‐NetworkAdapter • Get-‐VMGuestNetworkInterface • New-‐NetworkAdapter • Remove-‐NetworkAdapter • Set-‐NetworkAdapter • Set-‐VMGuestNetworkInterface
90
VMware PowerCLI – VM Netzwerk CmdLets
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Copy-‐VMGuestFile • Get-‐VM • Get-‐VMGuest • Get-‐VMQues'on • Get-‐VMResourceConfigura'on • Get-‐VMStartPolicy • Remove-‐VM • Restart-‐VM • Restart-‐VMGuest • Restart-‐VM • Restart-‐VMGuest • Set-‐VM • Set-‐VMQues'on
91
VMware PowerCLI – VM CmdLets
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Set-‐VMResourceConfigura'on • Set-‐VMStartPolicy • Shutdown-‐VMGuest • Start-‐VM • Stop-‐VM • Suspend-‐VM • Suspend-‐VMGuest • Dismount-‐Tools • Mount-‐Tools • Update-‐Tools
92
VMware PowerCLI – VM CmdLets
Copyright © 2013 opvizor GmbH Dennis Zimmer
• hqp://www.warmetal.nl/powerclivmupgrade
93
VMware PowerCLI – Upgrade VMware Tools & HW
Copyright © 2013 opvizor GmbH Dennis Zimmer
• VM auslesen – Get-‐VM
• Neue VM – New-‐VM -‐Name XPVM -‐VMHost (Get-‐VMHost ESX1) -‐DiskMB 4000 -‐MemoryMB 256
• VM löschen – Remove-‐VM ( Get-‐VM “myVM” ) –DeleteFromDisk
• VM verschieben (Cold, Hot, Storage): – Get-‐VM -‐Name XP_VC_Tech | Move-‐VM -‐DesVnaVon (Get-‐VMHost ESX1) – Get-‐VM –datastore DS1 | move-‐vm –datastore DS2
• VM Konfigura'on anpassen: – Set-‐VM -‐VM (Get-‐VM -‐Name "Win XP SP1“) -‐Name "Win XP SP2" –GuestId "winXPProGuest" -‐DescripVon „VM
konfiguriert“
• VM starten – Get-‐VM „Test“ | Start-‐VM
94
VMware PowerCLI – VM Beispiele – Übung 6
Copyright © 2013 opvizor GmbH Dennis Zimmer
• VM Ressource Management – Get-‐VM | Get-‐VMResourceConfiguraFon | Where-‐Object {$_.MemLimitMB -‐ne ‘-‐1‘} | Set-‐
VMResourceConfiguraFon -‐MemLimitMB $null – Get-‐VM | Get-‐VMResourceConfiguraFon | Where-‐Object {$_.CpuLimitMhz -‐ne ‘-‐1‘} | Set-‐
VMResourceConfiguraFon -‐CPULimitMhz $null
• Get VM by MAC Address – Get-‐vm | Select Name, @{N=“Network“;E={$_ | Get-‐networkAdapter | ? {$_.macaddress -‐
eq “00:50:56:A1:50:54“}}} |Where {$_.Network-‐ne “”}
• VMs and Disk Sizes – foreach ($vm in (get-‐vm | get-‐view)) {($VM.Guest.Disk | Select @{N="Name";E={$VM.Name}},DiskPath,
@{N="Capacity(MB)";E={[math]::Round($_.Capacity/ 1MB)}}, @{N="Free Space(MB)";E={[math]::Round($_.FreeSpace / 1MB)}}, @{N="Free Space %";E={[math]::Round(((100 * ($_.FreeSpace))/ ($_.Capacity)),0)}}) | Format-‐Table}
95
VMware PowerCLI – VM Beispiele – Übung 7
Copyright © 2013 opvizor GmbH Dennis Zimmer
• VMs with RDMs $report = @()$vms = Get-‐VM | Get-‐View foreach($vm in $vms) { foreach($dev in $vm.Config.Hardware.Device) { if(($dev.geqype()).Name -‐eq "VirtualDisk„){ if($dev.Backing.Compa'bilityMode -‐eq "physicalMode"){
$row = "" | select VMName, HDDeviceName, HDFileName $row.VMName = $vm.Name $row.HDDeviceName =$dev.Backing.DeviceName $row.HDFileName = $dev.Backing.FileName $report += $row }
} } } $report
96
VMware PowerCLI – VM Beispiele
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Get-‐Template • Move-‐Template • New-‐Template • Remove-‐Template • Set-‐Template • Get-‐OSCustomiza'onNicMapping • Get-‐OSCustomiza'onSpec • New-‐OSCustomiza'onNicMapping • New-‐OSCustomiza'onSpec • Remove-‐OSCustomiza'onNicMapping • Remove-‐OSCustomiza'onSpec • Set-‐OSCustomiza'onNicMapping • Set-‐OSCustomiza'onSpec
97
VMware PowerCLI – Template CmdLets
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Templates auslesen – Get-‐Template
• Template aus VM erstellen – Get-‐VM VM1 | New-‐Template –Name „VM-‐Template“ –RunAsync – Loca'on (Get-‐Vmhost 192.168.1.10)
• VMs aus Template erstellen – New-‐VM –Name „VM123“ –Template (Get-‐Template „VM-‐Template“) –Vmhost 192.168.1.10 -‐RunAsync
• 10 VMs aus Template erstellen: – 1..10 | % {New-‐VM –Name „VM$_“ –Template (Get-‐Template „VM-‐Template“) –Vmhost 192.168.1.10 –RunAsync}
• VM zum Template konver'eren: – (Get-‐VM VM123 | Get-‐View).markastemplate()
• VM mit Guest Customiza'on erstellen – New-‐VM –Name „VM123“ –Template (Get-‐Template „VM-‐Template“) -‐OSCustomiza'onSpec (Get-‐
OSCustomiza'onSpec „WinSpec“)–Vmhost 192.168.1.10 -‐RunAsync
98
VMware PowerCLI – Template Beispiele – Übung 8
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Get-‐Snapshot • New-‐Snapshot • Remove-‐Snapshot • Set-‐Snapshot
99
VMware PowerCLI – Snapshot CmdLets
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Snapshots einer VM auslesen – Get-‐VM | Get-‐Snapshot
• Snapshots älter 14 Tage auslesen – Get-‐VM | Get-‐Snapshot | ? {$_.Created –le (Get-‐Date).AddDays(-‐14)}
• Snapshot anlegen – New-‐Snapshot – New-‐Snapshot –VM (Get-‐VM -‐Name „VM1") -‐Name BeforePatch
• To remove a snapshot – Remove-‐Snapshot – Get-‐VM | Get-‐Snapshot | Remove-‐Snapshot –RemoveChildren
• Snapshot ändern – Set-‐Snapshot – Set-‐Snapshot -‐Snapshot $snapshot -‐Name 'BeforePatch' -‐Descrip'on "Before windows update"
100
VMware PowerCLI – Snapshot CmdLets – Übung 9
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Copy-‐DatastoreItem • Get-‐Datastore • New-‐Datastore • Remove-‐Datastore • Set-‐Datastore
101
VMware PowerCLI – Datastore CmdLets
Copyright © 2013 opvizor GmbH Dennis Zimmer
• DataStores auslesen – Get-‐Datastore – $ds = Get-‐datastore „DSName“
• DataStore anlegen – New-‐Datastore – New-‐Datastore -‐Nfs -‐VMHost $host -‐Name DS1 -‐Path $remotePath -‐NfsHost $remoteH ost
• Datastore löschen – Get-‐Datastore „DS1“ | Remove-‐Datastore – Remove-‐Datastore -‐Datastore (Get-‐Datastore -‐Name DS1) -‐VMHost (Get-‐VMHost ESX1) -‐Confirm:$false
• DataStore Konfigura'on – Set-‐Datastore – Get-‐Datastore -‐Name "Storage1" |Set-‐Datastore -‐Name Storage1:Local
• Mul'pathing Policies – Get-‐ScsiLun -‐VmHost ESX345| Get-‐ScsiLunPath
102
VMware PowerCLI – Datastore CmdLets – Übung 10
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Get-‐IScsiHbaTarget • Get-‐ScsiLun • Get-‐ScsiLunPath • New-‐IScsiHbaTarget • Remove-‐IScsiHbaTarget • Set-‐IScsiHbaTarget • Set-‐ScsiLun • Set-‐ScsiLunPath
103
VMware PowerCLI – SCSI & HBA CmdLets
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Get-‐VirtualSwitch • New-‐VirtualSwitch • Remove-‐VirtualSwitch • Set-‐VirtualSwitch • Get-‐VirtualPortGroup • New-‐VirtualPortGroup • Remove-‐VirtualPortGroup • Set-‐VirtualPortGroup
104
VMware PowerCLI – vNetzwerk CmdLets
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Auslesen der virtuellen Switche – Get-‐VirtualSwitch – Get-‐VirtualSwitch -‐VM (Get-‐VM –Name „VM1")
• Erstellung virtueller Switch: – New-‐VirtualSwitch – New-‐VirtualSwitch -‐VMHost (Get-‐VMHost -‐Name ESX1) -‐Name vSwitch02
• Löschen eines virtuellen Switch: – Remove-‐VirtualSwitch – Get-‐VirtualSwitch -‐VMHost (Get-‐VMHost -‐Name ESX1) -‐Name vSwitch01 | Remove-‐VirtualSwitch
• Konfigura'on eines vSwitch ändern: – Set-‐VirtualSwitch – Get-‐VirtualSwitch -‐VMHost (Get-‐VMHost -‐Name ESX1) -‐Name vSwitch01 | Set-‐VirtualSwitch -‐MTU 2500
105
VMware PowerCLI – vSwitch CmdLets – Übung 11
Copyright © 2013 opvizor GmbH Dennis Zimmer
• vSwitch auslesen – $vs = Get-‐VirtualSwitch -‐VMHost (Get-‐VMHost -‐Name ESX1) –Name vSwitch02
• Portgruppe auslesen – Get-‐VirtualPortGroup – $vpg = Get-‐VirtualPortGroup –VirtualSwitch $vs
• Portgruppe erstellen – New-‐VirtualPortGroup – New-‐VirtualPortGroup -‐VirtualSwitch $vs –Name VLAN1
• Portgruppe Löschen – Remove-‐VirtualPortGroup – Remove-‐VirtualPortGroup $vpg
• Portgruppe konfigurieren – Set-‐VirtualPortGroup – Set-‐VirtualPortGroup -‐VirtualPortGroup $vpg -‐VLanId 1
106
VMware PowerCLI – Portgroup CmdLets – Übung 11
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Get-‐Cluster • Move-‐Cluster • New-‐Cluster • Remove-‐Cluster • Set-‐Cluster
107
VMware PowerCLI – Cluster CmdLets
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Auslesen der Cluster: – Get-‐Cluster
• Cluster erstellen: – New-‐Cluster [-‐HARestartPriority <HARestartPriority>] [-‐HAIsola'onResponse <HAIsola'onResponse>] [-‐
VMSwapfilePolicy <VMSwapfilePolicy>] [-‐Name] <String> -‐Loca'on <VIContainer> [-‐HAEnabled] [-‐HAAdmissionControlEnabled] [-‐HAFailoverLevel <Int32>] [-‐DrsEnabled] [-‐DrsMode <DrsMode>] [-‐DrsAutoma'onLevel <DrsAutoma'onLevel>]
– New-‐Cluster -‐Name MyCluster -‐DRSEnabled -‐DRSMode FullyAutomated
• Cluster verschieben – Move-‐Cluster
• Cluster löschen – Remove-‐Cluster
• Cluster konfigurieren – Set-‐Cluster
• DRS – Get-‐DrsRule – New-‐DrsRule – Remove-‐DrsRule – Set-‐DrsRule
108
VMware PowerCLI – Cluster CmdLets – Übung 12
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Letzen 10 VMs, die erstellt, kopiert oder impor'ert wurden: – Get-‐VIEvent -‐maxsamples 10000 |where {$_.Geqype().Name-‐eq "VmCreatedEvent" -‐or
$_.Geqype().Name-‐eq "VmBeingClonedEvent" -‐or $_.Geqype().Name-‐eq"VmBeingDeployedEvent"} |Sort CreatedTime -‐Descending |Select CreatedTime, UserName,FullformaqedMessage -‐First 10
• Letzten 5 VMs die gelöscht wurden: – Get-‐VIEvent -‐maxsamples 10000 | where {$_.Geqype().Name -‐eq "VmRemovedEvent"} |
SortCreatedTime -‐Descending | Select CreatedTime, UserName, FullformaqedMessage -‐First 19
• VMs die in den letzten 14 Tagen erstellt wurden: – Get-‐VIEvent -‐maxsamples 10000 -‐Start (Get-‐Date).AddDays(-‐14) | where{$_.Geqype().Name-‐
eq "VmCreatedEvent" -‐or $_.Geqype().Name-‐eq "VmBeingClonedEvent" -‐or $_.Geqype().Name-‐eq "VmBeingDeployedEvent"} |Sort CreatedTime -‐Descending |SelectCreatedTime, UserName,FullformaqedMessage
• VMs die in den letzten 14 Tagen gelöscht wurden: – Get-‐VIEvent -‐maxsamples 10000 -‐Start (Get-‐Date).AddDays(-‐14) |where{$_.Geqype().Name-‐
eq "VmRemovedEvent"} |Sort CreatedTime -‐Descending |SelectCreatedTime, UserName,FullformaqedMessage
109
VMware PowerCLI – Event CmdLets – Übung 14
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Get-‐Log • Get-‐LogType
• Get-‐VMHostSysLogServer • Set-‐VMHostSysLogServer
110
VMware PowerCLI – Protokoll Dateien CmdLets
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Welche Protokolldateien exis'eren? – Get-‐LogType – Get-‐VMHost ESX01|Get-‐LogType
• Auslesen der VMkernel Protokolldateien – $esx = Get-‐VMHost myhost
$log = Get-‐Log -‐Key “vmkernel” -‐VMhost $esx $log.entries > c:\logs.txt
• Augabe Vmkernel Warning Einträge – (Get-‐Log -‐VMHost (Get-‐VMHost ESX01) vmkernel).Entries | Where {$_ -‐like“*WARNING*“}
• vCenter Protokoll – $log = Get-‐LogType | ? { $_.key -‐match "vpxd" } | % { Get-‐Log -‐Key $_.Key }
$log[0].Entries | select -‐first 10
111
VMware PowerCLI – Protokoll Dateien CmdLets – Übung 15
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Get-‐Folder • Move-‐Folder • New-‐Folder • Remove-‐Folder • Set-‐Folder
• Get-‐ResourcePool • New-‐ResourcePool • Move-‐ResourcePool • Remove-‐ResourcePool • Set-‐ResourcePool
112
VMware PowerCLI – Folder & ResourcePool CmdLets
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Get-‐Stat • Get-‐StatInterval • Get-‐StatType • New-‐StatInterval • Remove-‐StatInterval • Set-‐StatInterval
113
VMware PowerCLI – Statistic CmdLets
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Verfügbare Sta's'ken pro VM: Get-‐VM VM | Get-‐Stat – MaxSamples 1 | r -‐autosize
• Verfügbare Sta's'ken pro VM (Memory und CPU): Get-‐VM VM | Get-‐Stat – MaxSamples 1 –Memory -‐CPU
• Verfügbare VM Sta's'ken mit Beschreibung anzeigen: Get-‐VM VM | Get-‐Stat –Max 1 | Select MetricID, Descrip'on | r –wrap -‐autosize
• ESX CPU Sta's'ken auslesen: Get-‐VMHost | Get-‐Stat -‐Stat cpu.usage.average –MaxSamples 1 | Format-‐List
• VM CPU Sta's'ken ab 5.10.09 auslesen: Get-‐VM VM | Get-‐Stat -‐Stat cpu.usage.average –Start 10/5/09 –MaxSamples 3
114
VMware PowerCLI – Statistiken – Übung 17
Copyright © 2013 opvizor GmbH Dennis Zimmer
• VM CPU Sta's'ken der letzten 2 Tage auslesen: Get-‐VM VM | Get-‐Stat -‐Stat cpu.usage.average –Start (Get-‐Date).AddDays(-‐2)
• VM CPU Sta's'ken der letzten 2 Tage auslesen – Wert alle 2 Stunden: Get-‐VM VM | Get-‐Stat -‐Stat cpu.usage.average –Start (Get-‐Date).AddDays(-‐2) –IntervalMins 120
• VM Disk Sta's'ken in Echtzeit auslesen: Get-‐VM VM | Get-‐Stat -‐Stat disk.write.average –MaxSamples 3 – Real'me | r -‐autosize
• CPU Sta's'ken eines Clusters auslesen: Get-‐Cluster CL | Get-‐Stat -‐Stat cpu.usagemhz.average –MaxSamples 3
115
VMware PowerCLI – Statistiken – Übung 17
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Get-‐VIObjectByVIView • Get-‐PowerCLIConfigura'on • Get-‐PowerCLIVersion • Set-‐PowerCLIConfigura'on • ….
116
VMware PowerCLI – der Rest …
Copyright © 2013 opvizor GmbH Dennis Zimmer
117
VMware PowerCLI – -ErrorAction
• ErrorAction stop-process 13 –ErrorAction SilentlyContinue stop-process 13 -EA 0
• http://blogs.msdn.com/powershell/archive/2006/11/03/erroraction-and-errorvariable.aspx
• http://blogs.msdn.com/powershell/archive/2008/03/29/erroraction-silentlycontinue-ea-0.aspx
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Starten aller VMs im Cluster: Get-‐Cluster “Cluster” | Get-‐VM | Start-‐VM
• Snapshot aller VMs: Get-‐VM | New-‐Snapshot –Name “Skript-‐Snapshot”
• Alle Snapshots älter 7 Tage anzeigen: Get-‐VM | Get-‐Snapshot |Where { $_.Created –lt (Get-‐Date).adddays(-‐7) }
• Rescan aller HBA´s aller Hosts: Get-‐VMHost | Get-‐VMHostStorage –RescanAllHba
• Restart an unresponsive VirtualCenter agent: Get-‐VMHost badhost | Get-‐VMHostService |Where { $_.key –eq “vmware-‐vpxa” } |Restart-‐VMHostService
118
VMware PowerCLI – Übung 19
Copyright © 2013 opvizor GmbH Dennis Zimmer
119
Übung
• Installa'on aller PowerShell Komponenten • Enlernen aller Medien der VMs • ESX Host virtuelle Switche auslesen • Stoppen aller VMs im Cluster • Host in Maintenance Modus setzen (Set-‐Vmhost) • VMs migrieren
– get-‐vmhost esxhost | get-‐vm | move-‐vm -‐Des'na'on (Get-‐vmhost toesxhost) – Get-‐vm –datastore DS1 | move-‐vm –datastore DS2
• RAM virtuelle Maschinen um 50 MB erhöhen
Copyright © 2013 opvizor GmbH Dennis Zimmer
120
VMware PowerCLI – VM Details
$report = @() get-vm | Sort Name -Descending | % { $vm = Get-View $_.ID $vms = "" | Select-Object VMName, GuestVersion $vms.VMName = $vm.Name
$vms.GuestVersion = $vm.guest.guestfullname $report += $vms }
$report | Export-Csv "C:\vm_GuestVersion.csv" -NoTypeInformation
Copyright © 2013 opvizor GmbH Dennis Zimmer
121
VMware PowerCLI – VM SCSI Controller
$hostinfo=get-datacenter "DATACENTER" | get-vmhost $hostinfo | % { $hostview = get-view $_.id
$hostview.config.storagedevice.scsilun | % { ` $lunname=$_.canonicalname $vendor=$_.vendor "" | select @{name="LunName"; expression={$lunname}}, @{name="Vendor";
expression={$vendor}} }
}
Copyright © 2013 opvizor GmbH Dennis Zimmer
122
VMware PowerCLI – Snapshots
Find VCB Snapshots Get-VM | Get-Snapshot | ` Where-Object {$_.Name -eq "_VCB-BACKUP_"} | `
Select Name, @{Name="VM Name" ; ` Expression={$_.VM.Name}}
Report Snapshots get-vm | get-snapshot | Select-Object VM, Name, Description, PowerState, Created, @{Name="Host"; Expression = {(Get-VM $_.VM).Host.Name}} | ft -auto
Copyright © 2013 opvizor GmbH Dennis Zimmer
123
VMware PowerCLI – HA/DRS Status of Cluster Hosts
Get-Cluster | Get-View | %{ Write-Host $_.name foreach($ref in $_.Host){ $h = Get-VIObjectByVIView -MORef $ref |Get-View Write-Host $h.name Write-Host "`tDRS enabled : " $_.Configuration.DRSConfig.Enabled Write-Host "`tHA enabled : " $_.Configuration.DasConfig.Enabled } Write-Host "`n" }
Copyright © 2013 opvizor GmbH Dennis Zimmer
124
VMware PowerCLI – count VM per Cluster
$clusters = get-cluster foreach ($cluster in $clusters) { foreach ($vmhost in ($cluster | get-vmhost)) { $vmhost | get-vm | Select-Object @{Name="Cluster"; Expression={$cluster.name}},` Name } }
Copyright © 2013 opvizor GmbH Dennis Zimmer
125
VMware PowerCLI – Datastore information
$clusters = get-cluster foreach ($cluster in $clusters) { $vmhosts = $cluster | get-vmhost $firsthost = $vmhosts[0] $datastores = $firsthost | get-datastore | % {(Get-View $_.ID).summary} foreach ($datastore in $datastores) { $datastore | select-object @{Name = "Date"; Expression = {get-date}}, @{Name = "Cluster"; Expression = {$cluster.name}}, URL, Name, Freespace, Capacity } }
Copyright © 2013 opvizor GmbH Dennis Zimmer
126
VMware PowerCLI – VM Diskspace information
foreach ($vm in (get-vm | get-view)) {($VM.Guest.Disk | Select @{N="Name";E={$VM.Name}},DiskPath, @{N="Capacity(MB)";E={[math]::Round($_.Capacity/ 1MB)}}, @{N="Free Space(MB)";E={[math]::Round($_.FreeSpace / 1MB)}}, @{N="Free Space %";E={[math]::Round(((100 * ($_.FreeSpace))/ ($_.Capacity)),0)}}) | Format-Table}
Copyright © 2013 opvizor GmbH Dennis Zimmer
127
http://www.lucd.info/2010/03/23/yadr-a-vdisk-reporter/
Copyright © 2013 opvizor GmbH Dennis Zimmer
128
VMware PowerCLI – Get CPU/Core information
Get-VMHost | %{Get-View $_.ID} | %{ $name = $_.name $esx = "" | select NumCpuPackages, NumCpuCores, Hz, Memory $esx.NumCpuPackages = $_.Hardware.CpuInfo.NumCpuPackages $esx.NumCpuCores = $_.Hardware.CpuInfo.NumCpuCores $esx | select-object @{Name = "Name"; Expression = {$name}}, @{Name = "Sockets"; Expression = {$esx.NumCpuPackages}}, @{Name = "Cores"; Expression = {$esx.NumCpuCores}} }
Copyright © 2013 opvizor GmbH Dennis Zimmer
129
VMware PowerCLI – Compare VM Display/Guest Name
$VMs = Get-VM foreach ($VM in $VMs){
$VM = Get-View $VM.ID $nm = $VM.name $hn = $VM.guest.hostname $vm | select @{Name = "Name"; Expression = {$nm}}, @{Name = "Hostname"; Expression = {$hn}}
}
Copyright © 2013 opvizor GmbH Dennis Zimmer
130
VMware PowerCLI – Skript Cluster Report $report = @() $cluster = Get-Cluster <cluster-name> | Get-View $clusterCPU = $cluster.Summary.EffectiveCpu $clusterMem = $cluster.Summary.EffectiveMemory * 1Mb $from = [Datetime]"03/05/2009 00:00" $to = [Datetime]"03/05/2009 23:59" Get-VM | % {
$cpu = $_ | Get-Stat -Stat cpu.usagemhz.average -IntervalMins 5 -Start $from -Finish $to $mem = $_ | Get-Stat -Stat mem.consumed.average -IntervalMins 5 -Start $from -Finish $to for($i=0; $i -lt $cpu.Count; $i++){ $row = "" | select VM, Timestamp, CPUperc, Memperc $row.VM = $cpu[$i].Entity.Name $row.Timestamp = $cpu[$i].Timestamp $row.CPUperc = "{0:N2}" -f ($cpu[$i].Value / $clusterCPU * 100) $row.Memperc = "{0:N4}" -f ($mem[$i].Value / $clusterMem * 100) $report += $row }
} $report
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Voraussetzung – PowerShell im Gast installiert – Administrator Gast-‐OS – Root Benutzer ESX Host
• Befehl – Invoke-‐VMScript [-‐ScriptText] <String> [-‐VM] <VirtualMachine[]> [-‐HostCreden'al <PSCreden'al>] [-‐HostUser
<String>] [-‐HostPassword <SecureString>] [-‐GuestCreden'al <PSCreden'al>] [-‐GuestUser <String>] [-‐GuestPassword <SecureString>] [-‐ToolsWaitSecs <Int32>]
– Invoke-‐VMScript -‐VM (Get-‐VM myVM) -‐ScriptText "dir" -‐HostUser root -‐HostPassword mypass –GuestUser administrator -‐GuestPassword mypass
• KombinaVon mit WASP zur Fernsteuerung von ApplikaVonen möglich: – hhp://www.codeplex.com/WASP
131
VMware PowerCLI – Invoke-VMscript
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Hintergrund – Miqels Get-‐View lassen sich die .Net Eigenscharen der VI Objekte auslesen, wodurch
fehlende Informa'onen und Ak'onen der PowerShell ergänzt werden – Setzt direkt auf der vSphere API auf
• Beispiele – Run'me Info eines Hosts einer bes'mmten VM
$allvms = Get-‐View –ViewType VirtualMachine $vm = Get-‐View –ViewType VirtualMachine -‐Filter @{"Name" = „VM1"} $hostView = Get-‐View –ID $vm.Run'me.Host $hostView.Summary.Run'me
– VMo'on Netzwerkkarte konfigurieren (Get-‐View (Get-‐Host 'ESX1' | getview).ConfigManager.Vmo'onSystem).SelectVnic('vmk0')
– SC RAM auslesen (Get-‐View (Get-‐View -‐VIObject (Get-‐VmHost ESX1)).ConfigManager.MemoryManager).ConsoleReserva'onInfo
– SC RAM konfigurieren (Get-‐View (Get-‐View -‐VIObject (Get-‐VmHost ESX1)).ConfigManager.MemoryManager).ReconfigureServiceConsoleReserva'on(512mb)
132
VMware PowerCLI – Get-View (.Net Objects)
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Arbeiten mit Get-‐View Objekten – $vm = Get-‐View -‐ViewType VirtualMachine -‐Filter @{"Name" = “VM1" } – $hostView = Get-‐View -‐ID $vm.Run'me.Host – $hostView.Summary.Run'me
• Andere Objekte auslesen – $ESX = Get-‐View -‐ViewType "HostSystem" -‐Filter @{"Name" = "ESXSERVER"} – $DC = Get-‐View –ViewType “DataCenter” – $DS = Get-‐View –ViewType “DataStore” – $Folder = Get-‐View –ViewType “Folder” – $Cluster = Get-‐View -‐ViewType "ClusterComputeResource" – $Network = Get-‐View -‐ViewType “Network“ – $VCInstance = Get-‐View serviceinstance – $ESXStorage = Get-‐VMHostStorage –VMHost “ESX1” | Get-‐View
133
VMware PowerCLI – Get-View (.Net Objects)
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Storage – $ESXView = Get-‐VMHost “ESX1” | Get-‐View – $Storage = Get-‐View $ESXView.ConfigManager.StorageSystem
• Netzwerk – $ESXView = Get-‐VMHost “ESX1” | Get-‐View – $Network = Get-‐View $ESXView.ConfigManager.NetworkSystem
• Firewall – $ESXView = Get-‐VMHost “ESX1” | Get-‐View – $Firewall = Get-‐View $ESXView.ConfigManager.FirewallSystem – $FWRules = $Firewall.FirewallInfo.Ruleset
• NTP – $ESXView = Get-‐VMHost “ESX1” | Get-‐View – $NTP = Get-‐View $ESXView.ConfigManager.DateTimeSystem
134
VMware PowerCLI – Get-View (Mehrfach-View)
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Suchbereich filtern – $esx = Get-‐View -‐ViewType "HostSystem" -‐Filter @{"Name" = "ESXSERVER"} – $vm = Get-‐View –SearchRoot $esx.moref -‐ViewType VirtualMachine
• ID angeben – $ESX = Get-‐View –ID “HostSystem-‐host-‐2360” #Case sensi've
• VIObject Umgang – Get-‐VM “VM1” | Get-‐View – Get-‐View –ViObject (Get-‐VM “VM1”)
• Get-‐VIObjectbyVIView – der Weg zurück – .Net Objekte zu PowerCLI Objekten konver'eren
$vm = Get-‐VIObjectByVIView $vmView
135
VMware PowerCLI – Get-View (.Net Objects)
Copyright © 2013 opvizor GmbH Dennis Zimmer
• ESX Host – $VM –isnot [Vmware.VimAutoma'on.Client20.VMHostImpl]
• Virtuelle Maschine – $VM –isnot [Vmware.VimAutoma'on.Client20.VirtualMachineImpl]
• Virtuelle Maschine Gast – $VM –isnot [Vmware.VimAutoma'on.Client20.VMGuestImpl]
• DataStore – $VM –isnot [Vmware.VimAutoma'on.Client20.DataStoreImpl]
• Netzwerk – $VM –isnot [Vmware.VimAutoma'on.Client20.VirtualSwitchImpl] – $VM –isnot [Vmware.VimAutoma'on.Client20.VirtualPortGroupImpl]
136
VMware PowerCLI – Get-View (auf Objekttyp prüfen)
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Geschwindigkeitsunterschied testen (measure-‐command) – Get-‐VM
• Get-‐VM VM1
– Get-‐View • Get-‐View –ViewType “VirtualMachine” –filter @{“Name”=“VM1”}
– Get-‐VM | Get-‐View • Get-‐VM VM1 | Get-‐View
• Vergleich Performance – Measure-‐Command –Expression {Befehl}
• Ausgabe – $variable = Befehl
137
VMware PowerCLI – Get-View (.Net Objects)
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Vergleich Get-‐VM mit Get-‐VM | Get-‐View • Vergleich Get-‐VMHost mit Get-‐VMHost | Get-‐View • Vergleich Get-‐Datastore mit Get-‐Datastore | Get-‐View • Auflistung der VMFS Datastore mit Informa'on zur VMFS Version
138
VMware PowerCLI – Get-View – Übung 20
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Links – vSphere API: hqp://www.vmware.com/support/developer/vc-‐sdk/visdk400pubs/ReferenceGuide/index.html – Exploring VMware's API: hqp://tech.zsoldier.com/2009/09/exploring-‐vmware-‐api-‐using-‐powercli-‐get.html – PowerCLI Mastery: hqp://vinternals.com/powercli-‐mastery/ – Set dvSwitch: hqp://poshcode.org/1373
139
VMware PowerCLI – Get-View (.Net Objects)
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Object staq Name – falsch $vm = Get-‐VM VM1 Get-‐harddisk –vm $vm.name – besser $vm = Get-‐VM VM1 Get-‐Harddisk –vm $vm
• Get-‐View staq CmdLet get-‐vm -‐name VM1 = 2 minutes get-‐view –viewtype virtualmachine -‐filter @{”Name” = “VM1″₺} = 5 seconds Wird allerdings von PowerCLI Version zu Version verbessert
140
VMware PowerCLI – Beschleunigung von CmdLets
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Beispiel 1 – Langsam – 35 Stunden bei 1200 VMs $tempvm.vlan = (Get-‐View -‐Id $vm.network).name – Besser – 2 Minuten 15 Sekunden bei 1200 VMs foreach ($device in ($myvm.config.hardware.device)) {if ($device.backing.devicename -‐like “VLAN*”) {$tempvm.vlan=$device.backing.devicename}}
• Beispiel 2 – Langsam
get-‐harddisk -‐VM $vm.name | foreach-‐object -‐process {$tempvm.diskGB += $_.CapacityKB} $tempvm.diskGB = [math]::round(($tempvm.diskGB / 1048576),0) if ($tempvm.diskGB -‐eq 0) { $tempvm.diskGB = “N-‐A” } – Besser foreach ($device in ($vm.config.hardware.device)) {if ($device.backing.filename -‐like “*vmdk”){$tempvm.diskGB += $device.capacityinKB}}
141
VMware PowerCLI – Beschleunigung von CmdLets
Copyright © 2013 opvizor GmbH Dennis Zimmer
Einfache Mail $smtp = new-‐object Net.Mail.SmtpClient(”Server”) $smtp.Send(”[email protected]”, “[email protected]”, “subject here”, “body here”) Komplexe Mail hqp://mspowershell.blogspot.com/2007/12/cmdlet-‐like-‐email-‐script.html $filename = “Protokolldatei” # nur bei Aqachment $smtpServer = “Server” $msg = new-‐object Net.Mail.MailMessage $aq = new-‐object Net.Mail.Aqachment($filename) # Aqachment, wenn gewünscht $smtp = new-‐object Net.Mail.SmtpClient($smtpServer) $msg.From = “[email protected]” $msg.To.Add(”[email protected]”) $msg.Subject = “Nightly Log File” $msg.Body = “The nightly log file is aqached” $msg.Aqachments.Add($aq) $smtp.Send($msg) # Mailversand $aj.Dispose() # Aqachment freigeben
142
VMware PowerCLI – Mail versenden
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Mail mit dem Windows Eventlog versenden
$sys = Get-‐Eventlog -‐list | Foreach-‐Object -‐process{Get-‐Eventlog $_.Log} | ?{$_.TimeGenerated -‐gt [DateTime]::Now.AddDays(-‐1)} | ConvertTo-‐Html $msg = New-‐Object Net.Mail.MailMessage("[email protected]", "[email protected]", "Daily Eventlog summary", $sys) $msg.IsBodyHTML = $true $smtp = New-‐Object NetMail.SmtpClient("mailserver.my.mail") $smtp.Send($msg)
Aufgabe: Wie sieht das unter VMware mit der PowerCLI aus?
143
VMware PowerCLI – Mail versenden
Copyright © 2013 opvizor GmbH Dennis Zimmer
• Hot-‐Remove Harddisk $vmName = „VM1" $hdName = "Hard disk 3" $vm = Get-‐VM $vmName | Get-‐View $tgtdev = $vm.Config.Hardware.Device | where {$_.DeviceInfo.Label -‐eq $hdName} $dev = New-‐Object VMware.Vim.VirtualDeviceConfigSpec $dev.opera'on = "remove" $dev.device = $tgtdev $spec = New-‐Object VMware.Vim.VirtualMachineConfigSpec $spec.DeviceChange += $dev $vm.ReconfigVM($spec)
144
VMware PowerCLI – VM Hot-Remove Disk
Copyright © 2013 opvizor GmbH Dennis Zimmer
• hqp://blogs.vmware.com/vipowershell/ • hqp://communi'es.vmware.com/community/developer/windows_toolkit • hqp://www.ntpro.nl/blog/categories/10-‐VMware-‐PowerShell • hqp://www.virtu-‐al.net/ • hqp://www.peetersonline.nl/ • hqp://www.vmwarescrip'ng.com
145
Links
Copyright © 2013 opvizor GmbH Dennis Zimmer