==> Variable must be of type "Object".:

  • Hey,

    benutze diese funktion um auf einem remote rechner die Admin user auszulesen aber kriege bei einigen rechner folgenden fehler

    ==> Variable must be of type "Object".:
    $colItems = $objWMIService.ExecQuery("Select SID from Win32_Group WHERE Domain='" & $srv & "'", "WQL", 0x30)
    $colItems = $objWMIService^ ERROR

    wie kann ich das abfangen?

    so das mein script nicht abstürtzt oder besser verhindern:

    [autoit][/autoit][autoit][/autoit][autoit]

    Func Membership_Administrators_Local($srv)
    If StringUpper($srv) = StringUpper("Localhost") Then $srv = @ComputerName
    Local $function_name = "Members"
    Local $LM_members, $x, $LM_LocalGroup_Name, $type, $colItems2, $LM_local_user, $y, $line, $TimeStamp
    Local $filename_ms = $function_name & "_" & $srv
    Local $filename_error_current = $function_name & "_" & $srv & "_error.log"
    $LM_LocalGroup_Name = "Administrators"
    $colItems = $objWMIService.ExecQuery("Select SID from Win32_Group WHERE Domain='" & $srv & "'", "WQL", 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    If StringUpper($objItem.SID) = StringUpper("S-1-5-32-544") Then $LM_LocalGroup_Name = $objItem.Name
    Next
    EndIf
    $type = ""
    $LM_local_user = ""
    $colItems = $objWMIService.ExecQuery("Select * from Win32_GroupUser Where GroupComponent=""Win32_Group.Domain='" & $srv & "',Name='" & $LM_LocalGroup_Name & "'""", "WQL", 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    If $objItem.PartComponent <> "" Then
    $x = StringSplit($objItem.PartComponent, """")
    $type = StringMid($x[1], StringInStr($x[1], ":Win32_") + 7, (StringInStr($x[1], ".") - (StringInStr($x[1], ":Win32_") + 7)))
    $LM_members &= $srv & "|" & $LM_LocalGroup_Name & "|" & $type & "|" & $x[2] & "\" & $x[4] & "|" & @CRLF
    GUICtrlCreateListViewItem($srv & "|" & $LM_LocalGroup_Name & "|" & $type & "|" & $x[2] & "\" & $x[4] & "|", $Liste)

    [/autoit][autoit][/autoit][autoit]

    EndIf
    Next
    EndIf
    ConsoleWrite($LM_members)

    [/autoit][autoit][/autoit][autoit]

    EndFunc ;==>Membership_Administrators_Local

    [/autoit]

    Danke
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

    Einmal editiert, zuletzt von subzero007 (16. Dezember 2009 um 10:50)

  • nimmst du es mir übel wenn ich es nicht verstanden habe??

    [autoit]

    If IsObj($objWMIService) Then return

    [/autoit]

    Das ist falsch... was muss ich tun

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Die Sache ist leider nicht immer so einfach -> [ gelöst ] ObjGet() und IsObj()

    Ich musste ein Error Handler einbauen, damit das Skript erstmal weiterläuft!

    [autoit]


    ...
    Global $oError = ObjEvent("AutoIt.Error", "_ErrFunc")
    ...
    Func _ErrFunc()
    Return
    EndFunc
    ---

    [/autoit]

    Gru,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • habe immer noch den gleichen fehler habe es so abgeändert:

    [autoit]

    Func Membership_Administrators_Local($srv)
    If StringUpper($srv) = StringUpper("Localhost") Then $srv = @ComputerName
    Local $function_name = "Members"
    Local $LM_members, $x, $LM_LocalGroup_Name, $type, $colItems2, $LM_local_user, $y, $line, $TimeStamp
    Local $filename_ms = $function_name & "_" & $srv
    Local $filename_error_current = $function_name & "_" & $srv & "_error.log"
    $LM_LocalGroup_Name = "Administrators"
    $colItems = $objWMIService.ExecQuery("Select SID from Win32_Group WHERE Domain='" & $srv & "'", "WQL", 0x30)
    ;If IsObj($colItems) Then
    If Not IsObj($objWMIService) Then Return

    [/autoit][autoit][/autoit][autoit]

    For $objItem In $colItems
    If StringUpper($objItem.SID) = StringUpper("S-1-5-32-544") Then $LM_LocalGroup_Name = $objItem.Name
    Next
    ;EndIf
    $type = ""
    $LM_local_user = ""
    $colItems = $objWMIService.ExecQuery("Select * from Win32_GroupUser Where GroupComponent=""Win32_Group.Domain='" & $srv & "',Name='" & $LM_LocalGroup_Name & "'""", "WQL", 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    If $objItem.PartComponent <> "" Then
    $x = StringSplit($objItem.PartComponent, """")
    $type = StringMid($x[1], StringInStr($x[1], ":Win32_") + 7, (StringInStr($x[1], ".") - (StringInStr($x[1], ":Win32_") + 7)))
    $LM_members &= $srv & "|" & $LM_LocalGroup_Name & "|" & $type & "|" & $x[2] & "\" & $x[4] & "|" & @CRLF
    GUICtrlCreateListViewItem($srv & "|" & $LM_LocalGroup_Name & "|" & $type & "|" & $x[2] & "\" & $x[4] & "|", $Liste)
    EndIf
    Next
    EndIf
    ConsoleWrite($LM_members)

    [/autoit][autoit][/autoit][autoit]

    EndFunc ;==>Membership_Administrators_Local

    [/autoit]

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hi,

    wo und wie wird Dein $objWMIService erzeugt, bzw. deklariert?
    Dort dürfte der Hund begraben liegen.

    ;-))
    Stefan

  • Das habe ich schon verstanden aber wie fange ich den fehler ab ?

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Der Code kommt mir bekannt vor ;)


    Probier's mal so!

    Spoiler anzeigen
    [autoit]


    ;Coded by UEZ 2009
    #AutoIt3Wrapper_Change2CUI=y
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_UseX64=n
    #include <array.au3>
    Global $server = "localhost"
    If $CmdLine[0] > 0 Then $server = $CmdLine[1]

    [/autoit] [autoit][/autoit] [autoit]

    $objWMIService = ObjGet("winmgmts:{impersonationLevel = impersonate}!\\" & $server & "\root\cimv2")

    [/autoit] [autoit][/autoit] [autoit]

    Membership_Administrators_Local($server)

    [/autoit] [autoit][/autoit] [autoit]

    Func Membership_Administrators_Local($srv)
    If StringUpper($srv) = StringUpper("Localhost") Then $srv = @ComputerName
    Local $function_name = "Members"
    Local $LM_members, $x, $LM_LocalGroup_Name, $type, $colItems2, $LM_local_user, $y, $line, $TimeStamp
    Local $filename_ms = $function_name & "_" & $srv
    Local $filename_error_current = $function_name & "_" & $srv & "_error.log"
    $LM_LocalGroup_Name = "Administrators"
    $colItems = $objWMIService.ExecQuery("Select SID from Win32_Group WHERE Domain='" & $srv & "'", "WQL", 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    If StringUpper($objItem.SID) = StringUpper("S-1-5-32-544") Then $LM_LocalGroup_Name = $objItem.Name
    Next
    EndIf
    $type = ""
    $LM_local_user = ""
    $colItems = $objWMIService.ExecQuery("Select * from Win32_GroupUser Where GroupComponent=""Win32_Group.Domain='" & $srv & "',Name='" & $LM_LocalGroup_Name & "'""", "WQL", 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    If $objItem.PartComponent <> "" Then
    $x = StringSplit($objItem.PartComponent, """")
    $type = StringMid($x[1], StringInStr($x[1], ":Win32_") + 7, (StringInStr($x[1], ".") - (StringInStr($x[1], ":Win32_") + 7)))
    $LM_members &= $srv & ";" & $LM_LocalGroup_Name & ";" & $type & ";" & $x[2] & "\" & $x[4] & ";" & @CRLF
    EndIf
    Next
    EndIf
    ConsoleWrite($LM_members)
    EndFunc ;==>Membership_Administrators_Local

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Hi,
    hier hast du ein Errorhaendler aus der Autoithilfe, der verhindert zumindest den Absturz deines Skriptes.

    [autoit]


    $oMyError = ObjEvent("AutoIt.Error","MyErrFunc") ; Implementiert einen eigenen Error-Handler

    [/autoit][autoit][/autoit][autoit]

    ; Erzeugt absichtlich einen Fehler (Objekt existiert nicht)
    $oIE = ObjCreate("InternetExplorer.Application")
    $oIE.visible = 1
    $oIE.bogus
    if @error then Msgbox(0,"","Die vorherige Zeile lieferte einen Fehler!")

    [/autoit][autoit][/autoit][autoit]

    Exit

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ; Das ist unser eigener Error-Handler
    Func MyErrFunc()
    $HexNumber=hex($oMyError.number,8)
    Msgbox(0,"","Ein COM-Fehler wurde abgefangen!" & @CRLF & _
    "Fehlernummer: " & $HexNumber & @CRLF & _
    "WinDescription: " & $oMyError.windescription )

    [/autoit][autoit][/autoit][autoit]

    SetError(1) ; Ein Rückgabewert zum Überprüfen, wen die Funktion zurückgekehrt ist
    Endfunc

    [/autoit]

    - MfG OpaEd