Re: Script to set 'Password never expires' flag

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance

From: Al Mulnick (amulnick_No_SPAM_at_ncDOTrr.com)
Date: 11/23/04


Date: Mon, 22 Nov 2004 21:42:18 -0500

What's your comfort level then? Is DSMOD going to do what you want?
Or is scripting the way you want to proceed?

Al

"Marsha" <Marsha@discussions.microsoft.com> wrote in message
news:C0EEBDB9-ADC5-48DA-AED4-B8C52E7E0ED6@microsoft.com...
> Al,
>
> Thanks for taking the time to respond and give some good advice. We're
> running Win2k still. And i did restore into our test lab, but its giving
> the
> same error in live. Yes, it would make sense just to set the 'password
> never
> expires' for only the accounts that we never want to expire, but there is
> politics behind this. Mgmt does not want to turn it on for everyone all
> at
> once. We have to hold hands department by department, so that is the
> reason
> for attempting to use this script. I'll keep trying and check into your
> suggestions. if you think of anything else, please let me know.
>
> Thanks!
>
> "Al Mulnick" wrote:
>
>> So if I follow you correctly, you're wanting to set all of the user
>> passwords to never expire, apply the policy to the domain, then go back
>> and
>> de-select that check box one by one?
>>
>> Wouldn't it be better to select the ones that should never expire and let
>> the rest of them follow the policy?
>>
>> Wouldn't it be better to use the ADU&C to do this? I'm assuming W2K3
>> which
>> has the ability to select multiple users and modify that field. You
>> won't
>> be able to use search for this although you can select all you can see.
>>
>>
>> If it's only one domain, then the script likely found the correct
>> information so that may not be it. I had read it to mean that you had
>> restored this in the lab and figured there may be other domains in your
>> forest. But if this is a single-forest/single-domain then that's not
>> it.j
>>
>> It may be that you want to drop back and use a different method if you
>> still
>> want to set all accounts to never expire. Start by getting the user DN's
>> and then for each of them use dsmod user
>> http://www.microsoft.com/windowsxp/home/using/productdoc/en/default.asp?url=/windowsxp/home/using/productdoc/en/dsmod_user.asp
>>
>> You'll see a nice explanation by Richard how this might work and even an
>> example to get the DN's into a file. If you go that route, you can put
>> them
>> a file, then modify the file to be a cmd file and put the dsmod query
>> around
>> the DN on each line I would imagine.
>>
>> Just theory though. You could also use the dsquery tool to grab the DN of
>> the users and then pipe it to the dsmod command. Keeps you from having
>> to
>> learn script.
>>
>>
>>
>> "Marsha" <Marsha@discussions.microsoft.com> wrote in message
>> news:7FCC521F-F06E-4AD1-A2D9-4DD662208B45@microsoft.com...
>> > Hi,
>> >
>> > The original requirement is to set the 'password never expires' flag
>> > for
>> > all
>> > users so that we can control the domain password policy's expiration
>> > settings. The password policy will be turned on and we'll then control
>> > it
>> > at
>> > the user level. If you have a better suggestion, please let me know.
>> > This
>> > was the only way I could think of to not apply the password policy
>> > expiration
>> > settings all at once. There's only one domain, so its pretty
>> > straightforward. Any help would be greatly appreciated.
>> >
>> > "Al Mulnick" wrote:
>> >
>> >> Marsha, what was the original requirement?
>> >>
>> >> You need to set all passwords to never expire for all users? Whatever
>> >> for
>> >> (test lab I assume)?
>> >>
>> >> How many domains are there? If more than one (root/child) you may
>> >> want
>> >> to
>> >> short circuit the part about finding the naming context and hard code
>> >> it
>> >> to
>> >> see if you get better results.
>> >>
>> >>
>> >> Al
>> >>
>> >>
>> >>
>> >> "Marsha" <Marsha@discussions.microsoft.com> wrote in message
>> >> news:119207E6-EADE-4E43-B006-B7C1B9FE48BD@microsoft.com...
>> >> > Hi,
>> >> > Well, 4 of the 5 were in the users container and the other one was
>> >> > one
>> >> > of
>> >> > my
>> >> > collegues in a separate OU. I unchecked the box for all and ran the
>> >> > script
>> >> > again. This time, I got the 'server unwilling to process the
>> >> > request'
>> >> > error
>> >> > immediately. I agree with you, it seems to be a permissions issue.
>> >> > I
>> >> > will
>> >> > check the domain controller policies, etc. If you think of
>> >> > anything,
>> >> > please
>> >> > let me know.
>> >> >
>> >> > Thanks,
>> >> > Marsha
>> >> >
>> >> > "Richard Mueller [MVP]" wrote:
>> >> >
>> >> >> Hi,
>> >> >>
>> >> >> I did a brief test (I developed the script months ago) and had no
>> >> >> problem.
>> >> >> The fact that the script appears to work for 5 users, then raises
>> >> >> an
>> >> >> error
>> >> >> seems to indicate either a permission problem or a conflict with
>> >> >> some
>> >> >> other
>> >> >> setting. I didn't want to change this setting for all my users, so
>> >> >> perhaps
>> >> >> there could also be some server issue.
>> >> >>
>> >> >> I also tested with a user that has "User must change password at
>> >> >> next
>> >> >> logon". You are not allowed to have both settings, but after the
>> >> >> program
>> >> >> ran, this user had "User must change password at next logon"
>> >> >> unchecked
>> >> >> and
>> >> >> "Password never expires" checked.
>> >> >>
>> >> >> Can you tell which user object raised the error and compare this
>> >> >> object
>> >> >> with
>> >> >> the ones that were modified successfully? Maybe you can see a
>> >> >> difference.
>> >> >>
>> >> >> I'm still looking.
>> >> >>
>> >> >> --
>> >> >> Richard
>> >> >> Microsoft MVP Scripting and ADSI
>> >> >> HilltopLab web site - http://www.rlmueller.net
>> >> >> --
>> >> >>
>> >> >> "Marsha" <Marsha@discussions.microsoft.com> wrote in message
>> >> >> news:1196E6AF-11AB-4F56-A33F-AD4CF6BA7C11@microsoft.com...
>> >> >> > Thanks for the script. The only problem I'm having is a
>> >> >> > 'general
>> >> >> > access
>> >> >> > denied' error on the objuser.setinfo command in my test lab. The
>> >> >> > only
>> >> >> > information I am finding about this error is regarding IIS which
>> >> >> > I
>> >> >> > am
>> >> >> > not
>> >> >> > running. If I attempt to run the script in my live environment,
>> >> >> > I
>> >> >> > get
>> >> >> 'The
>> >> >> > server is unwilling to process the request'. The account I am
>> >> >> > using
>> >> >> > to
>> >> >> run
>> >> >> > the script is a member of domain, enterprise, and schema admins.
>> >> >> > It
>> >> >> appeared
>> >> >> > to set about 5 accounts and then produced the server is unwilling
>> >> >> > to
>> >> >> process
>> >> >> > error above. Any ideas that I could try or settings I could
>> >> >> > check?
>> >> >> >
>> >> >> > "Richard Mueller [MVP]" wrote:
>> >> >> >
>> >> >> > > Marsha wrote:
>> >> >> > >
>> >> >> > > > Does anyone have a script that can set the 'Password Never
>> >> >> > > > Expires'
>> >> >> flag
>> >> >> > > for
>> >> >> > > > all users in the domain? I need to set the attribute for
>> >> >> > > > everyone
>> >> >> > > > and
>> >> >> am
>> >> >> > > not
>> >> >> > > > very good at scripting. I can get it to work for a specific
>> >> >> > > > user,
>> >> >> > > > but
>> >> >> I
>> >> >> > > want
>> >> >> > > > it to effect the whole domain.
>> >> >> > >
>> >> >> > > Hi,
>> >> >> > >
>> >> >> > > The script below uses ADO to retrieve the distinguishedName and
>> >> >> > > userAccountControl attributes for all users in the domain. You
>> >> >> > > "And"
>> >> >> > > userAccountControl with a bit mask (ADS_UF_DONT_EXPIRE_PASSWD)
>> >> >> > > to
>> >> >> > > check
>> >> >> if
>> >> >> > > the bit is set. A non-zero result indicates the bit is set. In
>> >> >> > > the
>> >> >> > > code
>> >> >> > > below, if the result is zero, we know the bit is not set, so
>> >> >> > > the
>> >> >> password
>> >> >> > > can expire and we must set the bit. The bit is set by "Or'ing"
>> >> >> > > userAccountControl with the bit mask. To modify the user you
>> >> >> > > must
>> >> >> > > bind
>> >> >> to
>> >> >> > > the user object, which is why distinguishedName is also
>> >> >> > > retrieved.
>> >> >> > >
>> >> >> > >
>> >> >> > > ' Program to set "Password never expires" for all users in a
>> >> >> > > domain.
>> >> >> > > Option Explicit
>> >> >> > >
>> >> >> > > Const ADS_UF_DONT_EXPIRE_PASSWD = &H10000
>> >> >> > >
>> >> >> > > Dim objRootDSE, strDNSDomain, objCommand, objConnection
>> >> >> > > Dim strBase, strFilter, strAttributes, strQuery, objRecordSet
>> >> >> > > Dim strDN, lngFlag, objUser
>> >> >> > >
>> >> >> > > ' Determine DNS domain name.
>> >> >> > > Set objRootDSE = GetObject("LDAP://RootDSE")
>> >> >> > > strDNSDomain = objRootDSE.Get("defaultNamingContext")
>> >> >> > >
>> >> >> > > ' Use ADO to search Active Directory.
>> >> >> > > Set objCommand = CreateObject("ADODB.Command")
>> >> >> > > Set objConnection = CreateObject("ADODB.Connection")
>> >> >> > > objConnection.Provider = "ADsDSOObject"
>> >> >> > > objConnection.Open "Active Directory Provider"
>> >> >> > > objCommand.ActiveConnection = objConnection
>> >> >> > > strBase = "<LDAP://" & strDNSDomain & ">"
>> >> >> > >
>> >> >> > > ' Search for all users.
>> >> >> > > strFilter = "(&(objectCategory=person)(objectClass=user))"
>> >> >> > > strAttributes = "distinguishedName,userAccountControl"
>> >> >> > > strQuery = strBase & ";" & strFilter & ";" & strAttributes &
>> >> >> > > ";subtree"
>> >> >> > > objCommand.CommandText = strQuery
>> >> >> > > objCommand.Properties("Page Size") = 100
>> >> >> > > objCommand.Properties("Timeout") = 30
>> >> >> > > objCommand.Properties("Cache Results") = False
>> >> >> > > Set objRecordSet = objCommand.Execute
>> >> >> > >
>> >> >> > > ' Enumerate all users.
>> >> >> > > Do Until objRecordSet.EOF
>> >> >> > > strDN = objRecordSet.Fields("distinguishedName")
>> >> >> > > ' Check if password can expire.
>> >> >> > > lngFlag = objRecordSet.Fields("userAccountControl")
>> >> >> > > If (lngFlag And ADS_UF_DONT_EXPIRE_PASSWD) = 0 Then
>> >> >> > > ' Flag not set. Password can expire. Bind to user and set
>> >> >> > > flag.
>> >> >> > > Set objUser = GetObject("LDAP://" & strDN)
>> >> >> > > lngFlag = lngFlag Or ADS_UF_DONT_EXPIRE_PASSWD
>> >> >> > > objUser.Put "userAccountControl", lngFlag
>> >> >> > > objUser.SetInfo
>> >> >> > > Wscript.Echo "User modified: " & strDN
>> >> >> > > End If
>> >> >> > > objRecordSet.MoveNext
>> >> >> > > Loop
>> >> >> > >
>> >> >> > > ' Clean up.
>> >> >> > > objConnection.Close
>> >> >> > > Set objUser = Nothing
>> >> >> > > Set objRootDSE = Nothing
>> >> >> > > Set objCommand = Nothing
>> >> >> > > Set objConnection = Nothing
>> >> >> > > Set objRecordSet = Nothing
>> >> >> > >
>> >> >> > > --
>> >> >> > > Richard
>> >> >> > > Microsoft MVP Scripting and ADSI
>> >> >> > > HilltopLab web site - http://www.rlmueller.net
>> >> >> > > --
>> >> >> > >
>> >> >> > >
>> >> >> > >
>> >> >>
>> >> >>
>> >> >>
>> >>
>> >>
>> >>
>>
>>
>>



Relevant Pages

  • dsmod and renaming the computer same thing?
    ... I want to write a script that will change a computer's name. ... I understand that I can use DSMOD to modify a computer account in AD. ... Or do I need two parts, one to modify the account and one to modify the name? ...
    (microsoft.public.windows.server.active_directory)
  • Re: Force password reset for administrator
    ... My script is in fact doing the same as yours. ... Is also required to set the password reset bit. ... logf.WriteLine(" Set administrator account to password changed after next ... expired, your code would configure so passwords no longer expire. ...
    (microsoft.public.scripting.vbscript)
  • Re: AD Script to set passwords to expire in 10 days
    ... I'm saying to run the script that sets the pwdLastSet attribute in scheduled maner. ... "Joe Kaplan" wrote in message ... Co-author of "The .NET Developer's Guide to Directory Services ... If you set the value to -1 and changed your domain pwd policy so that passwords expire in 10 days, then everyone's password would expire in 10 days, so that might get you what you want. ...
    (microsoft.public.windows.server.active_directory)
  • Re: Privision User must change password at next logon, if password changed, set password never expir
    ... I am looking for help in being able to create a script that will ... To set "user must change password at next logon", ... ' Bind to OU with Distinguished Name of OU. ... ' Expire password, so user must change password at next logon. ...
    (microsoft.public.scripting.vbscript)
  • Re: Help With Password Last Changed
    ... password to expire in 1 day and everyone but my test user was set to ... to have the passwords expire after 90 days. ... dtmValue = objUserLDAP.PasswordLastChanged ... This is the script I was using. ...
    (microsoft.public.windows.server.active_directory)