{"id":1937,"date":"2017-06-21T14:52:10","date_gmt":"2017-06-21T12:52:10","guid":{"rendered":"https:\/\/www.langlitz-it.de\/?p=1937"},"modified":"2017-08-10T12:42:06","modified_gmt":"2017-08-10T10:42:06","slug":"powershell-parallele-verarbeitung-als-job","status":"publish","type":"post","link":"https:\/\/www.langlitz-it.de\/?p=1937","title":{"rendered":"PowerShell &#8211; Parallele Verarbeitung als Job"},"content":{"rendered":"<p>Im Normalfall werden Befehle von der <em>PowerShell<\/em> (und auch sonst im Scripting) <em>sequentiell<\/em> abgearbeitet. Das bedeutet ein Befehl nach dem anderen. Je nachdem, wie lange eine Aufgabe dauert, kann das zu immensen Wartezeiten f\u00fchren. Zus\u00e4tzlich ist in dieser Wartezeit ist die <em>PowerShell<\/em>\u00a0nicht zu nutzen. Sie m\u00fcssen warten, bis die Aufgabe(n) abgearbeitet sind.<\/p>\n<p>Die <em>PowerShell<\/em> bietet die M\u00f6glichkeit der parallelen Verarbeitung von Aufgaben, in dem Sie diese als <em>Job<\/em>\u00a0starten. Die Verarbeitung wird in diesem Fall in den Hintergrund geschoben. Somit k\u00f6nnen Sie nach dem Start des <em>Jobs<\/em> einfach weiterarbeiten. Wie sieht so etwas aus?<\/p>\n<hr \/>\n<p>Ein einfaches Beispiel zur Verarbeitung im Hintergrund.<\/p>\n<p>Sie f\u00fchren ein rekursives <em>Get-ChildItem<\/em> f\u00fcr das Windows Verzeichnis aus. Das kann schon mal einige Zeit in Anspruch nehmen.<\/p>\n<p><em>PS Work:\\&gt; Get-ChildItem $env:windir -Recurse<\/em><\/p>\n<p>Wenn Sie nun den gleichen Vorgang als <em>Job<\/em> starten, wird dieser im Hintergrund ausgef\u00fchrt und Sie k\u00f6nnen direkt weiterarbeiten.\u00a0Den Status des Jobs pr\u00fcfen Sie mit <em>Get-Job<\/em>.<\/p>\n<p><a href=\"https:\/\/www.langlitz-it.de\/wp-content\/uploads\/2017\/06\/Jobs1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1942\" src=\"https:\/\/www.langlitz-it.de\/wp-content\/uploads\/2017\/06\/Jobs1.jpg\" alt=\"\" width=\"832\" height=\"155\" srcset=\"https:\/\/www.langlitz-it.de\/wp-content\/uploads\/2017\/06\/Jobs1.jpg 832w, https:\/\/www.langlitz-it.de\/wp-content\/uploads\/2017\/06\/Jobs1-300x56.jpg 300w, https:\/\/www.langlitz-it.de\/wp-content\/uploads\/2017\/06\/Jobs1-768x143.jpg 768w\" sizes=\"(max-width: 832px) 100vw, 832px\" \/><\/a><\/p>\n<p>\u00dcber den Status <em>Running<\/em> erkennen Sie, dass der <em>Job<\/em> noch l\u00e4uft. Wenn dieser Status nun auf <em>Completed<\/em> wechselt, ist der <em>Job<\/em> abgeschlossen.<\/p>\n<p><a href=\"https:\/\/www.langlitz-it.de\/wp-content\/uploads\/2017\/06\/Jobs2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1943\" src=\"https:\/\/www.langlitz-it.de\/wp-content\/uploads\/2017\/06\/Jobs2.jpg\" alt=\"\" width=\"854\" height=\"79\" srcset=\"https:\/\/www.langlitz-it.de\/wp-content\/uploads\/2017\/06\/Jobs2.jpg 854w, https:\/\/www.langlitz-it.de\/wp-content\/uploads\/2017\/06\/Jobs2-300x28.jpg 300w, https:\/\/www.langlitz-it.de\/wp-content\/uploads\/2017\/06\/Jobs2-768x71.jpg 768w\" sizes=\"(max-width: 854px) 100vw, 854px\" \/><\/a><\/p>\n<p>Sie k\u00f6nnen sich dann das Ergebnis ausgeben lassen, in einer <em>Variablen<\/em> ablegen oder \u00fcber <em>Piping<\/em> weiterverarbeiten. Achten Sie dabei darauf, dass diese Ausgabe nur einmal m\u00f6glich ist. Es sei denn, Sie verwenden den Parameter <em>Keep<\/em>. Ohne diesen Parameter wird das Ergebnis nach der Ausgabe gel\u00f6scht.<\/p>\n<p><a href=\"https:\/\/www.langlitz-it.de\/wp-content\/uploads\/2017\/06\/Jobs3.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1944\" src=\"https:\/\/www.langlitz-it.de\/wp-content\/uploads\/2017\/06\/Jobs3.jpg\" alt=\"\" width=\"486\" height=\"208\" srcset=\"https:\/\/www.langlitz-it.de\/wp-content\/uploads\/2017\/06\/Jobs3.jpg 486w, https:\/\/www.langlitz-it.de\/wp-content\/uploads\/2017\/06\/Jobs3-300x128.jpg 300w\" sizes=\"(max-width: 486px) 100vw, 486px\" \/><\/a><\/p>\n<hr \/>\n<p>Ein weiteres Anwendungsbeispiel ist die parallele Verarbeitung.<\/p>\n<p>Nehmen wir an, Sie m\u00f6chten einen <em>IP<\/em> Bereich nach verf\u00fcgbaren Adressen per <em>Ping<\/em> scannen. Wir sprechen vom Bereich <em>192.168.0.110 -192.168.0.120<\/em>. Das nimmt einige Zeit in Anspruch, weil jeder Test einzeln nacheinander durchgef\u00fchrt wird.<\/p>\n<p><a href=\"https:\/\/www.langlitz-it.de\/wp-content\/uploads\/2017\/06\/Jobs4.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1947\" src=\"https:\/\/www.langlitz-it.de\/wp-content\/uploads\/2017\/06\/Jobs4.jpg\" alt=\"\" width=\"678\" height=\"745\" srcset=\"https:\/\/www.langlitz-it.de\/wp-content\/uploads\/2017\/06\/Jobs4.jpg 678w, https:\/\/www.langlitz-it.de\/wp-content\/uploads\/2017\/06\/Jobs4-273x300.jpg 273w\" sizes=\"(max-width: 678px) 100vw, 678px\" \/><\/a><\/p>\n<p>Wenn Sie die gleiche Aufgabe als <em>Job<\/em> definieren, werden alle Tests parallel durchgef\u00fchrt und ben\u00f6tigen so nur einen Bruchteil der Zeit. Im Bespiel <em>Test-Connection<\/em> gibt es schon den Parameter <em>AsJob<\/em>. Damit wird das <em>CMDLet<\/em> auch ohne den Aufruf <em>Start-Job<\/em> direkt als <em>Job<\/em> gestartet. Es gibt eine Reihe von <em>CMDLets<\/em>, die diesen Prameter unterst\u00fctzen. Eine Liste erhalten sie \u00fcber<\/p>\n<p><em>Get-Help * -Parameter AsJob<\/em><\/p>\n<p>Im konkreten Beispiel l\u00e4sst sich die Zeitersparnis genau berechnen. Der <em>Test-Connection<\/em> Aufruf hat einen <em>Timeout<\/em> von 4 Sekunden. Wenn also alle\u00a0<em>IPs<\/em> nacheinander getestet werden, ergibt sich so f\u00fcr alle nicht erreichbaren Adressen X eine Zeitdauer von X * 4 Sekunden + der Zeit f\u00fcr die erreichbaren Adressen. Wohingegen bei der Parallelverarbeitung die ganze Verarbeitung nur maximal 4 Sekunden dauert.<\/p>\n<p><a href=\"https:\/\/www.langlitz-it.de\/wp-content\/uploads\/2017\/06\/Jobs5.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1948\" src=\"https:\/\/www.langlitz-it.de\/wp-content\/uploads\/2017\/06\/Jobs5.jpg\" alt=\"\" width=\"821\" height=\"422\" srcset=\"https:\/\/www.langlitz-it.de\/wp-content\/uploads\/2017\/06\/Jobs5.jpg 821w, https:\/\/www.langlitz-it.de\/wp-content\/uploads\/2017\/06\/Jobs5-300x154.jpg 300w, https:\/\/www.langlitz-it.de\/wp-content\/uploads\/2017\/06\/Jobs5-768x395.jpg 768w\" sizes=\"(max-width: 821px) 100vw, 821px\" \/><\/a><\/p>\n<p>Achten Sie in dem Beispiel darauf, dass die Ausgabe lange dauern kann, wenn Sie nicht per <em>select<\/em> die Einschr\u00e4nkung auf die Eigenschaften <em>Address<\/em> und <em>Responsetime<\/em> \u00a0vornehmen. Das hat nichts mit dem Job zu tun, sondern liegt darin begr\u00fcndet, dass die Objekte beim Anzeigen den Computernamen aufl\u00f6sen und damit erst den zust\u00e4ndigen <em>DNS<\/em> Server befragen.<\/p>\n<p>Sie k\u00f6nnen einzelne oder alle Jobs jederzeit mit dem <em>CMDLet Remove-Job<\/em> l\u00f6schen. Sollte ein <em>Job<\/em> noch nicht abgearbeitet sein, kann dieser mit dem Parameter <em>Force<\/em> zum Abbruch gezwungen werden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Normalfall werden Befehle von der PowerShell (und auch sonst im Scripting) sequentiell abgearbeitet. Das bedeutet ein Befehl nach dem anderen. Je nachdem, wie lange eine Aufgabe dauert, kann das zu immensen Wartezeiten f\u00fchren. Zus\u00e4tzlich ist in dieser Wartezeit ist &hellip; <a href=\"https:\/\/www.langlitz-it.de\/?p=1937\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[712,715,717,714,713,718,716],"_links":{"self":[{"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=\/wp\/v2\/posts\/1937"}],"collection":[{"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1937"}],"version-history":[{"count":15,"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=\/wp\/v2\/posts\/1937\/revisions"}],"predecessor-version":[{"id":1993,"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=\/wp\/v2\/posts\/1937\/revisions\/1993"}],"wp:attachment":[{"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1937"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1937"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1937"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}