2000 server script
Top  Previous  Next


[Settings_Begin]
SET AccountName=%col1%    // %AccountName% instead of %col1% below = easier to change column
SET FullName=%col2%
SET EmailAddress=%col3%
SET Password=%col4%
//not used SET Domain=%col5%
SET PIN=%col6%
SET AccountType=%col7%
SET Unit=%col8%
SET Class=%col9%
SET OldUnit=%col10%
SET OldClass=%col11%
SET AccountActive=%col12%
SET AccountDeleted=%col13%
SET AccountNew=%col14%

BatchSettings.MarkerCol=20
BatchSettings.Delimiter=,
BatchSettings.AddToValidCharSet=äöåÄÖÅéÉü_ // Allow non-english characters in user and group names
//BatchSettings.Debug=Yes

// Active directory
SET ADDomainPath=dc=com/dc=acme/dc=D2
SET ADUserPath=%ADDomainPath%/cn=users
SET ADOUName=%Unit%/ou=%Class%
SET ADOUPath=%ADDomainPath%/ou=%ADOUName%
SET ADOUOldName=%Unit%/ou=%OldClass%
SET ADOUOldPath=%ADDomainPath%/ou=%ADOUOldName%

// Home directory and home directory permissions
SET HomeRoot=w:\users
SET HomeDir=%HomeRoot%\copy(%PIN%,1,2)\%AccountName% // Two first digits in PIN is birth year
SET HomeDirPermissions=%AccountName%:F administrators:F System:F

SET HomeDirMap=%servername%\%AccountName%$
SET ScriptName=netuse.bat

Printer.Template=%StartDir%\SBprintBatch.txt // For Data.PrintRow

// Initialize counters
SET CounterNew=0
SET CounterActive=0
SET CounterInActive=0
SET CounterDelete=0
SET CounterNewUnit=0
SET CounterNewClass=0

// Formatting strings for event logging and error handling
SET StrSrc=SetupBatcher - Script file: "%ScriptName%". Data file: "%DataFile%".
SET StrInfo=%StrSrc% New accounts: %CounterNew%. Set active: %CounterActive%. Set inactive: %CounterInActive%. Deleted: %CounterDelete%. New class: %CounterNewClass%. New unit: %CounterNewUnit%.
SET StrError=%StrSrc% Failed: %LastErrorCommand% - %LastErrorMsg%

// Directories for data files and help utilities
SET DataFilesDir=c:\data
SET DataSectionBackupDir=c:\databck
SET BlatPath=c:\blat
[Settings_End]

[Machines_Begin]
\\EDU8      NT PDC    
[Machines_End]

[DataFiles_Begin]
$GetDataFiles POP3, c:\data, pop.servername.se, account, pass,, Delete,, Log, GnuPG, passph
[DataFiles_End]

[Init_Batch_Begin]
Data.Column.ReplaceText 8,/,_   
[Init_Batch_End]

[Batch_Begin]
Data.Loop   
   
// New account   
IF %AccountNew%=new THEN   
 // Create OU if needed   
 AD.OU.Create %ADDomainPath%/ou=%Unit%,%Class%,Force   
 // Create account   
 AD.Account.Create %ADOUPath%,%AccountName%,%AccountName%,%Password%   
 AD.Account.SetProperty %ADOUPath%/cn=%AccountName%,UserPrincipalName,%AccountName%@mydomain.com   
 AD.Account.SetProperty %ADOUPath%/cn=%AccountName%,FullName,%FullName%   
 AD.Account.SetProperty %ADOUPath%/cn=%AccountName%,AccountDisabled,No   
 AD.Account.SetProperty %ADOUPath%/cn=%AccountName%,PWMustChange,No   
 AD.Account.SetProperty %ADOUPath%/cn=%AccountName%,LoginScript,%ScriptName%   
 AD.Account.SetProperty %ADOUPath%/cn=%AccountName%,HomeDirectory,%HomeDirMap%   
 // Set Employee ID   
 AD.Account.SetProperty %ADOUPath%/cn=%AccountName%,$EmployeeID,%PIN%   
 // Set group membership (create groups [in users containter] if needed)   
 $i AD.Group.Create Global,%ADUserPath%,%AccountType%,%AccountType%   
 AD.Group.AddObject %ADUserPath%/cn=%AccountType%,%ADOUPath%/cn=%AccountName%   
 IF %Class%<> THEN   
  $i AD.Group.Create Global,%ADUserPath%,%Class%,%Class%   
  AD.Group.AddObject %ADUserPath%/cn=%Class%,%ADOUPath%/cn=%AccountName%   
 ENDIF   
 // Create home directory, set permissions   
 DOS md %HomeDir%   
 DOS echo y| cacls %HomeDir% /G %HomeDirPermissions%   
  // Create hidden share for each account (only method that works with all OS:es)   
 DOS net share %AccountName%$=%HomeDir%   
 // Print password sheet for new user on printer with index 1 (first index is 0)   
 Data.PrintRow 1   
 Inc %CounterNew%   
 Data.NextLoop   
ENDIF   
   
// Move account to other unit   
IF %OldUnit%<> THEN   
 // Insert code here - DOS XCOPY / DOS Delete etc.)   
 Inc %CounterNewUnit%   
 Data.NextLoop   
ENDIF   
   
// Move account to other class   
IF %OldClass%<> THEN   
 AD.OU.Create %ADDomainPath%/ou=%Unit%,%Class%,Force   
 AD.OU.MoveObject %ADOUOldPath%/cn=%AccountName%,%ADOUPath%   
 AD.Group.RemoveObject %ADUserPath%/cn=%OldClass%,%ADOUPath%/cn=%AccountName%   
 $i AD.Group.Create Global,%ADUserPath%,%Class%,%Class%   
 AD.Group.AddObject %ADUserPath%/cn=%Class%,%ADOUPath%/cn=%AccountName%   
 Inc %CounterNewClass%   
 Data.NextLoop   
ENDIF   
   
// Mark account for deletion   
IF %AccountDeleted%<>notdel THEN   
 AD.Account.SetProperty %ADOUPath%/cn=%AccountName%,AccountExpires,2000-01-01   
 Inc %CounterDelete%   
 Data.NextLoop   
ENDIF   
   
// Activate / Inactivate account   
IF %AccountActive%<>active THEN   
 AD.Account.SetProperty %ADOUPath%/cn=%AccountName%,AccountDisabled,Yes   
 Inc %CounterInActive%   
ELSE   
 AD.Account.SetProperty %ADOUPath%/cn=%AccountName%,AccountDisabled,No   
 Inc %CounterActive%   
ENDIF   
   
Data.Endloop   
   
// Save current data section   
Data.Save %DataSectionBackupDir%\%Date=yymmddhhnnsszzz%_%DataFile%   
// Delete current data file - if not deleted it will be run twice   
DOS del %DataFilesDir%\%DataFile%   
   
//Write to event log   
EventLog.Write Information, 772, %StrInfo%   
[Batch_End]

[OnError_Batch_Begin]
//Write to event log
EventLog.Write Error, 770, %StrError%
// Create file with error message for email body (quotes around the file name are needed if it contains space characters)
DOS echo %StrError%>"%StartDir%\error.txt"
// Send e-mail
DOS %BlatPath%\blat.exe "%StartDir%\error.txt" -t test@mymail43.com -server mail.mymail43.com -f test@mymail43.com -s "%LocalName% SetupBatcher Error"
[OnError_Batch_End]

[Data_Begin]
accountname,fullname,emailaddress,password,domain,pin,accounttype,unit,class,oldunit,oldclass,accountactive,accountdeleted,accountnew,,,,,,
[Data_End]