All of this assumes that you have permissions to do so. These run under your current 
security context.  Otherwise, you just have to authenticate when getting the initial 
container object.  Sometimes that requires a different method (and maybe an extra step 
or two) but there's plenty of examples out there, so I'll leave that as an exercise. ;)

Rick

-----Original Message-----
From: Rick Tatem 
Sent: Thursday, August 01, 2002 4:02 PM
To: [EMAIL PROTECTED]
Subject: RE: creating Win2k users with perl


I've always used ADSI via the Win32::OLE (and Win32::OLE::Enum when needed) module(s). 
 You can take just about any VBScript example (widely available... just Google for 
'em) and convert to Perl.

In the most general terms:
Open the "container" object using GetObject
Call the 'Create' method of the container, telling it what objectClass to
  create (user,contact,group,organizationalUnit,etc.)
With the newly created object, Put attributes into place
End w/SetInfo.

Here's an example using the LDAP NameSpace:

        use Win32::OLE;
        my $Name = "First Last";
        my $ID = "filast";
        #
        # "Users is the usual container, but you can select any OU you might have 
defined
        #
        my $Container = Win32::OLE->GetObject("LDAP://CN=Users,DC=domain,DC=com";);
        my $NewUser = $Container->Create("user","CN=" . $Name);
        $NewUser->Put("sAMAccountName",$ID);
        # If you don't Put 512 into userAccountControl, the new account will be 
disabled
        $NewUser->Put("userAccountControl",512); 
        #keep ->Putting attribute values as needed...
        #
        $NewUser->SetInfo; #Commit change

Here's one using the WinNT NameSpace (Also works for NT4 domains if ADSI 2.5 is 
installed) But this example, I'll precede it by the VBScript version (to see how easy 
the "translation" is)

VBScript
----------
        ' comment to make the line numbers match :)
        Set oDomain = GetObject("WinNT://Domain")
        Set oUser = oDomain.Create("user", "jdoe")
        oUser.SetInfo
----------

Perl
----------
        use Win32::OLE;
        my $Domain = Win32::OLE->GetObject("WinNT://Domain");
        my $User = $Domain->Create("user, "jdoe");
        $User->SetInfo;
----------

Add some '$' in front of variables, change "." to "->" and you've got a Perl script!

There's plenty of info available as to what attributes are required/optional.  I 
mainly deal with EXISTING accounts, although I do create new Groups/Distribution Lists 
alot.  Basically the same tasks. But These examples are the bare bones.  Once you get 
into leveraging the existing VBScript codebase, you can do a lot more (at least _I_ 
have) w/the Perl translation.  List (ARRAY) manipulation, string operations, regexes 
are all much easier (in my admittedly biased opinion) in perl.  But why re-invent the 
wheel when you can just hitch a ride with the DLLs that are already goin' your way?  
Just make them more useful.

Rick
---
Rick Tatem
Messaging and Directory Resources
SAS Institute
SAS... The Power To Know (tm)

_______________________________________________
Perl-Win32-Admin mailing list
[EMAIL PROTECTED]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs
_______________________________________________
Perl-Win32-Admin mailing list
[EMAIL PROTECTED]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to