Kuddel071089 9 Geschrieben 19. Oktober 2020 Autor Melden Teilen Geschrieben 19. Oktober 2020 vor 8 Minuten schrieb testperson: Hi, wäre es nicht besser zu klären, warum manche Server "in ein Timeout laufen" und dann die Ursache zu beheben? Wenn die Server während der Abfrage booten oder "geplant" nicht erreichbar sind, würde ich vorher einfach mit Test-(Net)Connection auf Erreichbarkeit prüfen. BTW.: Je nachdem an welcher Stelle das Problem auftritt, wäre ein Error-Handling noch ein Ansatz. Dann könntest du im Bericht direkt noch auf die fehlerhaften Server hinweisen. Gruß Jan Einen Check einzubauen, dass Server XY nicht ebgefragt werden kann, wäre natürlich noch besser. Dann wüsste ich, dass ich mir den Server anschauen muss und würde die Abfrage nach den ausstehenden Updates gar nicht erst starten. Jetzt die Frage ? Wie baue ich meinen Befehl so um, dass er nur ausgeführt wird, wenn ein sinnvolles ergebnis zurückgeliefert wird. Test-Connection ist bereits in verwendung Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 19. Oktober 2020 Melden Teilen Geschrieben 19. Oktober 2020 vor 7 Minuten schrieb Kuddel071089: Test-Connection ist bereits in verwendung .... dann ist scheinbar die Erreichbarkeit der Server nicht das Problem ... Zitieren Link zu diesem Kommentar
Kuddel071089 9 Geschrieben 19. Oktober 2020 Autor Melden Teilen Geschrieben 19. Oktober 2020 Dann werde ich mal probieren die Abfrage im Skript als Job (start-job) zu starten und dann mit wait-job zu arbeiten Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 19. Oktober 2020 Melden Teilen Geschrieben 19. Oktober 2020 Mit Wait-Job hast du keinen Timeout. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 19. Oktober 2020 Melden Teilen Geschrieben 19. Oktober 2020 Gerade eben schrieb Kuddel071089: Dann werde ich mal probieren die Abfrage im Skript als Job (start-job) zu starten und dann mit wait-job zu arbeiten Ich würde in der Schleife eher mit Get-Job arbeiten und den Status auswerten. Und wenn er in der von Dir definierten Zeit nicht abgeschlossen wird, kannst Du die Schleife abbrechen/beenden. Wait-Job blockiert die Konsole ja so lange bis entweder der Job oder die Jobs abgeschlossen sind oder bis der Timeout abgelaufen ist. Zitieren Link zu diesem Kommentar
Kuddel071089 9 Geschrieben 19. Oktober 2020 Autor Melden Teilen Geschrieben 19. Oktober 2020 Gerade eben schrieb BOfH_666: Ich würde in der Schleife eher mit Get-Job arbeiten und den Status auswerten. Und wenn er in der von Dir definierten Zeit nicht abgeschlossen wird, kannst Du die Schleife abbrechen/beenden. Wait-Job blockiert die Konsole ja so lange bis entweder der Job oder die Jobs abgeschlossen sind oder bis der Timeout abgelaufen ist. ich merke, in start-job muss ich mich noch ein wenig einlesen ^^ Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 19. Oktober 2020 Melden Teilen Geschrieben 19. Oktober 2020 Gerade eben schrieb Dukel: Mit Wait-Job hast du keinen Timeout. Hmmmm ... kann man so nicht sagen, glaube ich .... siehe Doku: Wait-Job .... der Parameter heißt sogar so Zitieren Link zu diesem Kommentar
Sunny61 807 Geschrieben 19. Oktober 2020 Melden Teilen Geschrieben 19. Oktober 2020 vor 26 Minuten schrieb BOfH_666: Nee ... so meinte er das nicht. ... es ging mir - wie auch Dukel vorschlug - um PS-Jobs. Danke für die Korrektur. ;) vor 37 Minuten schrieb Kuddel071089: in dem skript werden dann aus der AD alle Windows Server abgefragt. Stand heute: 580 Server Wie wäre es das ganze aufzuteilen? Entweder immer 10er oder 50igerweise die Server nehmen und abfragen, oder, falls die Server in OUs abgelegt sind, immer nur OUs abfragen und den nächsten Job erst starten, wenn der vorherige abgeschlossen ist. Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 19. Oktober 2020 Melden Teilen Geschrieben 19. Oktober 2020 Stimmt. Man kann im Script warten oder mit einem Timeout bei Get-Job warten. Letzteres wäre das Script fertig, wenn alle durch sind und nicht erst wenn das Script fertig ist. Zitieren Link zu diesem Kommentar
testperson 1.707 Geschrieben 19. Oktober 2020 Melden Teilen Geschrieben 19. Oktober 2020 (bearbeitet) vor 27 Minuten schrieb Kuddel071089: Test-Connection ist bereits in verwendung Auf was testest du denn die Verbindung bzw. über welches Protokoll verbindest du dich denn später mit dem Ziel-Server? Evtl. solltest du dann auch bspw. mit Test-NetConnection -ComputerName XYZ -CommonTCPPort WINRM die Verbindung über das entsprechende Protokoll testen. Wenn die Verbindung steht und später in deinem Scriptblock etwas in einen Timeout läuft, wäre dort ggfs. ein Error-Handling (Try-Catch) hilfreich. bearbeitet 19. Oktober 2020 von testperson Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 19. Oktober 2020 Melden Teilen Geschrieben 19. Oktober 2020 vor 2 Minuten schrieb Sunny61: Entweder immer 10er oder 50igerweise die Server nehmen und abfragen,... Ja eben .... um wieviele Server geht es eigentlich? Meine Empfehlung wär ja dann "ein Job pro Server". Zitieren Link zu diesem Kommentar
Kuddel071089 9 Geschrieben 19. Oktober 2020 Autor Melden Teilen Geschrieben 19. Oktober 2020 Der erste Test läuft #Abfrage der austehenden Updates $job = Start-Job -ScriptBlock { Invoke-Command -Computer $using:servername -ScriptBlock { $computer = $args[0] # Abfrage mit COM-Objekt $Searcher = New-Object -ComObject Microsoft.Update.Searcher $Criteria = "IsInstalled=0 and Type='Software'" $SearchResult = $Searcher.Search($Criteria).Updates $SearchResult.Count } } #Timeout von 5 Minuten Wait-Job $job -Timeout 300 | Out-Null $updates = Receive-Job -Job $job Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 19. Oktober 2020 Melden Teilen Geschrieben 19. Oktober 2020 Kleiner Tipp. Invoke-Command kennt -AsJob. Zitieren Link zu diesem Kommentar
Kuddel071089 9 Geschrieben 19. Oktober 2020 Autor Melden Teilen Geschrieben 19. Oktober 2020 (bearbeitet) vor 13 Minuten schrieb Dukel: Kleiner Tipp. Invoke-Command kennt -AsJob. dann müsste das so aussehen ? #Abfrage der austehenden Updates $job = Invoke-Command -Computer $using:servername -ScriptBlock { $computer = $args[0] # Abfrage mit COM-Objekt $Searcher = New-Object -ComObject Microsoft.Update.Searcher $Criteria = "IsInstalled=0 and Type='Software'" $SearchResult = $Searcher.Search($Criteria).Updates $SearchResult.Count } -AsJob #Timeout von 5 Minuten Wait-Job $job -Timeout 300 | Out-Null $updates = Receive-Job -Job $job bearbeitet 19. Oktober 2020 von Kuddel071089 Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 19. Oktober 2020 Melden Teilen Geschrieben 19. Oktober 2020 Teste es doch. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.