WMI Abfragen mit Variablen

  • Verzweifel grad am Problem Infos aus der WMI abzufragen. Um es zu verdeutlichen:

    So funktioniert es:

    local $objWMI = ObjGet("winmgmts:\\" & $Computername&"\root\CIMV2")
    Dim $wbemFlagReturnImmediately = 0x10
    Dim $wbemFlagForwardOnly = 0x20
    local $objItems = $objWMI.ExecQuery("SELECT * FROM " & $AuswahlUser,"WQL",$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($objItems) Then
    For $objItem In $objItems
    $Info=$objItem.domain
    Next
    EndIf

    Ich würde aber gern an der fett-gedruckten Stelle mit einer Variable arbeiten, also z.B.:

    $Bereich="domain"
    $Info=$objItem.get ($Bereich)

    Und an dieser Stelle scheitere ich seit 2 Tagen :-/ Hab´s schon mit .get, .properties, .item, .value probiert, aber leider bekomme ich da gar nichts bei als Ergebnis raus.

    Wäre sehr erfreut, wenn mir jemand da schnell die Lösung verraten könnte.

    Einmal editiert, zuletzt von Cangoo (16. November 2010 um 09:42)

  • Hier einmal ein Beispiel :)

    Spoiler anzeigen
    [autoit]

    #cs
    This UDF is made for using the Windows Management Instrumentation in AutoIt V.3
    The content of this work is licensed under Creative Commons license.
    Der Inhalt dieses Werkes ist lizensiert unter der Creative Commons Lizenz.
    #ce

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

    ; Last Change 18.05.2010
    ; Infos und Beispiele sind unter http://mahagon-autoit.spaces.live.com/?_c11_BlogPart…UserAccount.au3 zu finden

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

    ;BEISPIEL _______________________________________________________
    $aReturn = _WinWMI_UserAccount_GetInformation("Name,Domain")
    For $i = 0 To UBound($aReturn) - 1
    ConsoleWrite("Benutzername: " & $aReturn[$i][0] & @CRLF & "Domain: " & $aReturn[$i][1] & @CRLF & @CRLF)
    Next

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

    ;END BEISPIEL ___________________________________________________

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

    ; #INDEX# =========================================================================================
    ; Win32_UserAccount Functions
    ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ; _WinWMI_UserAccount_GetInformation()
    ; _WinWMI_UserAccount_SetName()
    ; _WinWMI_UserAccount_SetDisabled()
    ; _WinWMI_UserAccount_SetFullname()
    ; _WinWMI_UserAccount_SetLockout()
    ; _WinWMI_UserAccount_SetPasswordChangeable()
    ; _WinWMI_UserAccount_SetPasswordExpires()
    ; _WinWMI_UserAccount_SetPasswordRequired()
    ; =================================================================================================

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

    ; #FUNCTION# ======================================================================================
    ; Name .............: _WinWMI_UserAccount_GetInformation()
    ; Description ......: Returns requested Userinformation in a 2D Array
    ; Syntax ...........: _WinWMI_UserAccount_GetInformation(Const[ $sFields = "Name",Const[ $sUser = "%",Const[ $sComputer = "127.0.0.1"]]])
    ; Parameters .......: Const $sFields - [optional] Userinformation seperated by comma (default:"Name")
    ; $sUser - [optional] Users seperated by comma (default:"%")
    ; Const $sComputer - [optional] Target Computer (default:"127.0.0.1")
    ; Return values ....: Success - requested Userinformation in a 2D Array
    ; Failure - 0 Sets @error to:
    ; |-1 Connection failed
    ; |-2 WMI Class not found/no access
    ; |-3 No matches found
    ; Author ...........: Mahagon
    ; Link .............: http://msdn.microsoft.com/en-us/library/…7(v=VS.85).aspx
    ; Link (German).....: http://www.scriptinternals.de/new/ger/suppor…UserAccount.htm
    ; Au3.api extension.: _WinWMI_UserAccount_GetInformation( [ "Fieldnames" [, "Username" [, "Target Computer"]]] ) Returns requested Userinformation in a 2D Array ( Requires: #include <WinWMI_UserAccount.au3> )
    ; =================================================================================================

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

    Func _WinWMI_UserAccount_GetInformation(Const $sFields = "Name", $sUser = "%", Const $sComputer = "127.0.0.1")
    $oWMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $sComputer & "\root\CIMV2")
    If IsObj($oWMI) = 0 Then Return SetError(-1, @error, 0)
    $sUser = StringReplace($sUser, ",", "' Or Name LIKE '")
    $oList = $oWMI.ExecQuery("SELECT " & $sFields & " FROM Win32_UserAccount WHERE Name LIKE '" & $sUser & "'", "WQL")
    If IsObj($oList) = 0 Then Return SetError(-2, @error, 0)
    $aFields = StringSplit($sFields, ",", 2)
    If $oList.Count = 0 Then Return SetError(-3, @error, 0)
    Local $aReturn[$oList.Count][UBound($aFields)]
    $iCount = 0
    For $oItem In $oList
    With $oItem
    For $iFields = 0 To UBound($aFields) - 1
    Switch $aFields[$iFields]
    Case "AccountType"
    $aReturn[$iCount][$iFields] = .AccountType
    Case "Caption"
    $aReturn[$iCount][$iFields] = .Caption
    Case "Description"
    $aReturn[$iCount][$iFields] = .Description
    Case "Disabled"
    $aReturn[$iCount][$iFields] = .Disabled
    Case "Domain"
    $aReturn[$iCount][$iFields] = .Domain
    Case "FullName"
    $aReturn[$iCount][$iFields] = .FullName
    Case "InstallDate"
    $aReturn[$iCount][$iFields] = .InstallDate
    Case "LocalAccount"
    $aReturn[$iCount][$iFields] = .LocalAccount
    Case "Lockout"
    $aReturn[$iCount][$iFields] = .Lockout
    Case "Name"
    $aReturn[$iCount][$iFields] = .Name
    Case "PasswordChangeable"
    $aReturn[$iCount][$iFields] = .PasswordChangeable
    Case "PasswordExpires"
    $aReturn[$iCount][$iFields] = .PasswordExpires
    Case "PasswordRequired"
    $aReturn[$iCount][$iFields] = .PasswordRequired
    Case "SID"
    $aReturn[$iCount][$iFields] = .SID
    Case "SIDType"
    $aReturn[$iCount][$iFields] = .SIDType
    Case "Status"
    $aReturn[$iCount][$iFields] = .Status
    EndSwitch
    Next
    EndWith
    $iCount += 1
    Next
    Return $aReturn
    EndFunc ;==>_WinWMI_UserAccount_GetInformation

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

    ; #FUNCTION# ======================================================================================
    ; Name .............: _WinWMI_UserAccount_SetName()
    ; Description ......: Renames a User
    ; Syntax ...........: _WinWMI_UserAccount_SetName(Const $sCurrentName ,Const $sNewName , Const[ $sComputer = "127.0.0.1"])
    ; Parameters .......: Const $sCurrentName - Target User
    ; Const $sNewName - New Name
    ; Const $sComputer - [optional] Target Computer (default:"127.0.0.1")
    ; Return values ....: Success - 1
    ; Failure - 0 Sets @error to:
    ; |-1 Connection failed
    ; |-2 WMI Class not found/no access
    ; |-3 No matches or more than one found
    ; |-4 Name is to long
    ; |-5 Renaming failed
    ; Author ...........: Mahagon
    ; Link .............: http://msdn.microsoft.com/en-us/library/…2(v=VS.85).aspx
    ; Link (German).....: http://www.scriptinternals.de/new/ger/defaul…n32_UserAccount
    ; Au3.api extension.: _WinWMI_UserAccount_SetName( "Current Username" , " New Username" [, "Target Computer"] ) Renames a User ( Requires: #include <WinWMI_UserAccount.au3> )
    ; =================================================================================================

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

    Func _WinWMI_UserAccount_SetName(Const $sCurrentName, Const $sNewName, Const $sComputer = "127.0.0.1")
    $oWMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $sComputer & "\root\CIMV2")
    If IsObj($oWMI) = 0 Then Return SetError(-1, @error, 0)
    $oList = $oWMI.ExecQuery("SELECT * FROM Win32_UserAccount WHERE Name = '" & $sCurrentName & "'", "WQL")
    If IsObj($oList) = 0 Then Return SetError(-2, @error, 0)
    If $oList.Count <> 1 Then Return SetError(-3, @error, 0)
    For $oItem In $oList
    If StringLen($sNewName) > 15 Then Return SetError(-4, @error, 0)
    $errorlevel = $oItem.rename($sNewName)
    If $errorlevel <> 0 Then Return SetError(-5, @extended, $errorlevel)
    Next
    Return 1
    EndFunc ;==>_WinWMI_UserAccount_SetName

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

    ; #FUNCTION# ======================================================================================
    ; Name .............: _WinWMI_UserAccount_SetDisabled()
    ; Description ......: Disables/enables an Useraccount
    ; Syntax ...........: _WinWMI_UserAccount_SetDisabled(Const $sUsername [, Const $bDisable = True, Const[ $sComputer = "127.0.0.1"]]])
    ; Parameters .......: Const $sUsername - Target User
    ; Const $bDisable - [optional] Enable = False, Disable = True (default:True)
    ; Const $sComputer - [optional] Target Computer (default:"127.0.0.1")
    ; Return values ....: Success - 1
    ; Failure - 0 Sets @error to:
    ; |-1 Connection failed
    ; |-2 WMI Class not found/no access
    ; |-3 No matches or more than one found
    ; |-4 Enabling/disabling failed
    ; Author ...........: Mahagon
    ; Link .............: http://msdn.microsoft.com/en-us/library/…7(v=VS.85).aspx
    ; Link (German).....: http://www.scriptinternals.de/new/ger/suppor…UserAccount.htm
    ; Au3.api extension.: _WinWMI_UserAccount_SetDisabled( "Username" [, "True/False" [, "Target Computer"]] ) Enables/disables an Useraccount ( Requires: #include <WinWMI_UserAccount.au3> )
    ; =================================================================================================

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

    Func _WinWMI_UserAccount_SetDisabled(Const $sUsername, Const $bDisable = True, Const $sComputer = "127.0.0.1")
    $oWMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $sComputer & "\root\CIMV2")
    If IsObj($oWMI) = 0 Then Return SetError(-1, @error, 0)
    $oList = $oWMI.ExecQuery("SELECT * FROM Win32_UserAccount WHERE Name = '" & $sUsername & "'", "WQL")
    If IsObj($oList) = 0 Then Return SetError(-2, @error, 0)
    If $oList.Count <> 1 Then Return SetError(-3, @error, 0)
    For $oItem In $oList
    $oItem.Disabled = $bDisable
    $oItem.Put_
    If $oItem.Disabled <> $bDisable Then Return SetError(-4, @error, 0)
    Next
    Return 1
    EndFunc ;==>_WinWMI_UserAccount_SetDisabled

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

    ; #FUNCTION# ======================================================================================
    ; Name .............: _WinWMI_UserAccount_SetFullname()
    ; Description ......: Changes the full name of an User
    ; Syntax ...........: _WinWMI_UserAccount_SetFullname(Const $sUsername , Const[ $sFullname = "", Const[ $sComputer = "127.0.0.1"]]])
    ; Parameters .......: Const $sUsername - Target User
    ; Const $sFullname - The New full name
    ; Const $sComputer - [optional] Target Computer (default:"127.0.0.1")
    ; Return values ....: Success - 1
    ; Failure - 0 Sets @error to:
    ; |-1 Connection failed
    ; |-2 WMI Class not found/no access
    ; |-3 No matches or more than one found
    ; |-4 Changing full name failed
    ; Author ...........: Mahagon
    ; Link .............: http://msdn.microsoft.com/en-us/library/…7(v=VS.85).aspx
    ; Link (German).....: http://www.scriptinternals.de/new/ger/suppor…UserAccount.htm
    ; Au3.api extension.: _WinWMI_UserAccount_SetFullname( "Username" , "New Fullname" [, "Target Computer"] ) Changes the full name of an Useraccount ( Requires: #include <WinWMI_UserAccount.au3> )
    ; =================================================================================================

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

    Func _WinWMI_UserAccount_SetFullname(Const $sUsername, Const $sFullname, Const $sComputer = "127.0.0.1")
    $oWMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $sComputer & "\root\CIMV2")
    If IsObj($oWMI) = 0 Then Return SetError(-1, @error, 0)
    $oList = $oWMI.ExecQuery("SELECT * FROM Win32_UserAccount WHERE Name = '" & $sUsername & "'", "WQL")
    If IsObj($oList) = 0 Then Return SetError(-2, @error, 0)
    If $oList.Count <> 1 Then Return SetError(-3, @error, 0)
    For $oItem In $oList
    $oItem.Fullname = $sFullname
    $oItem.Put_
    If $oItem.Fullname <> $sFullname Then Return SetError(-4, @error, 0)
    Next
    Return 1
    EndFunc ;==>_WinWMI_UserAccount_SetFullname

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

    ; #FUNCTION# ======================================================================================
    ; Name .............: _WinWMI_UserAccount_SetLockout()
    ; Description ......: If True, the user account is locked out of the Windows operating system.
    ; Syntax ...........: _WinWMI_UserAccount_SetLockout(Const $sUsername , Const[ $bLockout = True, Const[ $sComputer = "127.0.0.1"]]])
    ; Parameters .......: Const $sUsername - Target User
    ; Const $bLockout - [optional] True = Lock out, False = Unlock (default:True)
    ; Const $sComputer - [optional] Target Computer (default:"127.0.0.1")
    ; Return values ....: Success - 1
    ; Failure - 0 Sets @error to:
    ; |-1 Connection failed
    ; |-2 WMI Class not found/no access
    ; |-3 No matches or more than one found
    ; |-4 Changing lockout failed
    ; Author ...........: Mahagon
    ; Link .............: http://msdn.microsoft.com/en-us/library/…7(v=VS.85).aspx
    ; Link (German).....: http://www.scriptinternals.de/new/ger/suppor…UserAccount.htm
    ; Au3.api extension.: _WinWMI_UserAccount_SetLockout( "Username" [, "True/False" [, "Target Computer"]] ) Locks/unlocks an User ( Requires: #include <WinWMI_UserAccount.au3> )
    ; =================================================================================================

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

    Func _WinWMI_UserAccount_SetLockout(Const $sUsername, Const $bLockout = True, Const $sComputer = "127.0.0.1")
    $oWMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $sComputer & "\root\CIMV2")
    If IsObj($oWMI) = 0 Then Return SetError(-1, @error, 0)
    $oList = $oWMI.ExecQuery("SELECT * FROM Win32_UserAccount WHERE Name = '" & $sUsername & "'", "WQL")
    If IsObj($oList) = 0 Then Return SetError(-2, @error, 0)
    If $oList.Count <> 1 Then Return SetError(-3, @error, 0)
    For $oItem In $oList
    $oItem.Lockout = $bLockout
    $oItem.Put_
    If $oItem.Lockout <> $bLockout Then Return SetError(-4, @error, 0)
    Next
    Return 1
    EndFunc ;==>_WinWMI_UserAccount_SetLockout

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

    ; #FUNCTION# ======================================================================================
    ; Name .............: _WinWMI_UserAccount_SetPasswordChangeable()
    ; Description ......: If True, the password on this user account can be changed.
    ; Syntax ...........: _WinWMI_UserAccount_SetPasswordChangeable(Const $sUsername , Const[ $bChangeable = True, Const[ $sComputer = "127.0.0.1"]]])
    ; Parameters .......: Const $sUsername - Target User
    ; Const $bLockout - [optional] True = Changeable, False = Not Changeable (default:True)
    ; Const $sComputer - [optional] Target Computer (default:"127.0.0.1")
    ; Return values ....: Success - 1
    ; Failure - 0 Sets @error to:
    ; |-1 Connection failed
    ; |-2 WMI Class not found/no access
    ; |-3 No matches or more than one found
    ; |-4 Changing PasswordChangeable failed
    ; Author ...........: Mahagon
    ; Link .............: http://msdn.microsoft.com/en-us/library/…7(v=VS.85).aspx
    ; Link (German).....: http://www.scriptinternals.de/new/ger/suppor…UserAccount.htm
    ; Au3.api extension.: _WinWMI_UserAccount_SetPasswordChangeable( "Username" [, "True/False" [, "Target Computer"]] ) Sets the password of an User changeable/not changeable( Requires: #include <WinWMI_UserAccount.au3> )
    ; =================================================================================================

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

    Func _WinWMI_UserAccount_SetPasswordChangeable(Const $sUsername, Const $bChangeable = True, Const $sComputer = "127.0.0.1")
    $oWMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $sComputer & "\root\CIMV2")
    If IsObj($oWMI) = 0 Then Return SetError(-1, @error, 0)
    $oList = $oWMI.ExecQuery("SELECT * FROM Win32_UserAccount WHERE Name = '" & $sUsername & "'", "WQL")
    If IsObj($oList) = 0 Then Return SetError(-2, @error, 0)
    If $oList.Count <> 1 Then Return SetError(-3, @error, 0)
    For $oItem In $oList
    $oItem.PasswordChangeable = $bChangeable
    $oItem.Put_
    If $oItem.PasswordChangeable <> $bChangeable Then Return SetError(-4, @error, 0)
    Next
    Return 1
    EndFunc ;==>_WinWMI_UserAccount_SetPasswordChangeable

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

    ; #FUNCTION# ======================================================================================
    ; Name .............: _WinWMI_UserAccount_SetPasswordExpires()
    ; Description ......: If True, the password on this user account expires.
    ; Syntax ...........: _WinWMI_UserAccount_SetPasswordExpires(Const[ $sUsername , Const[ $bExpires = True, Const[ $sComputer = "127.0.0.1"]]])
    ; Parameters .......: Const $sUsername - Target User
    ; Const $bLockout - [optional] True = Password will expire, False = Password won't expire (default:True)
    ; Const $sComputer - [optional] Target Computer (default:"127.0.0.1")
    ; Return values ....: Success - 1
    ; Failure - 0 Sets @error to:
    ; |-1 Connection failed
    ; |-2 WMI Class not found/no access
    ; |-3 No matches or more than one found
    ; |-4 Changing PasswordChangeable failed
    ; Author ...........: Mahagon
    ; Link .............: http://msdn.microsoft.com/en-us/library/…7(v=VS.85).aspx
    ; Link (German).....: http://www.scriptinternals.de/new/ger/suppor…UserAccount.htm
    ; Au3.api extension.: _WinWMI_UserAccount_SetPasswordExpires( "Username" [, "True/False" [, "Target Computer"]] ) If True, the password on this user account expires ( Requires: #include <WinWMI_UserAccount.au3> )
    ; =================================================================================================

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

    Func _WinWMI_UserAccount_SetPasswordExpires(Const $sUsername, Const $bExpires = True, Const $sComputer = "127.0.0.1")
    $oWMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $sComputer & "\root\CIMV2")
    If IsObj($oWMI) = 0 Then Return SetError(-1, @error, 0)
    $oList = $oWMI.ExecQuery("SELECT PasswordExpires,Name FROM Win32_UserAccount WHERE Name = '" & $sUsername & "'", "WQL")
    If IsObj($oList) = 0 Then Return SetError(-2, @error, 0)
    If $oList.Count <> 1 Then Return SetError(-3, @error, 0)
    For $oItem In $oList
    $oItem.PasswordExpires = $bExpires
    $oItem.Put_
    If $oItem.PasswordExpires <> $bExpires Then Return SetError(-4, @error, 0)
    Next
    Return 1
    EndFunc ;==>_WinWMI_UserAccount_SetPasswordExpires

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

    ; #FUNCTION# ======================================================================================
    ; Name .............: _WinWMI_UserAccount_SetPasswordRequired()
    ; Description ......: If True, a password is required on a Windows user account. If False, this account does not require a password.
    ; Syntax ...........: _WinWMI_UserAccount_SetPasswordRequired(Const $sUsername, Const[ $bRequired = True, Const[ $sComputer = "127.0.0.1"]]])
    ; Parameters .......: Const $sUsername - Target User
    ; Const $bLockout - [optional] True = Password is required, False = Password is not required (default:True)
    ; Const $sComputer - [optional] Target Computer (default:"127.0.0.1")
    ; Return values ....: Success - 1
    ; Failure - 0 Sets @error to:
    ; |-1 Connection failed
    ; |-2 WMI Class not found/no access
    ; |-3 No matches or more than one found
    ; |-4 Changing PasswordChangeable failed
    ; Author ...........: Mahagon
    ; Link .............: http://msdn.microsoft.com/en-us/library/…7(v=VS.85).aspx
    ; Link (German).....: http://www.scriptinternals.de/new/ger/suppor…UserAccount.htm
    ; Au3.api extension.: _WinWMI_UserAccount_SetPasswordRequired( "Username" [, "True/False" [, "Target Computer"]] ) If True, a password is required on a Windows user account. ( Requires: #include <WinWMI_UserAccount.au3> )
    ; =================================================================================================

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

    Func _WinWMI_UserAccount_SetPasswordRequired(Const $sUsername, Const $bRequired = True, Const $sComputer = "127.0.0.1")
    $oWMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $sComputer & "\root\CIMV2")
    If IsObj($oWMI) = 0 Then Return SetError(-1, @error, 0)
    $oList = $oWMI.ExecQuery("SELECT * FROM Win32_UserAccount WHERE Name = '" & $sUsername & "'", "WQL")
    If IsObj($oList) = 0 Then Return SetError(-2, @error, 0)
    If $oList.Count <> 1 Then Return SetError(-3, @error, 0)
    For $oItem In $oList
    $oItem.PasswordRequired = $bRequired
    $oItem.Put_
    If $oItem.PasswordRequired <> $bRequired Then Return SetError(-4, @error, 0)
    Next
    Return 1
    EndFunc ;==>_WinWMI_UserAccount_SetPasswordRequired

    [/autoit]

    21 is only half the truth.