{"id":2443,"date":"2019-05-23T18:24:39","date_gmt":"2019-05-23T16:24:39","guid":{"rendered":"https:\/\/www.langlitz-it.de\/?p=2443"},"modified":"2019-07-21T17:41:22","modified_gmt":"2019-07-21T15:41:22","slug":"powershell-try-catch-finally-errorhandling","status":"publish","type":"post","link":"https:\/\/www.langlitz-it.de\/?p=2443","title":{"rendered":"PowerShell &#8211; try &#8230; catch &#8230; finally &#8211; Errorhandling"},"content":{"rendered":"<p>Mit der &#8220;try &#8230; catch&#8221; Funktion steht ein Hilfsmittel zur vern\u00fcnftigen Fehlerbehandlung zur Verf\u00fcgung. <\/p>\n<p><strong>Grundfunktion:<\/strong><\/p>\n<p><em>try          {<br \/>             Mach irgendwas<br \/>         }<br \/> catch     {<br \/>             Mach was anderes im Fehlerfall<br \/>         }<br \/> finally    {   <br \/>             Mach noch was anderes in beiden F\u00e4llen<br \/>         }<\/em><\/p>\n<p><strong>Ein Anwendungsbeispiel:<\/strong><\/p>\n<p>Sie haben eine Liste mit Anmeldenamen und m\u00f6chsten wissen, ob die zugeh\u00f6rigen AD Konten noch existieren:<\/p>\n<p><em>ForEach ($user in $users) {<br \/>                             Try {<br \/>                                     Get-AdUser $user | Out-Null<br \/>                                     Write-Host &#8220;$User existiert&#8221;<br \/>                                 }<br \/>                             Catch   {<br \/>                                         Write-Host &#8220;$User existiert nicht&#8221;<br \/>                                     }<br \/>                             }<\/em><\/p>\n<p><strong>Stolpersteine:<\/strong><\/p>\n<p>Da &#8220;catch&#8221; ausschlie\u00dflich sogenannte &#8220;terminating errors&#8221; interpretieren kann, muss die unter &#8220;try&#8221; verwendete Funktion im Fehlerfalle auch einen solchen zur\u00fcckliefern. Das ist aber nicht immer der Fall. Testen Sie das gleiche Beispiel mal mit dem Get-Mailbox CMDLet. <\/p>\n<p><em>ForEach ($user in $users) {<br \/>                             Try {<br \/>                                     Get-Mailbox $user | Out-Null<br \/>                                     Write-Host &#8220;$User existiert&#8221;<br \/>                                 }<br \/>                             Catch   {<br \/>                                         Write-Host &#8220;$User existiert nicht&#8221;<br \/>                                     }<br \/>                             }<\/em><\/p>\n<p>Das wird nicht funktionieren, weil eben Get-Mailbox keinen &#8220;terminating error&#8221; zur\u00fcckliefert. Get-Mailbox dazu zu bringen das zu tun, ist mit der Option ErrorAction machbar.<\/p>\n<p><em>ForEach ($user in $users) {<br \/>                             Try {<br \/>                                     Get-Mailbox $user <strong>-ErrorAction Stop<\/strong>| Out-Null<br \/>                                     Write-Host &#8220;$User existiert&#8221;<br \/>                                 }<br \/>                             Catch   {<br \/>                                         Write-Host &#8220;$User existiert nicht&#8221;<br \/>                                     }<br \/>                             }<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit der &#8220;try &#8230; catch&#8221; Funktion steht ein Hilfsmittel zur vern\u00fcnftigen Fehlerbehandlung zur Verf\u00fcgung. Grundfunktion: try { Mach irgendwas } catch { Mach was anderes im Fehlerfall } finally { Mach noch was anderes in beiden F\u00e4llen } Ein Anwendungsbeispiel: &hellip; <a href=\"https:\/\/www.langlitz-it.de\/?p=2443\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[774,776,553,777,775],"_links":{"self":[{"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=\/wp\/v2\/posts\/2443"}],"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=2443"}],"version-history":[{"count":4,"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=\/wp\/v2\/posts\/2443\/revisions"}],"predecessor-version":[{"id":2448,"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=\/wp\/v2\/posts\/2443\/revisions\/2448"}],"wp:attachment":[{"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2443"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2443"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.langlitz-it.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2443"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}