Nabend,
ich steh seit paar Stunden aufm Schlauch und weiß nicht wo es hängt, zum Ablauf:
1. Ich lese alle Services im "automatisch Startmode" welche "nicht Running" sind aus und speichere diese in $temp array
2. Ich stelle eine $excluded array bereit mit Services die excluded werden sollen.
Quasi möchte ich Alle Services die nicht Running sind mit denen aus $excluded Liste vergleichen und diese dann in $temp entfernen, damit ich nur Services habe, die im automatisch startmode stehen und nicht running sind und meine "blacklist" beachtet wurde.
Leider hauts beim Arraydelete immer hin. Das Script crashed einfach.
Wenn 4 Services nicht laufen, 3 in der Blacklist sind. Werden 3 abgezogen und er sagt mir "jap hier der Service läuft nicht , soll aber laufen".
Nehme ich aber an, dass alle Services laufen, die Laufen sollen. crashed das Ding.
Sprich 4 nicht running gefunden, 4 auf der blacklist. $temp = leer = crash.
Spoiler anzeigen
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=serviceadv.exe
#AutoIt3Wrapper_UseUpx=y
#AutoIt3Wrapper_Change2CUI=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <File.au3>
Global $excludes, $temp[0], $exit[0]
_FileReadToArray(@ScriptDir & "\dependencies\excluded_services.txt", $excludes, 1) ;array count first element
$objWMIService = ObjGet('winmgmts:\\.\root\cimv2')
$colItems = $objWMIService.ExecQuery("Select * From Win32_Service WHERE Startmode='auto'") ;alle Services im Automatisch Mode
If IsObj($colItems) Then
For $objItem In $colItems
If $objItem.State <> "Running" Then ;Wenn automatisch Mode und nicht Running
_ArrayAdd($temp, $objItem.Displayname) ;safe in Array $temp
Else
_ArrayAdd($exit, $objItem.Displayname) ; alle anderen in $exit
EndIf
Next
EndIf
For $s = UBound($temp) - 1 To 0 Step -1
For $x = UBound($excludes) -1 To 0 Step -1
If $temp[$s] = $excludes[$x] Then ;wenn array $temp in $excluded liste dann
_ArrayDelete($temp, $s) ; lösche element ; hier crashed es wenn die excludes komplett in $temp enthalten sind. Also das array komplett geleert wird
EndIf
Next
Next
For $j = 0 To UBound($temp) - 1
$code = "2"
ConsoleWrite($code & "|" & $temp[$j] & " ist down !" & @LF)
If $j == UBound($temp) - 1 Then
Exit ($code)
EndIf
Next
$allitems = UBound($exit)
If $temp = @error Then
$code = 0
ConsoleWrite($code & "|Alle " & $allitems & " Services im automatisch Status laufen!" & @LF)
Exit ($code)
EndIf
Alles anzeigen
Vielen Dank