Microsoft Academic Program Von WSH zu MSH Dr. Tobias Weltner Student Technology Conference 2005
Microsoft Academic Program Student Technology Conference 2005 Von WSH zu MSH Dr. Tobias Weltner MVP Windows Server / Skriptautomation
Microsoft Academic Program Student Technology Conference 2005 Automation Heute vorhandene Automationslösungen –Shell Skripts (Batch) –Windows Script Host (WSH) Sind wir damit glücklich? –Shell Skripts zu limitiert –WSH-Skripts zu kompliziert –.NET-Integration fehlt beiden
Microsoft Academic Program Student Technology Conference 2005 Automation Shell Skripts –basieren auf vorhandenen Programmen –lassen sich leicht erweitern –einfach (kurze Befehle, schnelle (Miß)Erfolge) –Text-Piping –uneinheitliche Befehle/Syntax –keine Unterstützung für COM oder.NET
Microsoft Academic Program Student Technology Conference 2005 Windows Script Host Strukturierte Sprache (VBScript, JScript) Zugriff auf COM-Komponenten Ansätze von Objektorientiertheit Programmiererfahrung nötig Kein Rahmenwerk (Includes) Keine.NET-Unterstützung
Microsoft Academic Program Student Technology Conference 2005 Microsoft Shell (MSH) Erweiterbare Skriptumgebung Einfache Befehle wie bei Shell Skripts –erweiterbar durch.NET-Klassen COM-Unterstützung wie bei WSH Strukurierte Sprache –KSH, BASH, PERL, RUBY, VMS DCL, AS400 CL Objekt-Piping
Microsoft Academic Program Student Technology Conference 2005 Von Shell Skripts zu MSH NETSTAT –E PING DIR C: $resultat = NETSTAT –E foreach ( $line in $resultat ) { if ( $line -ilike "*unicast*" ) { $line } } $ip = " " ping -n 1 -w 100 $ip | where {grep-string -text $_ - pattern "antwort"} | echo "Online"
Microsoft Academic Program Student Technology Conference 2005 Von Shell Skripts zu MSH Dir *.vbs Dir *.vbs | foreach {type $_} Dir *.vbs | grep-string -pattern "isNumeric" Dir *.vbs | where {grep-string $_ -pattern "isNumeric"} Dir *.vbs | where {grep-string $_ -pattern "isNumeric"} | foreach {type $_ } Cd HKCU:\Software Dir Md MSHTest Del MSHTest
Microsoft Academic Program Student Technology Conference 2005 Von Shell Skripts zu MSH Dir HKLM:\SOFTWARE\*\Cryptography Dir HKCU:\ Dir -recurse Dir HKCU:\ -recurse | where {$_.childname -ilike "*SYS*"} Dir $env:path.split(";") *.exe |group name |where {$_.count -gt 1} Dir Env: Dir Variable: Dir Function:
Microsoft Academic Program Student Technology Conference 2005 Zwischenbilanz Variablen –$a =... Objekt-Piping –dir | where... | grep-string... reichhaltiger Befehlsschatz einheitliche Namensräume –Dateisystem, Registry, Umgebungsvars...
Microsoft Academic Program Student Technology Conference 2005 Vom WSH zur MSH Größte Stärke des WSH: COM-Integration VBScript kann fremde DLLs verwenden Set objnet = CreateObject("WScript.Network") objnet.MapNetworkDrive "G:", "\\ \c$" Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = true objIE.Navigate "
Microsoft Academic Program Student Technology Conference 2005 Vom WSH zur MSH $objnet = new-object -activex "WScript.Network" $objnet.MapNetworkdrive("X:", "\\ \c$") explorer x: $objnet.RemoveNetworkDrive("X:") $objie = new-object -activex "InternetExplorer.Application" $objie.visible = 1 $objie.navigate("
Microsoft Academic Program Student Technology Conference 2005 Vom WSH zur MSH WMI-Integration Set objWMI = GetObject("winmgmts:") Set objAll = objWMI.InstancesOf("Win32_Process") For Each objProcess In objAll WScript.Echo objProcess.GetObjectText_ Next
Microsoft Academic Program Student Technology Conference 2005 Vom WSH zur MSH $a = get-wmiobject win32_process $a = get-wmiobject win32_process -filter "name like '%iex%'" $a | out-grid
Microsoft Academic Program Student Technology Conference 2005 Vom WSH zum MSH $d= new-object System.DateTime $d= new-object System.Web.Services.Discovery.DiscoveryDocument -file C:\WINDOWS\Microsoft.NET\Framework\v \Syst em.Web.Services.dll
Microsoft Academic Program Student Technology Conference 2005 Zwischenbilanz COM-Objekte –werden von MSH voll unterstützt.NET –Zugriff auf beliebige Datentypen –Zugriff auf.NET-Klassen
Microsoft Academic Program Student Technology Conference 2005 Commandlets - die MSH-Befehle bestehen aus einem Verb-Substantiv –grep-string, new-item, get-help Alias-Namen erleichtern den Umgang –Dir, Cd, Md, Help –Dir Alias:\Cd –set-alias Hilfmir get-help –set-alias edit notepad.exe
Microsoft Academic Program Student Technology Conference 2005 Commandlets Commandlets sind.NET-Klassen –DLLs, keine EXE –Provider bieten einheitliche Frameworks Dateisystem, Registry, Active Directory... –Pipelines bestehen aus Commandlets, die strukturierte Objekte austauschen –Extended Type System (ETS) kümmert sich um die Interfaces für Piping
Microsoft Academic Program Student Technology Conference 2005 Commandlets CmdletDeclarationAttribute –Verb, Substantiv using System.Management.Automation; [CmdletDeclarationAttribute("Invoke", "Test")] class InvokeTest : Cmdlet { implementation }
Microsoft Academic Program Student Technology Conference 2005 Commandlets Klasse definiert 3 virtuelle Methoden class InvokeTest : Cmdlet { … public override void StartProcessing(); public override void ProcessRecord(); public override void EndProcessing(); … }
Microsoft Academic Program Student Technology Conference 2005 Commandlets public class InvokeTest : Cmdlet { private string message; [ParsingPromptString("Enter a string to echo: " )] [ParsingParameterMapping(0)] [ParsingMandatoryParameter] public string Message { get { return message; } set { message = value; } } public override void ProcessRecord() { WriteObject( message ); }
Microsoft Academic Program Student Technology Conference 2005 Commandlets Verb-Noun.cmdlet und zugehörige DLL in Ordner speichern, der in %MSHCOMMANDPATH% liegt MSH erkennt Commandlets beim Start Microsoft.Samples.Management.Automation.InvokeHelloW orld HelloWorld.dll HelloWorld, Version= , Culture=neutral, PublicKeyToken=null HelloWorld.dll-Help.xml
Microsoft Academic Program Student Technology Conference 2005 Mit Commandlets arbeiten get-command get-command *out* get-command -noun clipboard get-command -verb out get-help out-grid get-help foreach $a = get-item c:\test.txt $a | format-list $a | out-grid $a | format-list * $a | out-html
Microsoft Academic Program Student Technology Conference 2005 Mit Commandlets arbeiten $a | get-member $a | get-member -m $a.getHashCode $a.getHashCode() $a.set_CreationTime(" ") $a.copyto("c:\test.bak") new-item c:\prozesse.txt -type file set-content c:\prozesse.txt -value $(get-process) $i=0; foreach ($line in $(get-content c:\prozesse.txt)) {"{0}: {1}"-f $i, $Line; $i+=1}
Microsoft Academic Program Student Technology Conference 2005 Mit Commandlets arbeiten $f = [System.IO.File].OpenText("c:\prozesse.txt") for (;;) {$line = $f.ReadLine() if ($line -eq $()) {break } write-host $line } $f.Close()
Microsoft Academic Program Student Technology Conference 2005 Mit Commandlets arbeiten get-process | export-xml c:\prozesse.xml $prozesse = import-xml c:\prozesse.xml grep-string "default" "c:\boot.ini" get-uri | split-string | split-string -pattern ">" | grep-string -pattern "href" | sort line.length | table line
Microsoft Academic Program Student Technology Conference 2005 Mit Commandlets arbeiten $getid = { foreach ( $p in $input ) { $p.Id } } get-process | &$getid get-command get-process | format-list * get-process |pick-object ProcessName -expand Modules | out-grid get-process {$_.ProcessName.ToUpper()}; Label= "Name"; Width= 15 = "KB" ;Expression = {($_.WorkingSet )/1024}; Format = "{0,15} KB" } –auto
Microsoft Academic Program Student Technology Conference 2005 Mit Commandlets arbeiten $prozesse = get-process $prozesse | where {$_.hasExited -eq 1} | out-grid get-process | where { $_.processname -ieq "iexplore" } | foreach { $_.Kill() } get-process | where { $_.processname -ilike "*iexplore*" } | sort-object -p cpu | pick-tail 1 | foreach { $_.Kill() } ps | out-chart processname,workingset
Microsoft Academic Program Student Technology Conference 2005 Mit Commandlets arbeiten get-service Alerter | get-member -m $service = get-service Alerter $service.Stop get-eventlog -logname system | group-object username get-eventlog -logname system | pick-tail 10 get-eventlog -logname system | pick-head 10 | pick- object -p source get-command -verb get
Microsoft Academic Program Student Technology Conference 2005 Zwischenbilanz Neue Commandlets als.NET-Klassen COM-Komponenten Ausführbare Programme (.EXE,.COM) Skripts (.BAT,.VBS,.JS,.WS, etc.) integrierte Funktionen MSH-Skripts (.MSH)
Microsoft Academic Program Student Technology Conference 2005 MSH-Skripts und Funktionen function addnums { $local:result = 0 foreach ( $local:a in $args ) { $result += $a } $result }
Microsoft Academic Program Student Technology Conference 2005 MSH-Skripts und Funktionen $phrase = $args[0]; $wd = new-object -activex "word.application"; $p = pwd; if ($args.length > 1) { $docs = $args[1]; } else { $docs = "*.doc"; } foreach ($a in $(get-childitem $docs -name)) { $doc = $wd.documents.open("$p\$a"); if ($doc.content.find.execute("$phrase")) { write-host "Wort" $phrase "gefunden in" $a $file = get-item $p\$a Write-host $file.length "Bytes. Zuletzt geändert am" $file.LastWriteTime } $doc.close(); }
Microsoft Academic Program Student Technology Conference 2005 MSH - Fazit Einfacher Umstieg von Shell/WSH –COM-Objektmodelle und externe Tools bleiben erhalten Sehr dichte und machtvolle Sprache –anpassbar durch Aliase –erweiterbar durch.NET-Klassen Schnelle Resultate –Objekt-Piping
Microsoft Academic Program Student Technology Conference 2005 MSH - Fazit Wann? –geplant für Longhorn –wird es auch für ältere Windows-Plattformen geben –Beta-Test läuft - am besten selbst mitmachen!
Microsoft Academic Program Student Technology Conference 2005 MSH Testversion ausprobieren Betaplace besuchen – mshPDCBeta-ID: mshPDC benötigt.NET Framework 2.0 %MSHCOMMANDPATH% erweitern
Microsoft Academic Program Student Technology Conference 2005 Questions and Answers ? ? ? ? ?
Microsoft Academic Program Student Technology Conference 2005 Mehr Informationen us/wmisdk/wmi/wmi_classes.asp 8/1/38198a72-294d-46c3-93ba- faee5cf85d00/ARC334.ppt ?PostID=25531#25531