Microsoft KB Archive/321327

= You Receive an Error Message When You Change a Migrated Account Password =

Article ID: 321327

Article Last Modified on 10/31/2006

-

APPLIES TO


 * Microsoft Windows 2000 Service Pack 1
 * Microsoft Windows 2000 Service Pack 2
 * Microsoft Windows 2000 Advanced Server
 * Microsoft Windows 2000 Advanced Server

-



This article was previously published under Q321327





SYMPTOMS
If you use the Active Directory Users and Computers tool from the Windows 2000 Administration Tools on a Microsoft Windows XP-based client to change a user password for a migrated Novell NetWare user account, you may receive one of the following error messages, even though the password is actually changed:

Windows cannot complete the password change for  because:

Insufficient access rights to perform the operation.

-or-

The system cannot find the file specified.

-or-

The specified module could not be found.

This problem may occur if no NetWare servers are available in the Windows 2000-based domain. It does not matter whether the NetWare servers are removed from the domain before or after the upgrade to Windows 2000.



CAUSE
An upgrade to Windows 2000 may automatically migrate some NetWare account attributes. Windows 2000 interprets these attributes as indicators that NetWare is included in the environment, and that the passwords must be synchronized. The error message occurs when you try to change the password on the nonexistent NetWare network (not on the Windows 2000-based domain) because the required NetWare components are not installed on the client.

For additional information about a related problem, click the article number below to view the article in the Microsoft Knowledge Base:

268709 &quot;The Specified Module Could Not Be Found&quot; Error Message Resetting Password w/NetWare-Enabled Account



RESOLUTION
To resolve this issue, you can clear the Active Directory user account userParameters property by using the sample script source that is included in the &quot;More Information&quot; section of this article.

You can also use the following command to remove the Netware configuration information from the userProperties property. Type Net user  /fpnw:no at a command line, where   is the logon name of the user who has the unwanted Netware configuration information in the userProperties property.



MORE INFORMATION
The IADSUser userParameters property is of the type CASE_IGNORE_STRING and may contain the following configuration items:  Migrated Novell NetWare user configuration information:

NWPassword

OldNWPassword

MaxConnections

NWPasswordSet

GraceLoginAllowed

GraceLoginRemaining

NWLogonFrom NWHomeDir

 Windows Terminal Services user configuration information:

CtxCfgPresent

CtxCfgFlags1

CtxCallback

CtxShadow

CtxMaxConnectionTime

CtxMaxDisconnectionTime

CtxMaxIdleTime

CtxKeyboardLayout

CtxMinEncryptionLevel

CtxWorkDirectory

CtxNWLogonServer

CtxWFHomeDir

CtxWFHomeDirDrive

CtxWFProfilePath

CtxInitialProgram

CtxCallbackNumber

 Dial-up user configuration information Custom properties that third-party programs may have added

Note that you can store and query the Terminal Services configuration information by using the WTSSetUserConfig and WTSQueryUserConfig Terminal Services API functions. These items are not stored unless you call the WTSSetUserConfig function. Windows does not call WTSSetUserConfig when a user logs on to a Terminal Services server. For additional information, visit and query the MSDN Web site.

Sample Script
'************************************************************************ '* File:    CLRPROP.VBS '* Created: April 9, 2002 '* Version: 1.0 '* Function: Clears the userParameters property value from all user '*          accounts '************************************************************************

'************************************************************************ '* Script options '************************************************************************ OPTION EXPLICIT On Error Resume Next '************************************************************************ '* Constants '************************************************************************ Const PROPERTY_NAME     = &quot;userParameters&quot;      ' the property to clear Const CLASS_NAME        = &quot;user&quot;                ' the object type Const LDAP_USERS        = &quot;LDAP://CN=Users,DC=&quot; ' the LDAP container Const ADS_PROPERTY_CLEAR = 1                    ' for [IADs].PutEx '************************************************************************ '* Variables '************************************************************************ Dim Arguments    ' command line argument object Dim DomainName   ' contains domain name argument string Dim Container    ' (IADSContainer): the LDAP users container Dim Child        ' (IADS,IADSUser,IADSPropertyList): the current user Dim PropCount    ' from (IADSPropertyList)Child.PropertyCount Dim PropIndex    ' index for PropCount Dim Property     ' from Child.Item(PropIndex): (IADSPropertyEntry) Dim Value        ' from (IADSPropertyEntry).Values Dim NumValues    ' iterated count of Value Dim NullValue    ' generic Null, a placeholder Dim NumModified  ' iterated count of users to modify, and modified Dim InfoText     ' string for display output Dim NameList     ' string to hold list of user CN Dim MsgReturn     ' return value for MsgBox '************************************************************************ '* Command line handling '************************************************************************ Set Arguments = WScript.Arguments If Arguments.Count = 1 Then DomainName = Arguments(0) If Err <> 0 Then WScript.Echo &quot;Error getting &quot; & CMD_PARMS Wscript.Quit End If Else InfoText = &quot;Warning: No command line parameters&quot; & Chr(13) & Chr(10) InfoText = InfoText & &quot;Usage: &quot; & Wscript.ScriptName & &quot; <DOMAINNAME>&quot; Wscript.Echo InfoText Wscript.Quit End if '************************************************************************ '* First object initialization '************************************************************************ Set Container=GetObject(LDAP_USERS & DomainName) If Err = 0 then '*********************************************************************  '* Warn the user, and give a first-chance quit option '*********************************************************************  InfoText = &quot;Warning: This will clear the property '&quot; & PROPERTY_NAME InfoText = InfoText & &quot;' for all users in the domain &quot; & DomainName InfoText = InfoText & &quot;.&quot; & Chr(13) & Chr(10) & Chr(13) & Chr(10) InfoText = InfoText & &quot;This includes Terminal Server settings set &quot; InfoText = InfoText & &quot;by using the WTSSetUserConfig API.&quot; InfoText = InfoText & Chr(13) & Chr(10) & Chr(13) & Chr(10) InfoText = InfoText & &quot;Do you want to proceed?&quot; MsgReturn = MsgBox(InfoText, vbYesNo, &quot;Clear Property&quot; ) If MsgReturn = vbNo Then Wscript.Quit End If  '********************************************************************* '* Walk the users, and determine how many have the property. '*********************************************************************  NumModified = 0 NameList = &quot;&quot; For Each Child in Container If StrComp( CLASS_NAME, Child.Class, 1 ) = 0 Then '***************************************************************        '* Creates an instance of the IADSPropertyList '***************************************************************        If Child.userParameters = Empty Then NullValue = Null End If        Child.GetInfo PropCount = Child.PropertyCount For PropIndex = 0 To PropCount - 1 Set Property = Child.Item(PropIndex) If StrComp( PROPERTY_NAME, Property.Name, 1 ) = 0 Then NumValues = 0 For Each Value in Property.Values NumValues = NumValues + 1 Next If NumValues > 0 Then NumModified = NumModified + 1 NameList = NameList & Child.Name & &quot; &quot; End If           End If         Next End If  Next '*********************************************************************  '* If none are found, report and quit '*********************************************************************  If NumModified = 0 Then InfoText = &quot;There are no users with the property '&quot; InfoText = InfoText & PROPERTY_NAME & &quot;'&quot; WScript.Echo InfoText Wscript.Quit End If  '********************************************************************* '* At least one was found; verify that the user wants to continue '*********************************************************************  InfoText = &quot;Do you want to clear the property '&quot; & PROPERTY_NAME InfoText = InfoText & &quot;' for the following &quot; & CStr(NumModified) InfoText = InfoText & &quot; users?&quot; & Chr(13) & Chr(10) InfoText = InfoText & Chr(13) & Chr(10) & NameList MsgReturn = MsgBox(InfoText, vbYesNo, &quot;Clear Property&quot; ) If MsgReturn = vbNo Then Wscript.Quit End If  '********************************************************************* '* Walk the users and clear the property '*********************************************************************  InfoText = &quot;&quot; NameList = &quot;&quot; NumModified = 0 For Each Child in Container If StrComp( CLASS_NAME, Child.Class, 1 ) = 0 Then '**************************************************************        '* Create an instance of the IADSPropertyList '**************************************************************        If Child.userParameters = Empty Then NullValue = Null End If        PropCount = Child.PropertyCount For PropIndex = 0 To PropCount - 1 Set Property = Child.Item(PropIndex) If StrComp( PROPERTY_NAME, Property.Name, 1 ) = 0 Then NumValues = 0 For Each Value in Property.Values NumValues = NumValues + 1 Next If NumValues > 0 Then NumModified = NumModified + 1 Child.PutEx ADS_PROPERTY_CLEAR, Property.Name, &quot;&quot; Child.SetInfo End If           End If         Next End If  Next '*********************************************************************  '* Report that the task is complete '*********************************************************************  InfoText = &quot;Cleared property '&quot; & PROPERTY_NAME & &quot;' for &quot; If NumModified = 0 Then InfoText = InfoText & &quot;0 users&quot; Else If NumModified = 1 Then InfoText = InfoText & &quot;1 user&quot; Else InfoText = InfoText & CStr(NumModified) & &quot; users&quot; End If  End If   WScript.Echo InfoText & Chr(13) & Chr(10) & NameList Else '*********************************************************************  '* General problem case '*********************************************************************  WScript.Echo &quot;Error getting object: &quot; & LDAP_USERS & DomainName End If Wscript.Quit

Keywords: kberrmsg kbprb KB321327

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.