I think the obvious case is when a newhire account is created and the person decides not to come to work for the company. This can happen even if an offer letter has been accepted because we as human beings are free to choose where we work, and even change our minds if we want to =) Not creating the account ahead of the newhires arrival usually means at least a work day has been wasted, and over a large organization those workdays really add up. Of course HR practices means these should get caught and a term notice should be processed, but in the real world HR and the hiring manager will often forget the paperwork for fairly long periods of time.
Thanks, Andrew Fidel "Al Mulnick" <[EMAIL PROTECTED]> Sent by: [EMAIL PROTECTED] 12/26/2006 12:06 PM Please respond to ActiveDir@mail.activedir.org To ActiveDir@mail.activedir.org cc Subject Re: [ActiveDir] Automatic user disable based on criteria All of this assumes that the process doesn't need to be adjusted - I keep asking myself why a process exists to allow for the creation of an account that isn't used? That's really the root of this. After that, I have to wonder why the various processes aren't coordinated amongst themselves such as password resets, forgotten passwords, new account creation and others all being aware of one another? I think your example helps to add more information that can be used in the decision and I agree that if you're going to base the decision on the idea of when it was created and assume that because the password was changed [x] amount of time after the creation of the item but NOT less than [y] amount of time has elapsed, that it's going to be fairly reasonable to assume that the helpdesk (or?) has intervened and you should consider revisions to your hiring processes. I disagree that this is enough information to make me happy though :) I think it's a fairly good assumption, but I would much prefer to loop in the process and thinking described in a separate thread related to helpdesk resetting passwords (auditing, web pages, other systems, etc) and use that information as a flag in an account removal process. It's a sure thing that if the helpdesk hasn't reset the password since it was created that the account wasn't used if the password also hasn't been set, right? You have a week so it's not like this needs to be real-time. It could, but doesn't have to be. Happy New Year to you and the others as well* [*] Unless this isn't the New Year for you, in which case, have a great day! On 12/24/06, joe <[EMAIL PROTECTED]> wrote: I didn't read the whole chain of responses, I was just skimming and saw these questions "Hey joe, is there a way to see replication meta data using adfind? ;-) If yes, I could take a peek at originating date/time for attributes." Yes it can show you the metadata from AD (assuming K3+) and that metadata does indeed contain originating write into. Now that I have read it... To solve the specific issue that I read; find enabled users who haven't changed their passwords and logged in the period defined, you can use the metadata to help with that decision. Obviously having DFL2 would help as well. Neither in and of themselves I think would be authoritative on their own except in specific cases. The problem with DFL2 and lastLogonTimeStamp is that not everything sets that value. Try a simple LDAP bind sometime, it doesn't update lastLogon so it in turn doesn't update lastLogonTimeStamp. It will, however, update it if a bad auth attempt occurred prior. I never bugged that as I assume it is by design as it is very specific and it helps cut the overhead of the auth attempts which the simple bind is supposed to be helping with. That way apps that do a ton of simple binds don't cause a ton of writes to a DC. So how would this be done? Well obviously you can't query the metadata, it is constructed. So you need a query to give you an initial roundabout set to work with that you can test further. I would do something like (&(samaccounttype=805306368)(pwdlastset=0)(whencreated<=7 days). (&(samaccounttype=805306368)(pwdlastset=0)(whencreated>=[date 7 days ago])(!(useraccountcontrol:AND:2)) Obviously that last field would need to be generated at the time of the query being run. So now you have a list of possibles... You could give up here and reasonably assume that everything is fine and take on the resulting help desk calls. I wouldn't have much if any issue with this method unless it had already been proven there was too much collateral damage. I would have to decide whether I wanted to be more concerned about the method or the fact that new people need to be reset again so soon which likely indicates a process issue or overly agressive password policy or underly agressive hiring policy. So you decide you need to be more fine tuned... So you look at metadata. Right off if the unicodePwd version is 1 then the password has never been changed and that is as authoritative as it is going to get. You definitely know this person has NEVER changed that password. However, the obverse is not true, you cannot assume that if the version is higher than 1 that the password HAS been changed. The password versioning can vary based on the creation method. Here is the metadata from two accounts created in three different ways: [Sun 12/24/2006 11:42:20.45] G:\>repadmin /showmeta CN=al-testuser0,CN=Users,DC=test,DC=loc r2dc1 31 entries. Loc.USN Originating DC Org.USN Org.Time/Date Ver Attribute ======= =============== ========= ============= === ========= 441322 Default-First-Site-Name\R2DC2 406847 2006-12-24 10:53:00 1 objectClass 441322 Default-First-Site-Name\R2DC1 441322 2006-12-24 10:53:01 1 cn 441322 Default-First-Site-Name\R2DC2 406848 2006-12-24 10:53:00 1 description 441322 Default-First-Site-Name\R2DC2 406847 2006-12-24 10:53:00 1 instanceType 441322 Default-First-Site-Name\R2DC2 406847 2006-12-24 10:53:00 1 whenCreated 441322 Default-First-Site-Name\R2DC2 406849 2006-12-24 10:53:00 2 displayName 441322 Default-First-Site-Name\R2DC2 406847 2006-12-24 10:53:00 1 nTSecurityDescriptor 441322 Default-First-Site-Name\R2DC2 406847 2006-12-24 10:53:00 1 name 441322 Default-First-Site-Name\R2DC2 406849 2006-12-24 10:53:00 3 userAccountControl 441322 Default-First-Site-Name\R2DC2 406848 2006-12-24 10:53:00 1 codePage 441322 Default-First-Site-Name\R2DC2 406848 2006-12-24 10:53:00 1 countryCode 441322 Default-First-Site-Name\R2DC2 406848 2006-12-24 10:53:00 1 homeDirectory 441322 Default-First-Site-Name\R2DC2 406848 2006-12-24 10:53:00 1 homeDrive 441322 Default-First-Site-Name\R2DC2 406849 2006-12-24 10:53:00 2 dBCSPwd 441322 Default-First-Site-Name\R2DC2 406848 2006-12-24 10:53:00 1 scriptPath 441322 Default-First-Site-Name\R2DC2 406848 2006-12-24 10:53:00 1 logonHours 441322 Default-First-Site-Name\R2DC2 406848 2006-12-24 10:53:00 1 userWorkstations 441322 Default-First-Site-Name\R2DC2 406849 2006-12-24 10:53:00 2 unicodePwd 441322 Default-First-Site-Name\R2DC2 406849 2006-12-24 10:53:00 2 ntPwdHistory 441322 Default-First-Site-Name\R2DC2 406849 2006-12-24 10:53:00 2 pwdLastSet 441322 Default-First-Site-Name\R2DC2 406848 2006-12-24 10:53:00 1 primaryGroupID 441322 Default-First-Site-Name\R2DC2 406850 2006-12-24 10:53:00 1 supplementalCredentials 441322 Default-First-Site-Name\R2DC2 406848 2006-12-24 10:53:00 1 userParameters 441322 Default-First-Site-Name\R2DC2 406848 2006-12-24 10:53:00 1 profilePath 441322 Default-First-Site-Name\R2DC2 406847 2006-12-24 10:53:00 1 objectSid 441322 Default-First-Site-Name\R2DC2 406848 2006-12-24 10:53:00 1 comment 441322 Default-First-Site-Name\R2DC2 406849 2006-12-24 10:53:00 2 accountExpires 441322 Default-First-Site-Name\R2DC2 406849 2006-12-24 10:53:00 2 lmPwdHistory 441322 Default-First-Site-Name\R2DC2 406847 2006-12-24 10:53:00 1 sAMAccountName 441322 Default-First-Site-Name\R2DC2 406847 2006-12-24 10:53:00 1 sAMAccountType 441322 Default-First-Site-Name\R2DC2 406847 2006-12-24 10:53:00 1 objectCategory 0 entries. Type Attribute Last Mod Time Originating DC Loc.USN Org.USN Ver ======= ============ ============= ================= ======= ======= === Distinguished Name ============================= [Sun 12/24/2006 11:42:28.25] G:\>repadmin /showmeta CN=al-testuser1,CN=Users,DC=test,DC=loc r2dc1 22 entries. Loc.USN Originating DC Org.USN Org.Time/Date Ver Attribute ======= =============== ========= ============= === ========= 441326 Default-First-Site-Name\R2DC2 406856 2006-12-24 10:53:53 1 objectClass 441326 Default-First-Site-Name\R2DC1 441326 2006-12-24 10:53:54 1 cn 441326 Default-First-Site-Name\R2DC2 406856 2006-12-24 10:53:53 1 instanceType 441326 Default-First-Site-Name\R2DC2 406856 2006-12-24 10:53:53 1 whenCreated 441326 Default-First-Site-Name\R2DC2 406856 2006-12-24 10:53:53 1 nTSecurityDescriptor 441326 Default-First-Site-Name\R2DC2 406856 2006-12-24 10:53:53 1 name 441326 Default-First-Site-Name\R2DC2 406856 2006-12-24 10:53:53 1 userAccountControl 441326 Default-First-Site-Name\R2DC2 406857 2006-12-24 10:53:53 1 codePage 441326 Default-First-Site-Name\R2DC2 406857 2006-12-24 10:53:53 1 countryCode 441326 Default-First-Site-Name\R2DC2 406857 2006-12-24 10:53:53 1 dBCSPwd 441326 Default-First-Site-Name\R2DC2 406857 2006-12-24 10:53:53 1 logonHours 441326 Default-First-Site-Name\R2DC2 406857 2006-12-24 10:53:53 1 unicodePwd 441326 Default-First-Site-Name\R2DC2 406857 2006-12-24 10:53:53 1 ntPwdHistory 441326 Default-First-Site-Name\R2DC2 406857 2006-12-24 10:53:53 1 pwdLastSet 441326 Default-First-Site-Name\R2DC2 406857 2006-12-24 10:53:53 1 primaryGroupID 441326 Default-First-Site-Name\R2DC2 406858 2006-12-24 10:53:53 1 supplementalCredentials 441326 Default-First-Site-Name\R2DC2 406856 2006-12-24 10:53:53 1 objectSid 441326 Default-First-Site-Name\R2DC2 406857 2006-12-24 10:53:53 1 accountExpires 441326 Default-First-Site-Name\R2DC2 406857 2006-12-24 10:53:53 1 lmPwdHistory 441326 Default-First-Site-Name\R2DC2 406856 2006-12-24 10:53:53 1 sAMAccountName 441326 Default-First-Site-Name\R2DC2 406856 2006-12-24 10:53:53 1 sAMAccountType 441326 Default-First-Site-Name\R2DC2 406856 2006-12-24 10:53:53 1 objectCategory 0 entries. Type Attribute Last Mod Time Originating DC Loc.USN Org.USN Ver ======= ============ ============= ================= ======= ======= === Distinguished Name ============================= [Sun 12/24/2006 11:42:31.05] G:\>repadmin /showmeta CN=al-testuser2,CN=Users,DC=test,DC=loc r2dc1 24 entries. Loc.USN Originating DC Org.USN Org.Time/Date Ver Attribute ======= =============== ========= ============= === ========= 441354 Default-First-Site-Name\R2DC2 406894 2006-12-24 11:26:14 1 objectClass 441354 Default-First-Site-Name\R2DC1 441354 2006-12-24 11:26:15 1 cn 441354 Default-First-Site-Name\R2DC2 406894 2006-12-24 11:26:14 1 instanceType 441354 Default-First-Site-Name\R2DC2 406894 2006-12-24 11:26:14 1 whenCreated 441354 Default-First-Site-Name\R2DC2 406894 2006-12-24 11:26:14 1 displayName 441354 Default-First-Site-Name\R2DC2 406894 2006-12-24 11:26:14 1 nTSecurityDescriptor 441354 Default-First-Site-Name\R2DC2 406894 2006-12-24 11:26:14 1 name 441354 Default-First-Site-Name\R2DC2 406900 2006-12-24 11:26:15 4 userAccountControl 441354 Default-First-Site-Name\R2DC2 406895 2006-12-24 11:26:14 1 codePage 441354 Default-First-Site-Name\R2DC2 406895 2006-12-24 11:26:14 1 countryCode 441354 Default-First-Site-Name\R2DC2 406896 2006-12-24 11:26:15 2 dBCSPwd 441354 Default-First-Site-Name\R2DC2 406895 2006-12-24 11:26:14 1 logonHours 441354 Default-First-Site-Name\R2DC2 406896 2006-12-24 11:26:15 2 unicodePwd 441354 Default-First-Site-Name\R2DC2 406896 2006-12-24 11:26:15 2 ntPwdHistory 441354 Default-First-Site-Name\R2DC2 406898 2006-12-24 11:26:15 3 pwdLastSet 441354 Default-First-Site-Name\R2DC2 406895 2006-12-24 11:26:14 1 primaryGroupID 441354 Default-First-Site-Name\R2DC2 406897 2006-12-24 11:26:15 1 supplementalCredentials 441354 Default-First-Site-Name\R2DC2 406894 2006-12-24 11:26:14 1 objectSid 441354 Default-First-Site-Name\R2DC2 406895 2006-12-24 11:26:14 1 accountExpires 441354 Default-First-Site-Name\R2DC2 406896 2006-12-24 11:26:15 2 lmPwdHistory 441354 Default-First-Site-Name\R2DC2 406894 2006-12-24 11:26:14 1 sAMAccountName 441354 Default-First-Site-Name\R2DC2 406894 2006-12-24 11:26:14 1 sAMAccountType 441354 Default-First-Site-Name\R2DC2 406894 2006-12-24 11:26:14 1 userPrincipalName 441354 Default-First-Site-Name\R2DC2 406894 2006-12-24 11:26:14 1 objectCategory 0 entries. Type Attribute Last Mod Time Originating DC Loc.USN Org.USN Ver ======= ============ ============= ================= ======= ======= === Distinguished Name ============================= One was created with NET USER, one with ADUC, and one with AdMod. The accounts aren't configured identically but they are close enough for what we are talking about her. You will note that unicodePwd value is 1 on the AdMod example and 2 for the others. This can vary based on whatever tool is used and how it handles various items. So obviously the version number is out the window of something to look at because we are doing all of this to try and reduce assumptions. So looking at all of that data, the first thing that sticks out to me to use would be to look at the date/time stamp between objectCategory which cannot be changed and unicodePwd which is the value we care about. I believe you can safely assume here that if the values are within seconds of each other the user has not had an opportunity to set their own password yet. Helpful? Merry Christmas to everyone who leans that way, Happy Holidays to everyone who doesn't. take care and let's look forward to a good and profitable 2007, joe -- O'Reilly Active Directory Third Edition - http://www.joeware.net/win/ad3e.htm From: [EMAIL PROTECTED] [mailto: [EMAIL PROTECTED] On Behalf Of Al Mulnick Sent: Sunday, December 24, 2006 9:12 AM To: ActiveDir@mail.activedir.org Subject: Re: [ActiveDir] Automatic user disable based on criteria I have the distinct impression that Kamlesh is trying to solve a layer 8 problem with lower layer components. :) I think it's very interesting that those attributes can show when it was last changed, but I have to ask: will that show the difference between what was changed? Is it possible to differentiate between phone number updates and the helpdesk action described? I haven't used those attributes to make decisions on in the past, so bear with me but a quick lookup indicates that those values show that an object was updated and who updated it. Is that going to be enough information to make an automated decision? Or do you need some other information to absolutely identify good from not-so-good targets? I'm curious if this is something that high-tech should be used to solve vs. using a different process/low-tech solution. -ajm On 12/23/06, joe <[EMAIL PROTECTED]> wrote: Yes actually adfind can show you metadata... Look at the attributes msDS-ReplAttributeMetaData msDS-ReplValueMetaData I actually have a DCR for AdFind (submitted by me which means it for sure will get done) that will display that info in a better way than that XML format they use. When it does, it will also use the binary format of the attribute so it won't be so slow nor require as much network bandwidth. -- O'Reilly Active Directory Third Edition - http://www.joeware.net/win/ad3e.htm From: [EMAIL PROTECTED] [mailto: [EMAIL PROTECTED] On Behalf Of Kamlesh Parmar Sent: Monday, December 18, 2006 12:19 PM To: ActiveDir@mail.activedir.org Subject: [ActiveDir] Automatic user disable based on criteria Hi All, DFL & FFL : Win2k-Native DCs : Win2k3-SP1 User accounts are automatically provisioned as enabled with "Change Password at Next logon". And management wants to disable new accounts which have not logged into domain within next 7 days of creation. And they want it to happen automatically. I have problem at hand as I can't use LastLogonTimeStamp as DFL is not supportive. I can't connect to each DC and search for lastlogon as number of DCs are too large, can't go by "whenchanged", as that is generic attribute, which could get changed for any other attribute also. Any other attribute would help me? Currently LDAP filter checks for account created on specific day (say current day - 7) and whose "Change Password at next logon" is still ticked i.e. pwdlastset=0 But this doesn't take care of scenario, where users are created on that same day (current - 7) and logged into network, changed their password, but around the time of running script, had forgotten password and helpdesk had resetted their password and set "Change Password at next logon" I hope I am not confusing you all. :-) I know, simple solution would be to change criteria to say 15 days, raise DFL and use LLTS, but I am taking this as a scripting challenge at Win2k-native DFL. Hey joe, is there a way to see replication meta data using adfind? ;-) If yes, I could take a peek at originating date/time for attributes. -- Kamlesh ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ You teach best what you most need to learn. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~