Hier einmal ein Beispiel
Spoiler anzeigen
#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
; Last Change 18.05.2010
; Infos und Beispiele sind unter http://mahagon-autoit.spaces.live.com/?_c11_BlogPart…UserAccount.au3 zu finden
;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
;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()
; =================================================================================================
; #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> )
; =================================================================================================
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
; #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> )
; =================================================================================================
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
; #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> )
; =================================================================================================
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
; #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> )
; =================================================================================================
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
; #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> )
; =================================================================================================
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
; #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> )
; =================================================================================================
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
; #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> )
; =================================================================================================
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
; #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> )
; =================================================================================================
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