**US Customs and Border Protection**     **Active Directory System Interfaces for Directory Updates**                                                                    **Restrictions on Disclosure and Use of Data** This document includes data that shall not be disclosed by the Government and shall not be duplicated, used, or disclosed – in whole or in part --- for any purpose other than to support the deployment of Microsoft Exchange at Customs and Border Protection.         **REVISION HISTORY**   | | | | | |---|---|---|---| |Date|Ver|Description|Author| |8/15/2007|.9|Initial Draft|Rob Craig| |2/22/2008|1.0|First Release|Rob Craig| |4/16/2008|1.1|Updated to reflect new DHS Update Script|Rob Craig|        **TABLE OF CONTENTS**   **1.**     **Overview** [1.1.      Global Address List Directory Information](file:///C:\Webtele\WebTele%20AD%20Integration.docx) [1.2.      DHS Directory Synchronization](file:///C:\Webtele\WebTele%20AD%20Integration.docx) **2.**     **GLobal address list directory information** [2.1.      Components](file:///C:\Webtele\WebTele%20AD%20Integration.docx) _2.1.1._       _WebTELE_ _2.1.2._       _Data Reporter_ _2.1.3._       _Integration Scripts_ _2.1.4._       _Active Directory_ [2.2.      Data Flow](file:///C:\Webtele\WebTele%20AD%20Integration.docx) **3.**     **DHS Directory synchronization** [3.1.      Components](file:///C:\Webtele\WebTele%20AD%20Integration.docx) [3.2.      Process Flow](file:///C:\Webtele\WebTele%20AD%20Integration.docx) [3.3.      Troubleshooting Individual Email Address Assignment](file:///C:\Webtele\WebTele%20AD%20Integration.docx) [3.4.      Resetting a User's DHS Address](file:///C:\Webtele\WebTele%20AD%20Integration.docx) **4.**     **WEBTELE INTEGRATION script Version 1.X** **5.**     **OSC Directory integration script Version 2.X**       **1.**              **Overview** Active Directory has replaced other network directory and authentication systems and is currently the enterprise system of record for access to common network and application resources within the Bureau of Customs and Border Protection.  In order to keep this information as current and accurate as possible, Active Directory has multiple interfaces for updating and providing information to and from other systems internal and external to CBP.  The following interfaces are addressed in this document:   **1.1.**         **Global Address List Directory Information** Based on CBP Policy, the mainframe personnel system of record within CBP is TELE and WebTELE (where WebTELE is the web interface application integrated with TELE).  Information contained in TELE includes individual's contact information, title, and organization code.  In order to provide this information to Outlook users, an integration process has been developed to populate Active Directory with this information.  This process is described in this document **1.2.**         **DHS Directory Synchronization** CBP shares a common Global Address List (GAL) with other DHS components.  This process is maintained by the US Coast Guard.  Nightly, CBP provides a complete directory "push" to USCG OSC for the following processes to run:   - Assignment of "DHS E-mail Addresses" to CBP personnel (e.g., [joe.a.anyuser@dhs.gov](mailto:joe.a.anyuser@dhs.gov)), and - Propagation of CBP contact information out to the other components to populate their respective GAL **2.**              **GLobal address list directory information** In order for users of Outlook to view contact properties about users in the GAL, a synchronization process runs to populate data from TELE to Active Directory.  This is run approximately daily and is described in more detail in this section.   **2.1.**         **Components** There are several components of the integration between WebTELE and Active Directory.  These include:   - WebTELE, which reflects the mainframe dataset on each CBP government employee, and _many_, if not most, contractor personnel. - Data Reporter, which is the tool used to extract the "TELE.txt" file from WebTELE; - The ADTELEUpdate.VBS script, which is a custom-developed ADSI (Active Directory Systems Integration) script used to compare the contents of the TELE.txt file with the information in Active Directory, and, as needed, update Active Directory. - Active Directory, which is the enterprise network directory system containing user information on all CBP users authorized to access network resources.   Each of these elements is discussed in more detail below. **2.1.1.**  **WebTELE** WebTELE is the web-enabled interface to an instance of TELE.  It is accessible from CBPNet, and it is built on a WebSphere platform against a DB2 backend.  It is the primary method for users to access and update their contact data. **2.1.2.**  **Data Reporter** Data Reporter is a light-weight application that interfaces with various database types in order to extract and produce data reports in a variety of user-defined formats.  The instance of Data Reporter used for this integration runs against production databases on the TSOE mainframe.  It runs under Production Management's control (as job name KAITELEX) every 24 hours at approximately 10 pm EST.  The output file is FTP'ed down to NWG-EXVS-A-001 to the D:\FTP Data directory as "TELE.TXT" file overwriting the file from the previous output.  The job supplies FTP credentials to NWG-EXVS-A-001 which are contained in the job.   Currently the job is configured to pull only those users with an organization two-letter alpha of "CU" (for Customs).  As of the date on this documentation, approximately 52,000 records are pulled for each job.  This should represent all government employees at CBP with at least a Limited BI, but this does not necessarily include all or most contract staff. **2.1.3.**  **Integration Scripts**   - LaunchTELE.cmd. This is a task run from the NT Scheduler (currently scheduled to run at 2:00 am Mon – Fri).  It launches the following two tasks (in this order): - FileSCRUB.vbs.  This Visual Basic script has one purpose:  to open the TELE.TXT file (the output from Data Reporter) using Windows Notepad and save and close the file.  This has the effect of removing some unwanted characters that exist in some of the WebTELE records.  Specifically, the characters are 00 "low-value" mainframe characters which appear as extended ASCII character 255 in the text file.  These characters disrupt the data mapping process in those records which contain these characters (roughly 5-10% of all records in WebTELE).  Opening and saving the file in Notepad replaces those characters with a simple space which is all that is needed for the process to continue correctly. - ADUpdatev1_0.vbs.  After the file has been scrubbed, the main update script runs.  This is a VB ADSI script which runs within the default domain (ad.cbp.dhs.gov).  It is described in more detail below.   The basic logic of ADUpdate1_0.vbs is as follows:  It loads the TELE.TXT into an array one line at a time and performs an LDAP search for the user based on Hash ID.  Upon a match, it cycles through a series of attributes and compares them to the contents of the array.  It updates or deletes the value in the AD user object based on the comparison and logs any changes in a log file (telechanges.log).  Finally, it sends an email confirmation upon completion describing how many records were checked, how many AD matches were found, how many records were updated, and how many total attributes were modified.  The attributes updates in this version are as follows:   - Government or Contractor status - Title - Office Number (e.g., Suite or Room number) - Street Address - City / State / Zip / Country - Telephone Number - Fax Number - Organization Code - Department (down to the office level – for example, "Office of Field Operations, Office of Border Patrol, Office of Information Technology, etc.)   Within the script there is a constant (maxChanges) that "throttles" the number of user records that will be changed during any one execution of the script.  This number is iterated once each time a change has to be made to a user object (whether that user object has 1 or 5 changes does not matter, only that the specific record was updated in some way).  Once the maxChanges value is reached, the routine is ended and no more changes will be made until the script is executed again.   There are two purposes for this throttle:   1. To minimize a load of "bad data" into Active Directory should the TELE.TXT file contain bad or corrupted data; and 2. To prevent updating a large enough portion of the Global Address List (GAL) during any 24 hour period which may prompt a large number of full Offline Address Book downloads across the network.   Currently maxChanges is normally set to 2000 which means that no more than 2000 user objects will have their records updated during any single run (normally within a 24 hour period).  When the directory is stable, this number is more than sufficient to run through the complete TELE.TXT file and ensure everyone's record is checked for updates.  If for some reason there are a lot of directory changes since the last run, it is possible that it could take several days running the process before all changes have been included and the directory stabilizes.   The following example helps illustrate this:  currently there are over 52,000 records in the TELE.TX output.  If everyone needed to have their record updated with some information, it would take at least 26 days (26 x 2000 changed records per day) to update the entire directory and stabilize.  In the first 25 days of processing, the LAST 2000 records (alphabetically arranged by Hash ID) would not have their user account checked or updated _at all_.  In this example, it would be best to set the value of maxChanges to a higher value to speed through this process more quickly.  It is difficult to determine a "safe value," but 5,000 would likely be well within that zone. **2.1.4.**  **Active Directory** Active Directory is the primary network authentication system for users and applications within CBP.  All CBP employees and contract staff needing access to resources on the network and with a limited Background Investigation should have a user object in Active Directory.  This user object has many attributes, some of which are related to the contact information updated by this process (i.e., Telephone, City, Title, etc.). **2.2.**         **Data Flow**             **3.**              **DHS Directory synchronization** The DHS Directory Synchronization process is necessary for the following:   1. To assign users a DHS or external E-mail address in the format [joe.a.anyuser@dhs.gov](mailto:joe.a.anyuser@dhs.gov); and 2. To propagate CBP contact information to the other DHS components.   There are several components required for this functionality to work properly.  These are listed in section 3.1 below.   **3.1.**         **Components** The following components are required for the OSC Directory Synchronization to work properly.   - LDIFDE Query and Filter.  There are two queries: one for users and one for groups.  The filter is defined in the bat files (CBP_DirExport.bat and CBP_DirExportGROUPS.bat). The actual LDIF query syntax is listed below.  The query is designed to only export AD user objects if they meet the following criteria: - For USERS: - Have an Exchange mailbox (no AD-only accounts) - Do not have "No DHS Sync" in extensionAttribute8 - For GROUPS (including query-based distribution groups): - Have "DHS Sync" in extensionAttribute8.  _Groups by default are NOT sent up to DHS unless they have this value in extensionAttribute8_. - Reformat and Upload Script.  In order to get the output into the format required by OSC, a reformatting script runs against every line from the LDIFDE output.  It performs the following tasks: - Changes the Distinguished Name value to a generic OU value. - Changes group object type labels so that they appear to be user objects with a last name (sn attribute). - FTP's the resulting file (export.dir) with the proper FTP credentials to (insert FTP commands) - Download Script.  Following the upload, a script is used to download the log file from the previous evening.  This is used for troubleshooting purposes. - Log file.  This is the actual file downloaded from OSC (uscs-01-exch2n.log). - DHS Address Download. In order to keep track of user's DHS addresses, there is a script used to update extensionAttribute10 with the user's current DHS address.   The LDIF filter syntax for USERs is:   ldifde -f GALExportFile.ldf -s nwg-addc-a-005 -r "(&(&(& (mailnickname=*) (| (&(objectCategory=person)(objectClass=user)(! extensionAttribute8=No DHS*)(|(homeMDB=*)(msExchHomeServerName=*))) ))))" -l "objectclass,dn,cn,givenName,Initials,Sn,DisplayName,Mail,ExtensionAttribute9,StreetAddress,l,St,PostalCode,co,Title,TelephoneNumber,PhysicalDeliveryOfficeName"   The LDIF filter syntax for GROUPs is:   ldifde -f GALExportFileGROUPS.ldf -s nwg-addc-a-005 -r "(&(objectClass=Group)(mail=*)(extensionAttribute8=DHS Sync*))" -l "objectclass,dn,cn,name,DisplayName,Mail" **3.2.**         **Process Flow** These scripts run on NWG-EXVS-A-001 server in the D:\DirectoryUpload directory, although they could run successfully from any AD server provided they are in D:\DirectoryUpload.  The process is as follows:   1. A scheduled task (currently at 10 pm each night) on NWG-EXVS-A-001 kicks off the following script: GALUploadv2.vbs located in D:\Directory Upload 2. That script kicks of a ldifde export defined in CBP_DirExport.bat which produces a directory export output file called: GALExportFile.ldf.  This is an export of users. 3. The script then kicks off a ldifde export defined in CBP_DirExportGROUPS.bat.  This is an export of Groups to include Query Based Distribution Groups into the file: GALExportFileGROUPS.ldf. 4. The script then appends the contents of GALExportFileGROUPS.ldf to GALExportFile.ldf. 5. The GALUploadv2.vbs script then scrubs GALExportFile.ldf to replace certain values and creates a file ready for upload.  This new file is called: export.dir 6. GALUploadv2.vbs then FTP's the export.dir file to OSC. 7. Finally, the script downloads the OSC log file from the previous evening's run.  This file is called:  uscs-01-exch2n.log.  It is also emailed to the CBP Postmaster account.   During this whole process a log file tracks the process.  The log file is:  GALExport.log   **NOTE**: If this process ever needs to be kicked off manually, it can be done by navigating to the following directory on NWG-EXVS-A-001 D:\DirectoryUpload and double-clicking on the following file:  GALUploadv2-1.vbs (or whatever the latest version is). **3.3.**         **Troubleshooting Individual Email Address Assignment** There are several cases where a user or other object may not properly propagate to OSC and may not successfully receive an email address.  The following items should be checked on the user's user object in Active Directory:   1. Is the object a mailbox-enabled user or Group object in Active Directory (this includes group mailboxes) or a mail-enabled distribution group?  Only these types of AD objects are synchronized with Active Directory. 2. Check the object's Custom attributes. 1. Does extensionAttribute10 have a value?  This should be the DHS address.  If not, then the object is not receiving a DHS address. 2. Check extensionAttribute8.  Is there a "No DHS" or "No DHS Sync" in extensionAttribute8?  If so, then the object will not synchronize with OSC.  If this is incorrect, remove the value from extensionAttribute8.  The object should synchronize that evening. 3. If the object is a Distribution or Query-Based Distribution Group, then extensionAttribute8 must have "DHS Sync" or it will not be sent to OSC. 4. Check extensionAttribute9 for a "GOVERNMENT" or a "CONTRACTOR" value.  Strictly speaking this value does not HAVE to be here, as OSC will assume "GOVERNMENT," but ensure the user has the proper value in extensionAttribute9. 3. Ensure that there are no periods in the user object's name fields, to include first name, middle initial, or last name.  This will cause the creation of the "local LAN alias" value at DHS to fail.  For example: 1. The user's last name in Active Directory is "SMITH JR." instead of "SMITH JR" (or "SMITHJR") 2. The user's middle initial contains a period such as "A." instead of "A" 3. The user's full name has a period in it such as "SMITH, JOHN A." instead of "SMITH, JOHN A" (strictly speaking this should not be an issue for OSC, but it does not comply with CBP standard). 4. Use the Active Directory "rename" task to correct any of these issues. 4. Check Lotus Notes email address versus Active Directory email address (**NOTE:  This only applies to troubleshooting following the immediate conversion to Active Directory data synchronization**).  If the email address in Lotus Notes is different than the value in Active Directory, OSC will treat the user as a new user and assign a new DHS address to that user.  For example:  User John A. Smith's email address is listed in Lotus Notes as [JOHN.SMITH@CBP.DHS.GOV](mailto:JOHN.SMITH@CBP.DHS.GOV) while his actual email address in Active Directory is [JOHN.A.SMITH@CBP.DHS.GOV](mailto:JOHN.A.SMITH@CBP.DHS.GOV).  In this case, John Smith will receive a new DHS address as a new user once the conversion to Active Directory synchronization takes place.  Correcting this situation will require opening a help ticket with OSC.   The day following corrections to a user's account, check the user object and extensionAttribute10 to verify that the user received a DHS email address.  This can also be validated against the DHS White Pages.  If the user has received an improper DHS address (i.e., they lost their original email address because they fell out of synchronization), a help desk ticket should be opened with OSC.   **3.4.**         **Resetting a User's DHS Address** If a user needs to have their DHS address reassigned, the process is as follows (note that this does not apply to GROUPS):   1. (This is the only part of the process that requires an administrator to perform an action.  The rest of the steps are automated.)  In the USER'S Active Directory object go to Exchange Advanced tab and click on Custom Attributes.  Make extensionAttribute8 "No DHS Sync Reset" as illustrated below. 1. That evening, the object will NOT be exported to OSC, and the user will not have a DHS address associated with their internal CBP email address. 2. The next morning, a script will run which will update the user object to reflect no DHS address in extensionAttribute10 (to show that the user does not have a DHS address) and extensionAttribute8 will say that a reset is pending: 3. That evening the user object will go to DHS as part of the export and should get assigned a new DHS address based on the format FN.MI.LN@DHS.GOV. 4. The next morning the same script will update extensionAttribute8 on the user object to reflect that the DHS address was reset and extensionAttribute10 will reflect that DHS address.   Resetting the address of a Group is still a manual process.  An administrator should remove the "DHS Sync" from extensionAttribute8.  The next day the administrator should add "DHS Sync" back into extensionAttribute8.  This process will be automated in the near future.     **4.**              **WEBTELE INTEGRATION script Version 1.X** CONST ForReading=1 CONST ForAppending=8 Const ADS_PROPERTY_CLEAR = 1 Const ADS_PROPERTY_UPDATE = 2 Const ADS_PROPERTY_APPEND = 3 Const ADS_PROPERTY_DELETE = 4     On Error Resume Next   set conn = createobject("ADODB.Connection") set com = createobject("ADODB.Command") Set iAdRootDSE = GetObject("LDAP://RootDSE")   strDefaultNamingContext = iAdRootDSE.Get("defaultNamingContext") Conn.Provider = "ADsDSOObject"   Conn.Open "ADs Provider"   svcQuery = "\;(&(mailnickname=EFB60MN)(objectClass=user));cn,name,objectSID"   'MsgBox svcQuery   Com.ActiveConnection = Conn Com.CommandText = svcQuery Set Rs = Com.Execute   Dim strTeleFile, strADMissing, dtFileDate, objTeleFile, objLogFile, arrayTele, inputLine, strDN, strDNSearch Dim strLogFileName, intChangeCounter, intPersonChange, blnPersonChange, intTotalRecords, intTotalMatches, intADMissing Dim intCountry Dim maxChanges   '********************************ADMINISTRATOR SWITCHES**************************************************   'Use to set maximum number of changes maxChanges = 1000 'Use to determine whether to update Department: 1 = Yes; 0 = No bnlDeptUpdate=0   '********************************************************************************************************   strTelefile = "D:\FTP Data\TELE.TXT" strLogFileName = "D:\FTP Data\teleChanges.log" strADMissing = "D:\FTP Data\ADMissing.txt"   Set objFSO=CreateObject("Scripting.FileSystemObject") Set objFSOlog=CreateObject("Scripting.FileSystemObject") Set objFSOADMissing=CreateObject("Scripting.FileSystemObject")   Set objTeleFile=ObjFSO.OpenTextFile(strTelefile, ForReading) Set objLogFile=ObjFSOlog.OpenTextFile(strLogFileName, ForAppending) Set objADMissingFile=ObjFSOADMissing.OpenTextFile(strADMissing, ForAppending)   objLogFile.WriteLine Now & ": Started Processing"   intChangeCounter = 0 intPersonChange = 0   Do Until objTeleFile.AtEndOfStream If intPersonChange = maxChanges Then Exit Do               intTotalRecords = intTotalRecords + 1             blnPersonChange = 0               inputLine=objTeleFile.ReadLine               arrayTele=Split(inputLine,"=")               'MsgBox "Hash: " & RTrim(arrayTele(0)) & " " & RTrim(arrayTele(1)) & " " & RTrim(arrayTele(8))               svcQuery = "\;(&(samAccountName=" & RTrim(arrayTele(0)) & ")(objectClass=user));cn, distinguishedName"               'MsgBox svcQuery               Com.ActiveConnection = Conn             Com.CommandText = svcQuery             Set Rs = Com.Execute               'MsgBox Rs.Recordcount               If Rs.Recordcount = 0 Then                         If RTrim(arrayTele(17)) = "CU" Then                                     objADMissingFile.WriteLine Now & ", " & RTrim(arrayTele(0)) & ", " & RTrim(arrayTele(5)) & ", " & RTrim(arrayTele(4)) & " " & RTrim(arrayTele(3)) & ", " & RTrim(arrayTele(2))                         End If                         intADMissing=intADMissing + 1               Else                         intTotalMatches=intTotalMatches+1                         strDN=rs.fields("cn")                                         'wscript.echo strDN                         strDN=rs.fields("distinguishedName")                         'wscript.echo strDN                         'MsgBox "strDN: " & strDNSearch                           'GET USER OBJECT FROM AD                         Set objUser = GetObject ("LDAP://" & strDN)   '************************************************************************************************************ 'CHECK FOR NEED TO CHANGE TO GOVERNMENT                         If RTrim(arrayTele(1)) = "Y" Then                                     If objUser.extensionAttribute9 = "CONTRACTOR" Then                                                 objUser.Put "extensionAttribute9","GOVERNMENT"                                                 objUser.SetInfo                                                 'Update log file                                                 objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Updated STATUS: GOVERNMENT"                                                 intChangeCounter=intChangeCounter + 1                                                 blnPersonChange = 1                                                                End If                                     'CHECK IF BLANK                                     If objUser.extensionAttribute9 = "" Then                                                 objUser.Put "extensionAttribute9","GOVERNMENT"                                                 objUser.SetInfo                                                 'Update log file                                                 objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Updated STATUS: GOVERNMENT"                                                 intChangeCounter=intChangeCounter + 1                                                 blnPersonChange = 1                                                                            End If                           End If   '************************************************************************************************************   '************************************************************************************************************ 'CHECK FOR NEED TO CHANGE TO CONTRACTOR                         If RTrim(arrayTele(1))="N" Then                                     If objUser.extensionAttribute9 = "GOVERNMENT" Then                                                 objUser.Put "extensionAttribute9","CONTRACTOR"                                                 objUser.SetInfo                                                 'Update log file                                                 objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Updated STATUS: CONTRACTOR"                                                 intChangeCounter=intChangeCounter + 1                                                 blnPersonChange = 1                                                                            End If                                     'CHECK IF BLANK                                     If objUser.extensionAttribute9 = "" Then                                                 objUser.Put "extensionAttribute9","CONTRACTOR"                                                 objUser.SetInfo                                                 'Update log file                                                 objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Updated STATUS: CONTRACTOR"                                                 intChangeCounter=intChangeCounter + 1                                                 blnPersonChange = 1                                                                            End If                           End If   '************************************************************************************************************                         '************************************************************************************************************ 'CHECK FOR TITLE CHANGE                         If arrayTele(6)="                                      " Then                                     Dim strTitle                                     strTitle = ""                                     If strtTitle \<\> objUser.title Then                                                 objUser.PutEx ADS_PROPERTY_CLEAR, "title", 0                                                 objUser.SetInfo                                                 'Update log file                                                 objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Deleted Title"                                                 intChangeCounter=intChangeCounter + 1                                                 blnPersonChange = 1                                                 'Set person change counter                                     End if                                                 Else                                     If RTrim(arrayTele(6)) \<\> objUser.title Then                                                 'MsgBox "Title Needs to Change! " & objUser.userName                                                 'Delete if Null Value                                                 If RTrim(arrayTele(6)) = "" Then                                                             objUser.PutEx ADS_PROPERTY_CLEAR, "title", 0                                                             objUser.SetInfo                                                 End If                                                 objUser.Put "title",RTrim(arrayTele(6))                                                 objUser.SetInfo                                                 'Update log file                                                 objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Updated Title: " & RTrim(arrayTele(6))                                                 intChangeCounter=intChangeCounter + 1                                                 blnPersonChange = 1                                                 'Set person change counter                                     End If                         End If     '************************************************************************************************************   '************************************************************************************************************ 'CHECK FOR OFFICE CHANGE                         If arrayTele(7)="        " Then                                     Dim strOffice                                     strOffice = ""                                     If strtOffice \<\> objUser.physicalDeliveryOfficeName Then                                                 objUser.PutEx ADS_PROPERTY_CLEAR, "physicalDeliveryOfficeName", 0                                                 objUser.SetInfo                                                 'Update log file                                                 objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Deleted Office"                                                 intChangeCounter=intChangeCounter + 1                                                 blnPersonChange = 1                                                 'Set person change counter                                     End if                                                 Else                                     If RTrim(arrayTele(7)) \<\> objUser.physicalDeliveryOfficeName Then                                                 'MsgBox "Office Needs to Change! "& objUser.userName                                                 'Delete if Null Value                                                 If RTrim(arrayTele(7)) = "" Then                                                             objUser.PutEx ADS_PROPERTY_CLEAR, "physicalDeliveryOfficeName", 0                                                             objUser.SetInfo                                                 End If                                                 objUser.Put "physicalDeliveryOfficeName",RTrim(arrayTele(7))                                                 objUser.SetInfo                                                 'Update log file                                                 objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Updated Office: " & RTrim(arrayTele(7))                                                 intChangeCounter=intChangeCounter + 1                                                 blnPersonChange = 1                                                 'Set person change counter                                     End If                         End If     '************************************************************************************************************   '************************************************************************************************************ 'Check for PHONE NUMBER CHANGE                           If arrayTele(8)="   -   -    " Then                                     strTelephone = ""                                     If strTelephone \<\> objUser.telephoneNumber Then                                                 'Delete if Null Value                                                 objUser.PutEx ADS_PROPERTY_CLEAR, "telephoneNumber", 0                                                 objUser.SetInfo                                                 objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Deleted Telephone"                                                 intChangeCounter=intChangeCounter + 1                                                 blnPersonChange = 1                                     End If                           Else                                                             strTelephone = RTrim(arrayTele(8))                                     If RTrim(arrayTele(9)) \<\> "" Then strTelephone = strTelephone & " x" & RTrim(arrayTele(9))                                     If strTelephone \<\> objUser.telephoneNumber Then                                                 'Delete if Null Value                                                 If strTelephone = "" Then                                                             objUser.PutEx ADS_PROPERTY_CLEAR, "telephoneNumber", 0                                                             objUser.SetInfo                                                 End If                                                 'MsgBox "Phone number needs to Change!"                                                 objUser.Put "telephoneNumber",strTelephone                                                 objUser.SetInfo                                                 objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Updated Telephone: " & strTelephone                                                 intChangeCounter=intChangeCounter + 1                                                 blnPersonChange = 1                                                 'Set person change counter                                     End If                         End If     '************************************************************************************************************   '************************************************************************************************************ 'CHECK FOR CHANGE IN ADDRESS:  Need to check if ADDR1 or ADDR2 Changed                           If arrayTele(10) = "UNKNOWN                                 " Then                                     Dim strAddress                                     strAddress = ""                                                 If strAddress \<\> objUser.streetAddress Then                                                                                        'Delete if Null Value                                                             objUser.PutEx ADS_PROPERTY_CLEAR, "streetAddress", 0                                                             objUser.SetInfo                                                             objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Deleted Address"                                                             intChangeCounter=intChangeCounter + 1                                                             blnPersonChange = 1                                                             'Set person change counter                                                 End If                           Else                                       strAddress = RTrim(arrayTele(10))                                       If IsNUll(arrayTele(11)) Then                                                 strAddress=strAddress                                     Else                                                 If RTrim(arrayTele(11)) \<\> "" Then                                                             Dim strAddress2                                                             strAddress2 = RTrim(arrayTele(11))                                                             strAddress = strAddress & chr(13) & chr(10) & strAddress2                                                 End If                                     End If                                     If strAddress \<\> objUser.streetAddress Then                                                 'MsgBox "Address needs to Change!"                                                                            'Delete if Null Value                                                 If strAddress = "" Then                                                             objUser.PutEx ADS_PROPERTY_CLEAR, "streetAddress", 0                                                             objUser.SetInfo                                                 End If                                                 objUser.Put "streetAddress",strAddress                                                 objUser.SetInfo                                                 objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Updated Address: " & strAddress                                                 intChangeCounter=intChangeCounter + 1                                                 blnPersonChange = 1                                                 'Set person change counter                                             End If                         strAddress=""                         End If   '************************************************************************************************************   '************************************************************************************************************                        'CHECK CITY                         If arrayTele(12)="                    " Then                                     Dim strCity                                     strCity = ""                                                 If strCity \<\> objUser.l Then                                                                                           'Delete if Null Value                                                             objUser.PutEx ADS_PROPERTY_CLEAR, "l", 0                                                             objUser.SetInfo                                                             objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Deleted City"                                                             intChangeCounter=intChangeCounter + 1                                                             blnPersonChange = 1                                                             'Set person change counter                                                 End If                           Else                                                     'MsgBox "AD City: " & objUser.l & "; and TeleCity: " & RTrim(arrayTele(12))                                     If RTrim(arrayTele(12)) \<\> objUser.l Then                                                 'MsgBox "City Needs to Change! "& objUser.cn                                                 'Delete if Null Value                                                 If RTrim(arrayTele(12)) = "" Then                                                             objUser.PutEx ADS_PROPERTY_CLEAR, "l", 0                                                             objUser.SetInfo                                                 End If                                                 objUser.Put "l",RTrim(arrayTele(12))                                                 objUser.SetInfo                                                 'Update log file                                                 objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Updated City: " & RTrim(arrayTele(12))                                                 intChangeCounter=intChangeCounter + 1                                                 blnPersonChange = 1                                                 'Set person change counter                                     End If                                     End If     '************************************************************************************************************   '************************************************************************************************************ 'CHECK STATE                             If arrayTele(13)="  " Then                                     Dim strSt                                     strSt = ""                                                 If strSt \<\> objUser.st Then                                                                                            'Delete if Null Value                                                             objUser.PutEx ADS_PROPERTY_CLEAR, "st", 0                                                             objUser.SetInfo                                                             objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Deleted State"                                                             intChangeCounter=intChangeCounter + 1                                                             blnPersonChange = 1                                                             'Set person change counter                                                 End If                         Else                                     If RTrim(arrayTele(13)) \<\> objUser.st Then                                                 'MsgBox "State Needs to Change! " & objUser.cn                                                 'Delete if Null Value                                                 If RTrim(arrayTele(13)) = "" Then                                                             objUser.PutEx ADS_PROPERTY_CLEAR, "st", 0                                                             objUser.SetInfo                                                 End If                                                 objUser.Put "st",RTrim(arrayTele(13))                                                 objUser.SetInfo                                                 'Update log file                                                 objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Updated State: " & RTrim(arrayTele(13))                                                 intChangeCounter=intChangeCounter + 1                                                 blnPersonChange = 1                                                 'Set person change counter                                     End If                                     End If     '************************************************************************************************************   '************************************************************************************************************ 'CHECK COUNTRY                         Dim strCountry                         If arrayTele(14)="  " Then                                     strCountry = ""                                     If strCountry \<\> objUser.c Then                                                 'Delete if Null Value                                                 objUser.PutEx ADS_PROPERTY_CLEAR, "c", 0                                                 objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Deleted Country"                                                 intChangeCounter=intChangeCounter + 1                                                 blnPersonChange = 1                                                 'Set person change counter                                     End If                         Else                                     If RTrim(arrayTele(14)) \<\> objUser.c Then                                                 Dim strCO                                                 Dim strCC                                                 strCountry=""                                                 'MsgBox "Country Needs to Change!"                                                 strCountry = RTrim(arrayTele(14))                                                                                                 Select Case strCountry                                                             Case strCountry="US"                                                                         strCO="United States"                                                                         strCC="840"                                                             Case strCountry="CA"                                                                         strCO="Canada"                                                                         strCC="124"                                                             Case strCountry="UK"                                                                         strCountry="GB"                                                                         strCO="United Kingdom"                                                                         strCc="826"                                                             Case strCountry="CN"                                                                         strCO="China"                                                                         strCc="156"                                                             Case strCountry="NL"                                                                         strCO="Netherlands"                                                                         strCc="528"                                                             Case strCountry="DE"                                                                         strCO="Germany"                                                                         strCc="276"                                                                                                                  Case strCountry="IE"                                                                         strCO="Ireland"                                                                         strCc="372"                                                             Case strCountry="MX"                                                                         strCO="Mexico"                                                                         strCc="484"                                                             Case strCountry="IT"                                                                         strCO="Italy"                                                                         strCc="380"                                                                                                                  Case strCountry="BS"                                                                         strCO="Bahamas"                                                                         strCc="44"                                                             Case strCountry="BM"                                                                         strCO="Bermuda"                                                                         strCc="60"                                                             Case strCountry="AW"                                                                         strCO="Aruba"                                                                         strCc="533"                                                             Case strCountry="DO"                                                                         strCO="Dominican Republic"                                                                         strCc="214"                                                             Case strCountry="SG"                                                                         strCO="Singapore"                                                                         strCC="702"                                                             Case strCountry="JP"                                                                         strCO="Japan"                                                                         strCC="392"                                                             Case strCountry="GR"                                                                         strCO="Greece"                                                                         strCC="300"                                                             Case Else                                                                         'strCountry="US"                                                                         'strCO="United States"                                                                         'strCC="840"                                                 End Select                                                               objUser.Put "c",strCountry                                                             objUser.Put "co",strCO                                                             objUser.Put "countryCode",strCC                                                             objUser.SetInfo                                                             'Update log file                                                             objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Updated COUNTRY: " & RTrim(arrayTele(14))                                                             intChangeCounter=intChangeCounter + 1                                                             blnPersonChange = 1                                                             'Set person change counter                                       End If                                     End If     '************************************************************************************************************   '************************************************************************************************************ 'CHECK ZIP                           If arrayTele(15) = "         " Then                                     Dim strZIP                                     strZIP = ""                                                 If strZIP \<\> objUser.postalCode Then                                                                                        'Delete if Null Value                                                             objUser.PutEx ADS_PROPERTY_CLEAR, "postalCode", 0                                                             objUser.SetInfo                                                             objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Deleted ZIP"                                                             intChangeCounter=intChangeCounter + 1                                                             blnPersonChange = 1                                                             'Set person change counter                                                 End If                           Else                                     If RTrim(arrayTele(15)) \<\> objUser.postalCode Then                                                 'MsgBox "ZIP Needs to Change! " & objUser.cn                                                 'Delete if Null Value                                                 If RTrim(arrayTele(15)) = "" Then                                                             objUser.PutEx ADS_PROPERTY_CLEAR, "postalCode", 0                                                             objUser.SetInfo                                                 End If                                                 objUser.Put "postalCode",RTrim(arrayTele(15))                                                 objUser.SetInfo                                                 'Update log file                                                 objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Updated ZIP: " & RTrim(arrayTele(15))                                                 intChangeCounter=intChangeCounter + 1                                                 blnPersonChange = 1                                                 'Set person change counter                                     End If                         End If   '************************************************************************************************************     '************************************************************************************************************ 'CHECK FAX                         If arrayTele(18)="                    " Then                                     Dim strFax                                     strFax = ""                                                 If strFax \<\> objUser.facsimileTelephoneNumber Then                                                                                       'Delete if Null Value                                                             objUser.PutEx ADS_PROPERTY_CLEAR, "facsimileTelephoneNumber", 0                                                             objUser.SetInfo                                                             objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Deleted FAX"                                                             intChangeCounter=intChangeCounter + 1                                                             blnPersonChange = 1                                                             'Set person change counter                                                 End If                         Else                                     If RTrim(arrayTele(18)) \<\> objUser.facsimileTelephoneNumber Then                                                 'MsgBox "FAX Needs to Change! " & objUser.cn                                                 'Delete if Null Value                                                 If RTrim(arrayTele(18)) = "" Then                                                             objUser.PutEx ADS_PROPERTY_CLEAR, "facsimileTelephoneNumber", 0                                                             objUser.SetInfo                                                 End If                                                 objUser.Put "facsimileTelephoneNumber",RTrim(arrayTele(18))                                                 objUser.SetInfo                                                 'Update log file                                                 objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Updated FAX: " & RTrim(arrayTele(18))                                                 intChangeCounter=intChangeCounter + 1                                                 blnPersonChange = 1                                                 'Set person change counter                                     End If                           End If     '************************************************************************************************************   '************************************************************************************************************ 'MAKE COMPANY CBP                         Dim strCompany                         strCompany= "CBP"                         If objUser.company \<\> strCompany Then                                     objUser.Put "company", strCompany                                     objUser.SetInfo                                     objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Updated Company"                         End If     '************************************************************************************************************                         '************************************************************************************************************ 'CHECK MOBILE - CURRENTLY DISABLED                         'If IsNull(arrayTele(19)) Then                         '           Dim strMobile                         '           strMobile = ""                         '           If strMobile \<\> objUser.Mobile Then                                                      '                       'Delete if Null Value                         '                       objUser.PutEx ADS_PROPERTY_CLEAR, "Mobile", 0                         '                       objUser.SetInfo                         '                       objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Deleted Mobile"                         '                       intChangeCounter=intChangeCounter + 1                         '                       blnPersonChange = 1                         '                       'Set person change counter                         '           End If                           'Else                                     'If RTrim(arrayTele(19)) \<\> objUser.mobile Then                                                 'MsgBox "Mobile Needs to Change!"                                                 'Delete if Null Value                                                 'If RTrim(arrayTele(19)) = "" Then                                                             'objUser.PutEx ADS_PROPERTY_CLEAR, "mobile", 0                                                             'objUser.SetInfo                                                 'End If                                                 'objUser.Put "mobile",RTrim(arrayTele(19))                                                 'objUser.SetInfo                                                 'Update log file                                                 'objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Updated Mobile: " & RTrim(arrayTele(19))                                                 'intChangeCounter=intChangeCounter + 1                                                 'blnPersonChange = 1                                                 'Set person change counter                                     'End If                         'End If     '************************************************************************************************************   '************************************************************************************************************ 'CHECK Org Code                         If IsNull(arrayTele(16)) Then                                     Dim strOrgCode                                     strOrgCode = ""                                                 If strOrgCode \<\> objUser.extensionAttribute4 Then                                                                                           'Delete if Null Value                                                             objUser.PutEx ADS_PROPERTY_CLEAR, "extensionAttribute4", 0                                                             objUser.SetInfo                                                             objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Deleted ORG CODE"                                                             intChangeCounter=intChangeCounter + 1                                                             blnPersonChange = 1                                                             'Set person change counter                                                 End If                         Else                                     If RTrim(arrayTele(16)) \<\> objUser.extensionAttribute4 Then                                                 'MsgBox "FAX Needs to Change! " & objUser.cn                                                 'Delete if Null Value                                                 If RTrim(arrayTele(16)) = "" Then                                                             objUser.PutEx ADS_PROPERTY_CLEAR, "extensionAttribute4", 0                                                             objUser.SetInfo                                                 End If                                                 objUser.Put "extensionAttribute4",RTrim(arrayTele(16))                                                 objUser.SetInfo                                                 'Update log file                                                 objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Updated ORG CODE: " & RTrim(arrayTele(16))                                                 intChangeCounter=intChangeCounter + 1                                                 blnPersonChange = 1                                                 'Set person change counter                                     End If                           End If   '************************************************************************************************************   '************************************************************************************************************ 'CHECK DEPARTMENT                         If bnlDeptUpdate=1 Then                                                           Dim strDepartmentCode1                                     Dim strDepartmentCode                                     Dim strTeleDept                                     Dim strDepartment                                                               strDepartmentCode1=objUser.extensionAttribute4                                     strDepartmentCode=Left(strDepartmentCode1,2)                                     'MsgBox strDepartmentCode                                     'strDepartmentCode1=CStr(strDepartmentCode)                                     Select Case strDepartmentCode                                                             Case "01"                                                                         strTeleDept="OFFICE OF THE COMMISSIONER"                                                             Case "02"                                                                         strTeleDept="OFFICE OF THE CHIEF COUNSEL"                                                             Case "04"                                                                         strTeleDept="OFFICE OF INVESTIGATIONS"                                                                                                                        Case "07"                                                                         strTeleDept="OFC OF INTERNAL AFFAIRS"                                                             Case "08"                                                                         strTeleDept="OFC INTRNTNL AFFRS & TRD RLTS"                                                             Case "11"                                                                         strTeleDept="OFFICE OF HUMAN RESOURCES MGMT"                                                             Case "12"                                                                         strTeleDept="OFFICE OF CONGRESSIONAL AFFAIR"                                                             Case "13"                                                                         strTeleDept="OFFICE OF FIELD OPERATIONS"                                                                         'MsgBox strTeleDept                                                             Case "16"                                                                         strTeleDept="OFFICE OF FINANCE (CFO)"                                                             Case "18"                                                                         strTeleDept="OFFICE OF TRAINING/DEVELOPMENT"                                                             Case "19"                                                                         strTeleDept="OFFICE OF PUBLIC AFFAIRS"                                                             Case "22"                                                                         strTeleDept="AC, CBP AIR AND MARINE"                                                             Case "23"                                                                         strTeleDept="OIT"                                                             Case "24"                                                                         strTeleDept="OFFICE OF INTERNATIONAL TRADE"                                                             Case "80"                                                                         strTeleDept="OFC OF ASSET FORFEITURE MGT"                                                             Case "95"                                                                         strTeleDept="OFFICE OF BORDER PATROL"                                                             Case Else                                                                         strTeleDept=""                                     End Select                                                 'MsgBox strTeleDept                                                                  If strTeleDept \<\> objUser.department Then                                                                                           objUser.Put "department", strTeleDept                                                             objUser.SetInfo                                                             objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Updated DEPT: " & strTeleDept                                                             intChangeCounter=intChangeCounter + 1                                                             blnPersonChange = 1                                                             'Set person change counter                                                 End If                         End If '************************************************************************************************************     '************************************************************************************************************ 'CHECK Update Date                         If IsNull(arrayTele(20)) Then                                     Dim strUpdateDate                                     strUpdateDate = ""                                                 If strUpdateDate \<\> objUser.extensionAttribute2 Then                                                                                       'Delete if Null Value                                                             objUser.PutEx ADS_PROPERTY_CLEAR, "extensionAttribute2", 0                                                             objUser.SetInfo                                                             objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Deleted UPDATE DATE"                                                             intChangeCounter=intChangeCounter + 1                                                             blnPersonChange = 1                                                             'Set person change counter                                                 End If                         Else                                     If RTrim(arrayTele(20)) \<\> objUser.extensionAttribute2 Then                                                 'MsgBox "Update Date Needs to Change! " & objUser.cn                                                 'Delete if Null Value                                                 If RTrim(arrayTele(20)) = "" Then                                                             objUser.PutEx ADS_PROPERTY_CLEAR, "extensionAttribute2", 0                                                             objUser.SetInfo                                                 End If                                                 objUser.Put "extensionAttribute2",RTrim(arrayTele(20))                                                 objUser.SetInfo                                                 'Update log file                                                 objLogFile.WriteLine Now & ": " & RTrim(arrayTele(0)) & ": Updated UPDATE DATE: " & RTrim(arrayTele(20))                                                 intChangeCounter=intChangeCounter + 1                                                 blnPersonChange = 1                                                 'Set person change counter                                     End If                           End If   '************************************************************************************************************ 'If user record changed then count toward max changes.                         If blnPersonChange = 1 Then                                     intPersonChange=intPersonChange + 1                         End If '************************************************************************************************************               End If   '************************************************************************************************************   Loop               objLogFile.WriteLine Now & ": " & "Total Records Changed = " & intPersonChange & "; Total Changes: " & intChangeCounter & " Total Records: " & intTotalRecords & " Total Matches: " & intTotalMatches '           MsgBox "Total Records Changed = " & intPersonChange & "; Total Changes: " & intChangeCounter & " Total Records: " & intTotalRecords & " Total Matches: " & intTotalMatches   Set objMessage = CreateObject("CDO.Message") objMessage.Subject = "DIRECTORY CHANGES SUMMARY for " & NOW objMessage.From = "postmaster@cbp.dhs.gov" objMessage.To = "rob.craig@cbp.dhs.gov" objMessage.TextBody = "Records Checked:" & intTotalRecords & "; AD Matches:" & intTotalMatches & "; Records Changed: " & intPersonChange & "; Total Changes: " & intChangeCounter & "; Missing: " & intADMissing objMessage.Send                 objTeleFile.Close             objLogFile.Close             objADMissingFile.Close             Set ObjFSOlog = Nothing             Set ObjFSOADMissing = Nothing             set fso = nothing             set conn = nothing             set com = nothing     **5.**              **OSC Directory integration script Version 2.X**     'Global Address List Export 'Darren Castro, Northrop-Grumman, ITSG 2/1/2007 'Modified for CBP by ROB CRAIG on 12/1/2007 ' 'The purpose of this script is to read the Global Address List Active Directory and export that list to OSC Environment. 'The search script will execute as follows:   'Create a LOG file. 'An event description will be written to the log file as each sequence is completed. 'An event description will be written to the log file as DN sequence is completed.   'Execute the LDIFDE DOS command to create the initial export file. 'Write event to LOG file.   'Create a new (empty) export file. 'Write event to LOG file.   'Open LDIF data file and read each LINE. 'If LINE begins with DN then Parse DN and create new DN 'Write new DN to export file. 'Write event to LOG file.   'If LINE does not begin with DN then write LINE to export file. 'Continue with each LINE until End Of File. 'Write EOF event to LOG file.   'Transfer the export file to OSC. 'Write event to LOG file.   Option Explicit   Dim strGALLogFile, strMaintMode, strGALExportFile, strGALUploadFile, strGALGroupsFile, strOLDLine, strTextLine, strNEWDN, strDownLoadSuccess Dim strFTPServerIP, strFTPUserName, strFTPPassword, strNewClass, blnstrNewClass, strNewExtensionAttribute9, intGroups, strCN Dim UserCount, SkipLine Dim arrDN Dim objGALLogFile, objGALExportFile, objGALUploadFile, objGALGroupsFile 'File Names Created/Read/Modified Dim objfso 'FileSystemObject Dim WshShell 'Windows Scripting Host Shell (DOS) Operations   Const ForAppending = 8 Const ForReading = 1   UserCount = 0 SkipLine = 0     Set objFSO = CreateObject("Scripting.FileSystemObject")   '************************************************************************************* strMaintMode = 0 'Script DeBug/Maintenance Mode 1=Echo Messages 0=Do Not Echo Messages '*************************************************************************************   If strMaintMode=1 Then On Error Resume Next If strMaintMode=1 Then Wscript.Echo "DeBug/Maintenance Mode ON" If strMaintMode=1 Then Wscript.Echo "Go"   '******************************************************************************************************************************** strGALLogFile="D:\DirectoryUpload\GALExport.log"      'Name of LOG file strGALExportFile="D:\DirectoryUpload\GALExportFile.ldf"          'Name of LDIF file to READ.  This file name must be SAME as file name in CBP_DirExport.bat strGALUploadFile="D:\DirectoryUpload\export.dir"         'Name of (modified) file to create/upload to OSC strGALGroupsFile="D:\DirectoryUpload\GALExportFileGROUPS.ldf" 'Name of Groups File '********************************************************************************************************************************   If strMaintMode=1 Then Wscript.Echo "strGALLogFile: " & strGALLogFile   'Create a LOG file Set objGALLogFile = objFSO.CreateTextFile(strGALLogFile) objGALLogFile.Close   If strMaintMode=1 Then Wscript.Echo "LogFile created: " & strGALLogFile   If objFSO.FileExists(strGALLogFile) Then 'Write log event LOG file created Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True)             objGALLogFile.Write (NOW & " Log File: " & strGALLogFile & " created." & VBCrLF)                         objGALLogFile.Close Else 'Create Log File Failed - End Script        WScript.quit End If   If objFSO.FileExists("D:\DirectoryUpload\CBP_DirExport.bat") Then 'Write log LDIF Batch file found. Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True)             objGALLogFile.Write (NOW & " LDIFDE batch file: " & "D:\DirectoryUpload\CBP_DirExport.bat" & " found." & VBCrLF)                         objGALLogFile.Close Else 'Write log LDIF Batch file NOT found. End Script Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True)             objGALLogFile.Write (NOW & " LDIFDE batch file: " & "D:\DirectoryUpload\CBP_DirExport.bat" & " NOT found." & VBCrLF)             objGALLogFile.Write (NOW & " Script Abortedted.")                         objGALLogFile.Close WScript.quit End If   'Execute LDIFDE DOS command to create initial export file. Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.run "D:\DirectoryUpload\CBP_DirExport.bat", 1, true 'Run the batch file to execute LDIFDE   If objFSO.FileExists(strGALExportFile) Then 'Write log event LDIF Export file created Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True)             objGALLogFile.Write (NOW & " " & "Export file: " & strGALExportFile & " created." & VBCrLF)                         objGALLogFile.Close Else 'Write log event LDIF Export file NOT created Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True)             objGALLogFile.Write (NOW & " " & "Export file: " & strGALExportFile & " NOT created." & VBCrLF)             objGALLogFile.Write (NOW & " Script Aborted.")                         objGALLogFile.Close    WScript.Quit   End If   '**********************NEW   '1. Create Groups File '2. Read one line at a time from CBP_DIRExportGroups.bat and Append to strGALExportFile '3. Write to log file number of entries appended '4. Close file     '1. Execute LDIFDE DOS command to create GROUPS export file Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.run "D:\DirectoryUpload\CBP_DirExportGROUPS.bat", 1, true 'Run the batch file to execute LDIFDE   'LOG Creation of File If objFSO.FileExists(strGALGroupsFile) Then 'Write log event LDIF Export file created Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True)             objGALLogFile.Write (NOW & " " & "Export file: " & strGALGroupsFile & " created." & VBCrLF)                         objGALLogFile.Close Else 'Write log event LDIF Export file NOT created Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True)             objGALLogFile.Write (NOW & " " & "Export file: " & strGALGroupsFile & " NOT created." & VBCrLF)             objGALLogFile.Write (NOW & " Script Aborted.")                         objGALLogFile.Close    WScript.Quit   End If   '2. Read line by line from strGALGroupsFile and write to strGALExportFile     set objGALGroupsFile = objFSO.OpenTextFile(strGALGroupsFile, 1) Set objGALExportFile = objFSO.OpenTextFile(strGALExportFile, ForAppending, True) Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True)   Do Until objGALGroupsFile.AtEndOfStream             strTextLine = objGALGroupsFile.ReadLine             If intGroups=0 Then                         intGroups=intGroups+1             Else                         If Instr(strTextLine, "dn:") Then                                     intGroups = intGroups + 1                         Else                                     If Instr(strTextLine, "cn:") Then                                                 strCN=Mid(strTextLine,4)                                     End If                           End If                         If Instr(strTextLine, "cn:") Then                                     objGALExportFile.Write (strTextLine & VBCrLF)                                     objGALExportFile.Write ("sn:" & strCN & VBCrLF)                         Else                                     objGALExportFile.Write (strTextLine & VBCrLF)                         End If             End If   Loop intGroups = intGroups-1   '3. Log Groups created objGALLogFile.Write (NOW & " " & intGroups & " Groups Written.") '4. CLose Files objGALLogFile.Close objGALGroupsFile.Close objGALExportFile.Close     '**********************NEW   'Create Upload File Set objGALUploadFile = objFSO.CreateTextFile(strGALUploadFile) objGALUploadFile.Close   If strMaintMode=1 Then Wscript.Echo "UploadFile created: " & strGALUploadFile   If objFSO.FileExists(strGALUploadFile) Then 'Write log event Upload file created Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True)             objGALLogFile.Write (NOW & " Upload File: " & strGALUploadFile & " created. " & VBCrLF)                         objGALLogFile.Close Else 'Write log event Upload file NOT created Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True)             objGALLogFile.Write (NOW & " Upload File: " & strGALUploadFile & " NOT created.  Script Aborted. " & VBCrLF)                         objGALLogFile.Close WScript.Quit End If             'Open LDIF Export file Set objGALExportFile = objFSO.OpenTextFile(strGALExportFile, 1)   'Write log event Opening LDIF Export file for processing Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True) objGALLogFile.Write (NOW & " Open " & strGALExportFile & " for proccessing" & VBCrLF) 'objGALLogFile.Close Set objGALUploadFile = objFSO.OpenTextFile(strGALUploadFile, ForAppending, True)     Do Until objGALExportFile.AtEndOfStream     strOLDLine = objGALExportFile.ReadLine                         If InStr(strOLDLine, "SystemMailbox") Then                                     'Write log event SystemMailbox will not be uploaded.                         'Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True)                         objGALLogFile.Write (NOW & " " & strOLDLine & " account will not be uploaded." & VBCrLF)                                     'objGALLogFile.Close                                     SkipLine=1                         Else If StrOLDLine = "" Then                                     SkipLine=0                         End If                         End If                                                 If SkipLine=0 Then                                            If strOLDLine \<\> "" Then                                                             If InStr(strOLDLine, "dn:") Then                                                             'Write log event processing old DN:                                                             'Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True)                                                             objGALLogFile.Write (NOW & " Processing OLD " & strOLDLine & VBCrLF)                                                                         'objGALLogFile.Close                                                                                                                                                 'PARSE THE LINE NAME INFO                                                                                     arrDN = split(strOLDLine, ",")                                                                                       If InStr(arrDN(1), "OU=") Then                                                                                                 strNEWDN = arrDN(0) & ",DC=CBPexch,DC=CBP,DC=dhs,DC=gov"                                                                                     Else                                                                                                 strNEWDN = arrDN(0) & "," & arrDN(1) & ",DC=CBPexch,DC=CBP,DC=dhs,DC=gov"                                                                                     End If                                                                                                                                                      'Write line to GALUploadFile                                                                                     If UserCount\>0 Then                                                                                                 'Set objGALUploadFile = objFSO.OpenTextFile(strGALUploadFile, ForAppending, True)                                                                                                 objGALUploadFile.Write (VBCrLF)                                                                                                 'objGALUploadFile.Close                                                                                     End If                                                                                                                                     'Set objGALUploadFile = objFSO.OpenTextFile(strGALUploadFile, ForAppending, True)                                                                         objGALUploadFile.Write (strNEWDN & VBCrLF)                                                                         'objGALUploadFile.Close                                                                                                                                                                                                                         'WRITE DN: & NAME INFO & OCCONUS DOM INFO TO GALLogfile as an event                                                                         'Write log event processed NEW DN:                                                                         'Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True)                                                                         objGALLogFile.Write (NOW & " Processed NEW " & strNEWDN & VBCrLF)                                                                         'objGALLogFile.Close                                                                                     UserCount=UserCount+1                                                                                                                                                 Else                                                                         'CHECK TO SEE IF OBJECTCLASS=GROUP or msExchDynamicDistributionList                                                                           If InStr(strOldLine, "objectClass: msExch") Then                                                                                     'CHANGE TO:  "objectClass: user"                                                                                     strNewClass = "objectClass: user"                                                                                     'WRITE LOG EVENT CHANGING OBJECT CLASS:                                                                                     'Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True)                                                                                     objGALLogFile.Write (NOW & " Processing OLD " & strOLDLine & VBCrLF)                                                                                     'objGALLogFile.Close                                                                                                                                                             If UserCount\>0 Then                                                                                                 'Set objGALUploadFile = objFSO.OpenTextFile(strGALUploadFile, ForAppending, True)                                                                                                 'objGALUploadFile.Write (VBCrLF)                                                                                                 'objGALUploadFile.Close                                                                                     End If                                                                                                                                                 'Set objGALUploadFile = objFSO.OpenTextFile(strGALUploadFile, ForAppending, True)                                                                                     objGALUploadFile.Write (strNewClass & VBCrLF)                                                                                     'objGALUploadFile.Close                                                                                                                                                               'Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True)                                                                                     objGALLogFile.Write (NOW & " Processed NEW Class " & strNewClass & VBCrLF)                                                                                     'objGALLogFile.Close                                                                                     blnstrNewClass = 1                                                                         End If                                                                           If InStr(strOLDLine, "objectClass: group") Then                                                                                     'CHANGE TO:  "objectClass: user"                                                                                     strNewClass = "objectClass: user"                                                                                     'WRITE LOG EVENT CHANGING OBJECT CLASS:                                                                                     'Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True)                                                                                     objGALLogFile.Write (NOW & " Processing OLD " & strOLDLine & VBCrLF)                                                                                     'objGALLogFile.Close                                                                                                                                                             If UserCount\>0 Then                                                                                                 'Set objGALUploadFile = objFSO.OpenTextFile(strGALUploadFile, ForAppending, True)                                                                                                 'objGALUploadFile.Write (VBCrLF)                                                                                                 'objGALUploadFile.Close                                                                                     End If                                                                                                                                                 'Set objGALUploadFile = objFSO.OpenTextFile(strGALUploadFile, ForAppending, True)                                                                                     objGALUploadFile.Write (strNewClass & VBCrLF)                                                                                     'objGALUploadFile.Close                                                                                                                                                               'Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True)                                                                                     objGALLogFile.Write (NOW & " Processed NEW Class " & strNewClass & VBCrLF)                                                                                     'objGALLogFile.Close                                                                                     blnstrNewClass = 1                                                                           Else                                                                                     If InStr(strOLDLine, "extensionAttribute9: CONTRACTOR") Then                                                                                                 'CHANGE TO:  "extensionAttribute9: CTR"                                                                                                 strNewExtensionAttribute9="extensionAttribute9: CTR"                                                                                                 objGALUploadFile.Write (strNewExtensionAttribute9 & VBCrLF)                                                                                                 objGALLogFile.Write (NOW & " Changing to: " & strNewExtensionAttribute9 & VBCrLF)                                                                                                 blnstrNewClass = 1                                                                                       End If                                                                           End If                                                                             'Write line to GALUploadFile                                                                         If blnstrNewClass = 0 Then                                                                                     'Set objGALUploadFile = objFSO.OpenTextFile(strGALUploadFile, ForAppending, True)                                                                                     objGALUploadFile.Write (strOLDLine & VBCrLF)                                                                                     'objGALUploadFile.Close                                                                         End If                                                                         blnstrNewClass = 0                                                                                                                                       End If                                                                                       End If             End If Loop     objGALExportFile.Close objGALLogFile.Close objGALUploadFile.Close 'Write log event Closing LDIF Export file processing complete Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True) objGALLogFile.Write (NOW & " Closing " & strGALExportFile & " proccessing completed" & VBCrLF) objGALLogFile.Write (NOW & " " & UserCount & " Users Processed" & VBCrLF) objGALLogFile.Close   'BEGIN FTP 'Find Upload File If objFSO.FileExists(strGALUploadFile) Then 'Write log event Upload file found Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True)             objGALLogFile.Write (NOW & " " & "Upload file: " & strGALUploadFile & " found." & VBCrLF)                         objGALLogFile.Close Else 'Write log event GAL Upload file NOT found Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True)             objGALLogFile.Write (NOW & " " & "Upload file: " & strGALExportFile & " NOT found." & VBCrLF)             objGALLogFile.Write (NOW & " Script Aborted.")                         objGALLogFile.Close    WScript.Quit End If   ' 'Execute FTP DOS command to upload file. Set WshShell = CreateObject("WScript.Shell") WshShell.Run "ftp -s:D:\DirectoryUpload\FTPUploadDirectory.txt", 1, True 'FTP PUT the Upload File   'Write log FTP command to Upload file completed. Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True)             objGALLogFile.Write (NOW & " " & "Attempted to upload " & strGALUploadFile & VBCrLF)                         objGALLogFile.Close   'Execute FTP DOS command to get OSC log file. Set WshShell = CreateObject("WScript.Shell") WshShell.Run "ftp -s:D:\DirectoryUpload\FTPGetOSCLog.txt", 1, True 'FTP GET the Log File   'Write log FTP command to Download OSC log file completed. If objFSO.FileExists("D:\DirectoryUpload\uscs-01-exch2n.log") Then Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True)             objGALLogFile.Write (NOW & " OSC log file: " & "D:\DirectoryUpload\uscs-01-exch2n.log" & " downloaded." & VBCrLF)             strDownLoadSuccess = "Log File successfully downloaded. "                 objGALLogFile.Close Else 'Write OSC NOT found. End Script Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True)             objGALLogFile.Write (NOW & " OSC Log File: " & "D:\DirectoryUpload\uscs-01-exch2n.log" & " NOT downloaded." & VBCrLF)                         objGALLogFile.Write (NOW & " Script Aborted.")                         strDownLoadSuccess="Log File NOT DOWNLOADED. "                         objGALLogFile.Close End If   Set objGALLogFile = objFSO.OpenTextFile(strGALLogFile, ForAppending, True)             objGALLogFile.Write (NOW & " Script Completed.")                         objGALLogFile.Close   '************************************************************************************* 'Cycle through log file to identify status from DHS   If objFSO.FileExists("D:\DirectoryUpload\uscs-01-exch2n.log") Then               Dim strDHSStatus, strOSCLogfile, strInputLine             Dim strInputLine1, strInputLine2, strInputLine3, strInputLine4, strInputLine5, strInputLine6             Dim objOSCLogFile               strOSCLogfile = "D:\DirectoryUpload\uscs-01-exch2n.log"               'Cycle through file until the line is found:               Set objOSCLogFile=ObjFSO.OpenTextFile(strOSCLogfile, ForReading)               Do Until objOSCLogFile.AtEndOfStream                         strInputLine=objOSCLogFile.ReadLine                           If Instr(strInputLine, "Dirsync Statistics") Then                                     strInputLine1 = strInputLine                         End If                                                 If Instr(strInputLine, "Start time:") Then                                     strInputLine2 = strInputLine                         End If                           If Instr(strInputLine, "End time:") Then                                     strInputLine3 = strInputLine                         End If                           If Instr(strInputLine, "X500 adds:") Then                                     strInputLine4 = strInputLine                         End If                           If Instr(strInputLine, "Lan entries") Then                                     strInputLine5 = strInputLine                         End If                           If Instr(strInputLine, "Informational messages:") Then                                     strInputLine6 = strInputLine                         End If               Loop               strDHSStatus = strInputLine1 & VBCrLF & strInputLine2 & VBCrLF & strInputLine3 & VBCrLF & strInputLine4 & VBCrLF & strInputLine5 & VBCrLF & strInputLine6   '12-12-2007. 0:58:31 DHSExch2000toX500-21764: (uscs-01-exch2n) Dirsync Statistics: '12-12-2007. 0:58:31 DHSExch2000toX500-21764: (uscs-01-exch2n) -- Start time: 12-12-2007. 0:51:21 '12-12-2007. 0:58:31 DHSExch2000toX500-21764: (uscs-01-exch2n) -- End time: 12-12-2007. 0:58:31 '12-12-2007. 0:58:31 DHSExch2000toX500-21764: (uscs-01-exch2n) -- X500 adds: 104, X500 deletes: 11, X500 modifies: 6, X500 nochange: 59394 '12-12-2007. 0:58:31 DHSExch2000toX500-21764: (uscs-01-exch2n) -- Lan entries not processed: 473 '12-12-2007. 0:58:31 DHSExch2000toX500-21764: (uscs-01-exch2n) -- Informational messages: 74   Else             'File Not Found -- Error!             strDHSStatus = "No log file found!"          End If   '*************************************************************************************   '************************************************************************************* 'Send EMAIL of STATUS to ADMINISTRATOR Dim objMessage Set objMessage = CreateObject("CDO.Message") objMessage.Subject = "Directory Upload Status for: " & NOW objMessage.From = "cbppostmaster@cbp.dhs.gov" objMessage.To = "rob.craig@cbp.dhs.gov" objMessage.TextBody = "Status: " & strDownLoadSuccess & UserCount & " Records Uploaded." & VBCrLF & strDHSStatus objMessage.Send '*************************************************************************************       If strMaintMode=1 Then Wscript.Echo "Stop" \> From \<[https://uconnect.cbpnet.cbp.dhs.gov/sites/OIT/edme/edco/dco/osg/WSG%20Wiki/WebTele%20AD%20Integration%20Documentation.aspx](https://uconnect.cbpnet.cbp.dhs.gov/sites/OIT/edme/edco/dco/osg/WSG%20Wiki/WebTele%20AD%20Integration%20Documentation.aspx)\>