|
| |||||||||
| Tags: account, ado recordset, disable, windows server 2003, windows xp, wmi script |
![]() |
| | Thread Tools | Search this Thread |
|
#1
| |||
| |||
| Using WMI to disable a user account
Hi, I want to use a WMI script to disable a user account. Here's the test code I'm using: compName = "localhost" Set wmi = GetObject("winmgmts:{impersonationLevel=impersonate}!//"& _ compName & "\root\cimv2") Set users = wmi.ExecQuery("SELECT * FROM Win32_UserAccount") For Each user In users If user.Name = "whatever" Then user.Disabled = True End If Next 'user The code runs fine (on a Windows Server 2003 box; I'm logged in as Administrator), but the user's account is not disabled. Any idea why? |
|
#2
| |||
| |||
| Re: Using WMI to disable a user account
Interesting. I had the same result on XP with a non-admin account, so it's not just that you are testing against a name where the (upper/lower) case doesn't match. I added some echo statements to make sure the .disabled attribute has a boolean value and is modifiable, i.e.: compName = "localhost" Set wmi = GetObject("winmgmts:{impersonationLevel=impersonate}!//"& _ compName & "\root\cimv2") Set users = wmi.ExecQuery("SELECT * FROM Win32_UserAccount") For Each user In users If user.Name = "zzz" Then wscript.echo "disabling user [" & user.name & "]" wscript.echo "[" & user.disabled & "]" user.Disabled = not user.disabled wscript.echo "[" & user.disabled & "]" End If Next 'user wscript.echo "after FOR EACH loop" Since this indicated that the attribute had indeed changed (although not on the actual account), it seems to me that there might perhaps be some requirement to write the property back to the sam database with something like the ".SetInfo" method used in active directory. There might be, but it isn't user.setinfo, as that threw an "object doesn't support this property or method" exception. |
|
#3
| |||
| |||
| Re: Using WMI to disable a user account
Documentation says that the Disabled property is read/write. Also says that if a property is read-only, no error is raised when you attempt to modify the value. This acts as if the property is read-only. Strange. It doesn't help this problem, but the query would be more efficient if you specified the user. For example: Set users = wmi.ExecQuery("SELECT * FROM Win32_UserAccount WHERE Name = 'MyUserName'") or another option could be: Set objUser = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & strComputer _ & "\root\cimv2:Win32_UserAccount." _ & "Domain='MyDomain',Name='MyUserName'") |
|
#4
| |||
| |||
| Re: Using WMI to disable a user account
Actually, the property *does* change, albeit briefly. Consider the following variation: compName = "localhost" Set wmi = GetObject("winmgmts:{impersonationLevel=impersonate}!//"& compName & "\root\cimv2") Set users = wmi.ExecQuery("SELECT * FROM Win32_UserAccount WHERE Description='whatever'") For Each user In users user.Disabled = True WScript.Echo user.Name & ": " & user.Disabled Next 'user For Each user In users WScript.Echo user.Name & ": " & user.Disabled Next 'user In the first Echo, Disabled returns True; in the second Echo, it returns False! I wonder if it's similar to making changes in an ADO Recordset, where after you edit a field value you have to run the Update method to write the changes. Might there be some WMI equivalent to the ADO Update method? |
|
#5
| |||
| |||
| Re: Using WMI to disable a user account
Yes, Just call the .Put_() method to commit the whole instance: Code: user.Put.(); http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx Last edited by bhavesh : 22-12-2009 at 12:51 PM. Reason: Add ref links |
![]() |
|
| Thread Tools | Search this Thread |
| |
Similar Threads for: "Using WMI to disable a user account" | ||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| some of the user account inheritance setting automatic disable hel | mr555 | Active Directory | 5 | 09-11-2009 07:04 AM |
| How to disable the User Account Control in vista | M. Rafi | Windows Software | 4 | 21-07-2009 10:58 PM |
| Partially disable UAC (User Account Control) | hayeden | Tips & Tweaks | 1 | 22-05-2009 11:33 PM |
| How to control enable/disable user account rights | RVirene | Active Directory | 7 | 17-04-2009 02:30 PM |
| How to disable "The User Account auto lock function"? | Tommy | Small Business Server | 3 | 05-04-2008 05:46 PM |