![Page 1: NET Users Group Karlsruhe 26.04.2007. Worum gehts? Goodby cmd.exe (ok ok, sie bleibt noch ein bisschen) Die Eingabeaufforderung erhält endlich einen](https://reader036.vdocuments.mx/reader036/viewer/2022062307/55204d6249795902118b657d/html5/thumbnails/1.jpg)
.NET User‘s Group Karlsruhe 26.04.2007
![Page 2: NET Users Group Karlsruhe 26.04.2007. Worum gehts? Goodby cmd.exe (ok ok, sie bleibt noch ein bisschen) Die Eingabeaufforderung erhält endlich einen](https://reader036.vdocuments.mx/reader036/viewer/2022062307/55204d6249795902118b657d/html5/thumbnails/2.jpg)
Worum geht‘s?
• Goodby cmd.exe (ok ok, sie bleibt noch ein bisschen)• Die Eingabeaufforderung erhält endlich
einen würdigen Nachfolger• Wenn schon, dann richtig: Es gibt nicht nur
Neues gegenüber cmd.exe, sondern viel Neuartiges
• PowerShell (ehemals „Monad“) ist strategisch für Microsoft• Neue Serveranwendungen werden
PowerShell-scriptfähig• Z. B. Exchange 2007, Virtual Server 2007
![Page 3: NET Users Group Karlsruhe 26.04.2007. Worum gehts? Goodby cmd.exe (ok ok, sie bleibt noch ein bisschen) Die Eingabeaufforderung erhält endlich einen](https://reader036.vdocuments.mx/reader036/viewer/2022062307/55204d6249795902118b657d/html5/thumbnails/3.jpg)
Wenn man eine Shell bauen darf Was muss eine Shell einfach drauf
haben, wenn sie sich Shell nennen will? Alles Bewährte Pipes, Ein-/Ausgabeumleitung Richtiges Scripting, Ablaufsteuerung
Und was hätten wir gerne? Neue Ideen, größere Mächtigkeit Einheitliche Befehlsstruktur Sicherheit
![Page 4: NET Users Group Karlsruhe 26.04.2007. Worum gehts? Goodby cmd.exe (ok ok, sie bleibt noch ein bisschen) Die Eingabeaufforderung erhält endlich einen](https://reader036.vdocuments.mx/reader036/viewer/2022062307/55204d6249795902118b657d/html5/thumbnails/4.jpg)
Der #1 Gag überhaupt
PowerShell ist vollständig .NET 2.0-basiert Wäre ja zu erwarten… aber:
Pipes reichen .NET-Objekte durch! Variablen halten .NET-Objekte! Einige Konsequenzen:
Formatierte Ausgabe! Liste, Tabelle, CSV, XML…
Filtern, Sortieren und sogar Gruppieren nach .NET-Eigenschaften
![Page 5: NET Users Group Karlsruhe 26.04.2007. Worum gehts? Goodby cmd.exe (ok ok, sie bleibt noch ein bisschen) Die Eingabeaufforderung erhält endlich einen](https://reader036.vdocuments.mx/reader036/viewer/2022062307/55204d6249795902118b657d/html5/thumbnails/5.jpg)
Was ist ein Befehl?
Befehle gibt’s nicht mehr, da sagt man jetzt CmdLet dafür ;-)
CmdLets sind .NET-Klassen, abgeleitet von einer Basisklasse
PowerShell nimmt CmdLets Arbeit ab Argumente parsen, prüfen und ggf.
Fehlermeldungen erzeugen CmdLets bekommen .NET-Objekte
und geben .NET-Objekte aus
![Page 6: NET Users Group Karlsruhe 26.04.2007. Worum gehts? Goodby cmd.exe (ok ok, sie bleibt noch ein bisschen) Die Eingabeaufforderung erhält endlich einen](https://reader036.vdocuments.mx/reader036/viewer/2022062307/55204d6249795902118b657d/html5/thumbnails/6.jpg)
Einheitliche Befehlsstruktur CmdLets werden immer durch die
Kombination Verb-Objekt aufgerufen Get-ChildItem, , Get-WmiObject, Format-
Table, Out-Printer, Group-Object, Export-Csv, …
Wenige Verben, viele Objekte Es gibt Aliase
Get-ChildItem = gci = dir = ls Vordefinierte und selbst definierte
Auch die Parametersyntax ist einheitlich Sie wird von der Shell geparst, nicht vom
CmdLet!
![Page 7: NET Users Group Karlsruhe 26.04.2007. Worum gehts? Goodby cmd.exe (ok ok, sie bleibt noch ein bisschen) Die Eingabeaufforderung erhält endlich einen](https://reader036.vdocuments.mx/reader036/viewer/2022062307/55204d6249795902118b657d/html5/thumbnails/7.jpg)
Nu‘ zeig doch endlich…
Demo!
![Page 8: NET Users Group Karlsruhe 26.04.2007. Worum gehts? Goodby cmd.exe (ok ok, sie bleibt noch ein bisschen) Die Eingabeaufforderung erhält endlich einen](https://reader036.vdocuments.mx/reader036/viewer/2022062307/55204d6249795902118b657d/html5/thumbnails/8.jpg)
Wie findet man was?
Wer suchet… … der findet
Welche Befehle gibt es? Get-Command
Welche Methoden und Eigenschaften hat dieses Objekt?
Get-Member, Get-Member -static
Hilfe zu einem Befehl Parameter -? oder Get-Help
Welche Aliase sind definiert? Get-Alias
Welche Funktionen sind definiert?
Get-ChildItem Function:
Welche Provider gibt es? Get-PSProvider
Hä? Provider? Was‘n das nu wieder?
Siehe nächste Folie ;-)
![Page 9: NET Users Group Karlsruhe 26.04.2007. Worum gehts? Goodby cmd.exe (ok ok, sie bleibt noch ein bisschen) Die Eingabeaufforderung erhält endlich einen](https://reader036.vdocuments.mx/reader036/viewer/2022062307/55204d6249795902118b657d/html5/thumbnails/9.jpg)
Gag #2: Provider!
Provider liefern PowerShell-Laufwerke Ja, A:, C: und D: nebst Kollegen sind alle
noch da Aber jetzt gibt es auch Laufwerke
namens…
Alias: Enthält alle Aliase
Cert: Enthält den Zertifikatsspeicher
Env: Enthält das Environment
Function: Enthält alle per PowerShell-Scriptsprache definierten Funktionen
HKCU: und HKLM:
Enthält die Registry
Variable: Enthält alle Variablen
![Page 10: NET Users Group Karlsruhe 26.04.2007. Worum gehts? Goodby cmd.exe (ok ok, sie bleibt noch ein bisschen) Die Eingabeaufforderung erhält endlich einen](https://reader036.vdocuments.mx/reader036/viewer/2022062307/55204d6249795902118b657d/html5/thumbnails/10.jpg)
Mit cd, äh, Set-Location in die Registry? Ja!
Demo!
![Page 11: NET Users Group Karlsruhe 26.04.2007. Worum gehts? Goodby cmd.exe (ok ok, sie bleibt noch ein bisschen) Die Eingabeaufforderung erhält endlich einen](https://reader036.vdocuments.mx/reader036/viewer/2022062307/55204d6249795902118b657d/html5/thumbnails/11.jpg)
Des Kaisers neue Kleider PowerShell kann man anpassen Schlüssel dazu sind Profile Profile sind Textdateien
Gibt‘s global auf der Maschine Kann‘s geben pro User Ganz extrem per XML-Konfigurationsdateien
Variable $profile enthält Pfad zum eigenen Profil
Erstmaliges Anlegen mit New-Item $profile –force
Editieren mit notepad $profile (yeah!) Standardmäßig nicht zugelassen – SD³
![Page 12: NET Users Group Karlsruhe 26.04.2007. Worum gehts? Goodby cmd.exe (ok ok, sie bleibt noch ein bisschen) Die Eingabeaufforderung erhält endlich einen](https://reader036.vdocuments.mx/reader036/viewer/2022062307/55204d6249795902118b657d/html5/thumbnails/12.jpg)
Ja wie, Scripte gehen nicht? Secure by Design, Deployment, Default
hat Folgen Ausführung aus lokalem Verzeichnis nur
via .\Befehl Wirkt eingeschleusten Virus-notepad.exe
entgegen Scripterweiterung .ps1 ist nicht mit
PowerShell verknüpft Nix da mit Doppelkick auf Script!
Scripts sind standardmäßig aus Erst durch Set-ExecutionPolicy aktivierbar Das darf ein normaler User gar nicht einstellen
![Page 13: NET Users Group Karlsruhe 26.04.2007. Worum gehts? Goodby cmd.exe (ok ok, sie bleibt noch ein bisschen) Die Eingabeaufforderung erhält endlich einen](https://reader036.vdocuments.mx/reader036/viewer/2022062307/55204d6249795902118b657d/html5/thumbnails/13.jpg)
Gag #3: Edel-Bauklötze Get-ChildItem, New-Item, Remove-Item
gehen auf jedem PowerShell-Laufwerk Where-Object, Sort-Object, Group-Object
filtern, sortieren, gruppieren nach egal was
ForEach-Object führt Befehl/Script auf jedem Objekt aus
$variable = @{} erzeugt eine Hashtable Select-Object gibt nur bestimmte
Eigenschaften, nur eindeutige oder die ersten/letzten n Objekte weiter
Add-Member fügt neue Eigenschaften hinzu!
![Page 14: NET Users Group Karlsruhe 26.04.2007. Worum gehts? Goodby cmd.exe (ok ok, sie bleibt noch ein bisschen) Die Eingabeaufforderung erhält endlich einen](https://reader036.vdocuments.mx/reader036/viewer/2022062307/55204d6249795902118b657d/html5/thumbnails/14.jpg)
Was kann man damit machen?
Demo!
![Page 15: NET Users Group Karlsruhe 26.04.2007. Worum gehts? Goodby cmd.exe (ok ok, sie bleibt noch ein bisschen) Die Eingabeaufforderung erhält endlich einen](https://reader036.vdocuments.mx/reader036/viewer/2022062307/55204d6249795902118b657d/html5/thumbnails/15.jpg)
Gag #4: Zugriff aufs .NET Framework (12345).ToString("x") $extension =
[IO.Path]::GetExtension($path) $r = New-Object System.Random;
$r.Next $Voice = New-Object -comObject
SAPI.SPVoice;$Voice.Speak("Hello, world!")
Und: Beliebige .NET DLLs laden!
![Page 16: NET Users Group Karlsruhe 26.04.2007. Worum gehts? Goodby cmd.exe (ok ok, sie bleibt noch ein bisschen) Die Eingabeaufforderung erhält endlich einen](https://reader036.vdocuments.mx/reader036/viewer/2022062307/55204d6249795902118b657d/html5/thumbnails/16.jpg)
Gag #5: Lad doch, was Du willst! [System.Reflection.Assembly]::LoadF
ile($MyAssemblyPath) Erlaubt Zugriff auf Objektmodelle,
die in Form einer .NET DLL vorliegen! Beispiele:
SQL Server 2005 DMO SF ft Community Publisher (Demo!)
![Page 17: NET Users Group Karlsruhe 26.04.2007. Worum gehts? Goodby cmd.exe (ok ok, sie bleibt noch ein bisschen) Die Eingabeaufforderung erhält endlich einen](https://reader036.vdocuments.mx/reader036/viewer/2022062307/55204d6249795902118b657d/html5/thumbnails/17.jpg)
Gag #6: Erweiterbarkeit Es gibt ein SDK zur PowerShell Man kann eigene CmdLets, Provider
usw. bauen Exchange 2007 und Virtual Server
2007 Management machen genau das
Mehrere Community-Projekte machen dasselbe
![Page 18: NET Users Group Karlsruhe 26.04.2007. Worum gehts? Goodby cmd.exe (ok ok, sie bleibt noch ein bisschen) Die Eingabeaufforderung erhält endlich einen](https://reader036.vdocuments.mx/reader036/viewer/2022062307/55204d6249795902118b657d/html5/thumbnails/18.jpg)
Kritik
Für eine Version 1.0 schick, aber da fehlt noch was… Komfort: Keine Script-IDE, kein zeitgemäßes
Debugging Community liefert mehrere Alternativen
Features Beispiel: Komfortabler ADSI-Zugriff war in Beta,
ist aber rausgefallen Auch hier hat die Community was zu bieten
Manchmal noch nicht zu Ende gedacht Beispiel: Get-Service liefert Startmodus nicht
Dann nehmen wir halt gleich Get-WmiObject Win32_Service
Version 2.0 wird bestimmt noch besser ;-)