#101183 - 2003-05-23 05:04 PM
Re: Microsoft releases ADSI Scriptomatic
|
ChristopheM
Hey THIS is FUN
   
Registered: 2002-05-13
Posts: 311
Loc: STRASBOURG, France
|
hi,
it's a little big but here is the code
the original .hta source can be downloaded from Microsoft Site
code:
;******************************************************************** ; File: EzADscripto.kix ; Created: May 2003 ; Version: 1.0 ; Author: Christophe MELIN ; Description: Learning tool. Generates ADSI scripts to ; demonstrate the fundamental ; ADSI tasks, Create, Write, Read, and Modify. ; ;******************************************************************** ; converted from EzADscripto.hta (December 2002) ; ; Author: The Scripting Guys - Dean Tsaltas, Bob Wells, ; Greg Stemp, and Ethan Wilansky. ; Initial concept from ScriptoMatic by Dean Tsaltas ; and Greg Stemp ; ; Copyright (C) 2003 Microsoft Corporation ;********************************************************************
Global $true, $false
$vbTab = chr(9) $true = 1 $false = 0
;--------------------------------------------------------------------------- ; Main Form ;--------------------------------------------------------------------------- $frmMain = CreateObject("Kixtart.Form") $frmMain.Size = 750,580 ;$frmMain.SysMenu = 0 ; Disable the sysmenu. Prevents users from closing forms $frmMain.Text = "ADSI Scriptomatic for KIX" $frmMain.Center
$TaskSelectPulldown = $frmMain.ComboBox $TaskSelectPulldown.List = "Select a task","Create an object","Write an object","Read an object","Delete an object" $TaskSelectPulldown.Top = 10 $TaskSelectPulldown.Left = 10 $TaskSelectPulldown.Bottom = $frmMain.ClientHeight / 2 $TaskSelectPulldown.width = 150 $TaskSelectPulldown.ListIndex = 0 $TaskSelectPulldown.TabStop = 1 $TaskSelectPulldown.Style = 1 $TaskSelectPulldown.OnClick = "$=TaskSelectPulldownCheck()"
$classesPulldown = $frmMain.ComboBox $classesPulldown.List = "Select an object","user","computer","contact","group","organizationalUnit" $classesPulldown.Top = 10 $classesPulldown.Left = $TaskSelectPulldown.width+10 $classesPulldown.Bottom = $frmMain.ClientHeight / 2 $classesPulldown.width = $TaskSelectPulldown.width $classesPulldown.ListIndex = 0 $classesPulldown.TabStop = 1 $classesPulldown.Style = 1 $classesPulldown.Enabled = $false $classesPulldown.OnClick = "$=TaskSelectPulldownCheck()"
$runBtn = $frmMain.Button $runBtn.left = $classesPulldown.right+10 $runBtn.top = $TaskSelectPulldown.top $runBtn.width = 50 $runBtn.height = 22 $runBtn.text = "run" $runBtn.OnClick = "RunScript()"
$saveBtn = $frmMain.Button $saveBtn.left = $runBtn.right $saveBtn.top = $TaskSelectPulldown.top $saveBtn.width = 50 $saveBtn.height = $runBtn.height $saveBtn.text = "save" $saveBtn.OnClick = "SaveScript()"
$loadBtn = $frmMain.Button $loadBtn.left = $saveBtn.right $loadBtn.top = $TaskSelectPulldown.top $loadBtn.width = 50 $loadBtn.height = $runBtn.height $loadBtn.text = "load" $loadBtn.OnClick = "OpenScript()"
$exitBtn = $frmMain.Button $exitBtn.left = $loadBtn.right $exitBtn.top = $TaskSelectPulldown.top $exitBtn.width = 50 $exitBtn.height = $runBtn.height $exitBtn.text = "exit" $exitBtn.OnClick = "QuitScript()"
$lblImptNote = $frmMain.Label $lblImptNote.top = $TaskSelectPulldown.bottom + 10 $lblImptNote.left = 10 $lblImptNote.width = $frmMain.scalewidth - (2 * $lblImptNote.left) $lblImptNote.height = $frmMain.scaleheight - 10 - $lblImptNote.top
$lblnotesbutton = $frmMain.label $lblnotesbutton.top = $TaskSelectPulldown.bottom + 5 $lblnotesbutton.left = 10 $lblnotesbutton.width = $frmMain.scalewidth - (2 * $lblnotesbutton.left) $lblnotesbutton.height = 20 $lblnotesbutton.caption = "" $lblnotesbutton.OnClick = "ImptDialog()"
$lblnotesbuttonrun = $frmMain.label $lblnotesbuttonrun.top = $lblnotesbutton.bottom + 5 $lblnotesbuttonrun.left = 10 $lblnotesbuttonrun.width = $frmMain.scalewidth - (2 * $lblnotesbutton.left) $lblnotesbuttonrun.height = 20 $lblnotesbuttonrun.caption = "" $lblnotesbuttonrun.OnClick = "RunDialog()"
$Message = $frmMain.TextBox $Message.FontSize = 10 $Message.Top = $lblnotesbuttonrun.bottom + 5 $Message.Left = 10 $Message.Right = $frmMain.scalewidth - 10 $Message.height = $frmMain.scaleheight - 10 - $message.top $Message.MultiLine = $true $Message.WordWrap = $false $Message.BorderStyle = 0 $Message.ScrollBars = 3 $Message.FontName = "Courier New" $Message.WordWrap = $false
$=InitialUIState()
$frmMain.Center $frmMain.Show
While $frmMain.Visible $=Execute($frmMain.DoEvents) Loop
EXIT 0
;************************************************************************** ; These subroutines control the state of the user interface. Each ; routine includes descriptive text. ;************************************************************************** ;This is the state the HTA UI elements should be in before anything is selected. function InitialUIState $TaskSelectPulldown.enabled = $true $runbtn.enabled = $false $savebtn.enabled = $false $classesPulldown.ListIndex = 0 $classesPulldown.enabled = $false
$lblImptNote.visible = $true
$message.visible = $false $message.text = ""
$lblnotesbutton.visible = $false $lblnotesbuttonrun.visible = $false
$lblImptNote.caption = "EzAD Scriptomatic is an ADSI Scripting learning tool." + @crlf + "The tool creates example scripts that read, write and" + @crlf + "modify Active Directory data. To successfully run" + @crlf + "scripts created with EzAD Scriptomatic, you must:" + @crlf + "1. have Administrator access to Active Directory, and" + @crlf + "2. be logged on to the target Active Directory domain.@crlf" + @crlf + "You should not run scripts created with EzAD Scriptomatic" + @crlf + "against a production domain without first testing the" + @crlf + "scripts in your designated testing environment." endfunction
;If the operator selects a different task, reset the UI in preparation for selecting a class. function ResetForClassesPullDown $classesPulldown.enabled = $true $message.text= "" $message.visible= $false $lblImptNote.visible = $true $lblnotesbutton.visible = $false $lblnotesbuttonrun.visible = $false endfunction
;If the $TaskSelectPulldown is not set to Select a task enable the $classesPulldown. Otherwise, disable the $classesPulldown. function TaskSelectPulldownCheck if ($TaskSelectPulldown.ListIndex="0") $=InitialUIState return endif $=ResetForClassesPullDown if ($ClassesPulldown.ListIndex="0") return endif Select Case $TaskSelectPulldown.ListIndex="1" $=ResetForClassesPullDown $=CreateCreateScript
Case $TaskSelectPulldown.ListIndex="2" $=ResetForClassesPullDown $=CreateWriteScript
Case $TaskSelectPulldown.ListIndex="3" $=ResetForClassesPullDown $=CreateReadScript
Case $TaskSelectPulldown.ListIndex="4" $=ResetForClassesPullDown $=CreateDeleteScript EndSelect
;Enable the Running This Script, Run, and Save buttons. $=FinalUIState endfunction
;Once a script is generated, enable the Running This Script, Run, and Save buttons. function FinalUIState $lblImptNote.visible = $false $message.visible= $true $Message.SelStart = 0 $Message.SelLength = 0
$lblnotesbutton.visible = $true $lblnotesbuttonrun.visible = $true
$lblnotesbuttonrun.caption="Read this before running the " + lcase($TaskSelectPulldown.Text) + " - " + $classesPulldown.Text + " script" $runBtn.enabled = $true $savebtn.enabled = $true endfunction
;*************************************************************************** ; When the operator presses the Run button, we use the WshShell $object's Run ; method to run the code currently in the textarea under cscript.exe. we use ; cmd.exe's /k parameter to ensure the command window remains visible after ; the script has finished running. ;*************************************************************************** function RunScript() $strTmpName = "%temp%\temp_script.kix" if DoSave($strTmpName) Shell("cmd /k cscript.exe $strTmpName") endif endfunction
;*************************************************************************** ; When the operator presses the Save button, we present them with an InputBox ; and force them to give us the full path to where they'd like to the save ; the script that is currently in the textarea. The user is probably quite ; upset with our laziness here....and who can blame them? ;***************************************************************************
function SaveScript() $strSaveFileName="%temp%\toto.kix" ; Do the save $=DoSave( $strSaveFileName ) return
$form=createobject("Kixtart.Form") $SaveDir = @CurDir CD 'C:\util' $value=$form.FileSaveDialog( "Enregistrer sous...", "", "Nom du document", "scripts kix|*.kix|fichiers texte|*.txt|tous les fichiers|*.*", 0 )
CD $SaveDir If $Value $strSaveFileName=$value ; Do the save $=DoSave( $strSaveFileName ) EndIf $form=Nothing endfunction
;*************************************************************************** ; When the operator presses the Open button, we present them with an InputBox ; and force them to give us the full path to the script they'd like to open. ; This is, of course, rather wonky - but it's meant to be. ;***************************************************************************
function OpenScript() $form=createobject("Kixtart.Form") $OpenDir = @CurDir CD '%TEMP%' $value=$form.FileOpenDialog( "Ouvrir...", "", "Nom du document", "scripts kix|*.kix|fichiers texte|*.txt|tous les fichiers|*.*", 0 )
CD $OpenDir If $Value $strOpenFileName=$value ; Load the file $handle = freefilehandle() $err = open($handle,$strOpenFileName,2) if $err=0 $strHTML = "" $line = ReadLine($handle) WHILE @ERROR = 0 $strHTML = $strHTML + $line + @crlf $line = ReadLine($handle) LOOP $message.text = $strHTML $=close($handle)
$runBtn.enabled = $true $savebtn.enabled = $true endif EndIf $form=Nothing $=FinalUIState() $lblnotesbutton.visible = $false $lblnotesbuttonrun.visible = $false endfunction
;*************************************************************************** ; When the operator presses the Quit button, the file where we've been storing ; the scripts gets deleted and the main window closes. ;***************************************************************************
function QuitScript() DEL "temp_script.kix" Quit 0 endfunction
;************************************************************************** ; These functions are called by other functions that generate the code for ; the Read an $object task. Each function in this section generates code ; based on attribute definitions. ;************************************************************************** Function strReadCodeSV($strPageName,$arrName) $strHTML = "" $strHTML = $strHTML + '? "** $strPageName Properties Page : Single-Valued Attributes **"' + @crlf For each $attrib in $arrName if $attrib $kixattrib = FormatKixObjName($attrib) $strHTML = $strHTML + '$$str$kixattrib = $$objItem.Get("$attrib")' + @crlf $strHTML = $strHTML + '? "$attrib : $$str$kixattrib"' + @crlf endif Next $strReadCodeSV = $strHTML + @crlf EndFunction
Function strReadCodeMV($strPageName,$arrName) $strHTML = "" $strHTML = $strHTML + '? "** $strPageName Properties Page : Multi-Valued Attributes **"' + @crlf For Each $attrib in $arrName if $attrib $strHTML = $strHTML + '$$str$attrib = $$objItem.GetEx("$attrib")' + @crlf $strHTML = $strHTML + '? "$attrib : "' + @crlf $strHTML = $strHTML + 'For Each $$Item in $$str' + $attrib + @crlf $strHTML = $strHTML + $vbTab + '? $$Item' + @crlf $strHTML = $strHTML + 'Next' + @crlf endif Next $StrReadCodeMV = $strHTML + @crlf EndFunction
;For reading attributes stored as integers containing bit flags Function IntReadCode($strPageName,$attrib,$arrConstant,$arrValue) $strHTML = "" $strHTML = $strHTML + '? "** $strPageName Properties Page : " + $attrib + " attribute **"' + @crlf $strHTML = $strHTML + '$$objHash = CreateObject("Scripting.Dictionary")' + @crlf $i = 0 For Each $constant in $arrConstant if $constant $strHTML = $strHTML + '$$=$$objHash.Add( "$constant", $arrValue[$i])' + @crlf $i = 1 + $i endif Next $strHTML = $strHTML + '$$int$attrib = $$objItem.Get("$attrib")' + @crlf $strHTML = $strHTML + 'For Each $$Key in $$objHash.Keys' + @crlf $strHTML = $strHTML + $vbTab + 'If $$objHash[$$Key] & $$int$attrib' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + '? "$$Key is enabled."' + @crlf $strHTML = $strHTML + $vbTab + 'Else' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + '? "$$Key is disabled."' + @crlf $strHTML = $strHTML + $vbTab + 'EndIf' + @crlf $strHTML = $strHTML + "Next" $IntReadCode = $strHTML + @crlf EndFunction
Function ReadPropertiesSimple($strPageName,$interfaceName,$arrProp) $strHTML = "" $strHTML = $strHTML + '? "** $strPageName Properties Page : " + $interfaceName + " interface **"' + @crlf For Each $prop in $arrProp if $prop $strHTML = $strHTML + '? " $prop : " + $$objItem.$prop' + @crlf endif Next $ReadPropertiesSimple = $strHTML + @crlf EndFunction
;************************************************************************** ; These functions are called by other functions that generate the code for ; the Write an $object task. Each function in this section generates code ; based on attribute definitions. ;************************************************************************** Function strWriteCodeSV($strPageName,$arrName,$strValue) $strHTML = "" If $strValue = "VALUE" $strHTML = $strHTML + '? "** $strPageName Properties Page : writing Single-Valued Attributes **"' + @crlf Else $strHTML = $strHTML + ';See Script Notes for information on setting this value.' + @crlf $strHTML = $strHTML + '? "** $strPageName Properties Page : non standard valued **"' + @crlf EndIf For each $attrib in $arrName if $attrib $strHTML = $strHTML + '$$objItem.Put( "$attrib", "$strValue")' + @crlf $strHTML = $strHTML + '$$objItem.SetInfo()' + @crlf endif Next $strWriteCodeSV = $strHTML + @crlf EndFunction
Function strWriteCodeMV($strPageName,$arrName,$strValue) $strHTML = "" If $strValue = "VALUE" $strHTML = $strHTML + '? "** $strPageName Properties Page : writing Multi-Valued Attributes **"' + @crlf Else $strHTML = $strHTML + ';See Script Notes for information on setting this value.' + @crlf $strHTML = $strHTML + '? "** $strPageName Properties Page : non standard Multi-Valued Attributes **"' + @crlf EndIf For each $attrib in $arrName if $attrib $strHTML = $strHTML + '$$objItem.PutEx( ADS_PROPERTY_UPDATE, "$attrib", ("$strValue 1", "$strValue 2", ... , "$strValue n") )' + @crlf $strHTML = $strHTML + '$$objItem.SetInfo()' + @crlf endif Next $strWriteCodeMV = $strHTML + @crlf EndFunction
;************************************************************************** ; These functions write script code to the code window for the Read ; an $object task. Each function varies based on the selected class. ; The function name describes the class it supports. ;************************************************************************** Function UserAttribsToRead $strHTML = ""
;All attributes on the General Properties Page $arrSVStringAttribsGP = "name", "givenName","initials","sn","displayName","description","physicalDeliveryOfficeName","telephoneNumber","mail","wWWHomePage" $strHTML = $strHTML + strReadCodeSV("General",$arrSVStringAttribsGP) $arrMVStringAttribsGP = "otherTelephone", "url" $strHTML = $strHTML + strReadCodeMV("General",$arrMVStringAttribsGP) ;End General Properties Page ;All attributes on the Address Properties Page $arrSVStringAttribsAP = "streetAddress", "l", "st", "postalCode", "c" $strHTML = $strHTML + strReadCodeSV("Address",$arrSVStringAttribsAP)
$arrMVStringAttribsAP = "postOfficeBox","" $strHTML = $strHTML + strReadCodeMV("Address",$arrMVStringAttribsAP) ;End Address Properties Page
;Selected attributes on the Account Properties Page $arrSVStringAttribsAcP = "userPrincipalName", "dc", "sAMAccountName", "userWorkstations" $strHTML = $strHTML + strReadCodeSV("Account",$arrSVStringAttribsAcP) ;Read the bit flags in userAccountControl $arrUACConstants = "ADS_UF_SMARTCARD_REQUIRED", "ADS_UF_TRUSTED_FOR_DELEGATION", "ADS_UF_NOT_DELEGATED", "ADS_UF_USE_DES_KEY_ONLY","ADS_UF_DONT_REQUIRE_PREAUTH" $arrUACValues = "&40000", "&80000", "&100000", "&200000", "&400000" $strHTML = $strHTML + IntReadCode("Account","userAccountControl", $arrUACConstants,$arrUACValues) ;End read the bit flags in userAccountControl ;Read the IsAccountLocked property $strHTML = $strHTML + 'If $$objItem.IsAccountLocked = $true' + @crlf $strHTML = $strHTML + $vbTab + '? "ADS_UF_LOCKOUT is enabled"' + @crlf $strHTML = $strHTML + 'Else' + @crlf $strHTML = $strHTML + $vbTab + '? "ADS_UF_LOCKOUT is disabled"' + @crlf $strHTML = $strHTML + 'EndIf' + @crlf + @crlf ;End read the IsAccountLocked property ;Read the AccountExpirationDate property $strHTML = $strHTML + 'If (@@error = -2147467259) OR ($$objItem.AccountExpirationDate = "1/1/1970")' + @crlf $strHTML = $strHTML + $vbTab + '? "no expiration date."' + @crlf $strHTML = $strHTML + 'Else' + @crlf $strHTML = $strHTML + $vbTab + '? "Account expires on: " + $$objItem.AccountExpirationDate' + @crlf $strHTML = $strHTML + 'EndIf' + @crlf + @crlf ;End read the AccountExpirationDate property ;End Account Properties Page ;All attributes on the Profile Properties Page $arrSVStringAttribsPrP = "profilePath", "scriptPath", "homeDirectory", "homeDrive" $strHTML = $strHTML + strReadCodeSV("Profile",$arrSVStringAttribsPrP) ;End Profile Properties Page ;All attributes on the Telephones Properties Page $arrSVStringAttribsTele = "homePhone","pager", "mobile","facsimileTelephoneNumber","ipPhone", "info" $strHTML = $strHTML + strReadCodeSV("Telephone",$arrSVStringAttribsTele) $arrMVStringAttribsTele = "otherHomePhone","otherPager", "otherMobile","otherFacsimileTelephoneNumber","otherIpPhone" $strHTML = $strHTML + strReadCodeMV("Telephone",$arrMVStringAttribsTele) ;End Telephones Properties Page ;All attributes on the Organization Properties Page $arrSVStringAttribsOrg = "title","department", "company","manager" $strHTML = $strHTML + strReadCodeSV("Organization",$arrSVStringAttribsOrg) $arrMVStringAttribsOrg = "directReports","" $strHTML = $strHTML + strReadCodeMV("Organization",$arrMVStringAttribsOrg) ;End Organization Properties Page ;All settings on the Environment Properties Page $arrProperties = "TerminalServicesInitialProgram", "TerminalServicesWorkDirectory","ConnectClientDrivesAtLogon","ConnectClientPrintersAtLogon","DefaultToMainPrinter" $strHTML = $strHTML + ReadPropertiesSimple("Environment","ADSI Extension for Terminal Services",$arrProperties) ;End all settings on the Environment Properties Page ;All settings on the Sessions Properties Page $arrProperties = "MaxDisconnectionTime","MaxConnectionTime", "MaxIdleTime","BrokenConnectionAction","ReconnectionAction" $strHTML = $strHTML + ReadPropertiesSimple("Sessions","ADSI Extension for Terminal Services",$arrProperties) ;End all settings on the Sessions Properties Page ;All settings on the Remote Control Properties page $arrProperties = "EnableRemoteControl","" $strHTML = $strHTML + ReadPropertiesSimple("Remote Control","ADSI Extension for Terminal Services",$arrProperties) $strHTML = $strHTML + 'Select' + @crlf $strHTML = $strHTML + $vbTab + 'Case $$objItem.EnableRemoteControl=0' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + '? "Remote Control disabled"' + @crlf $strHTML = $strHTML + @crlf $strHTML = $strHTML + $vbTab + 'Case $$objItem.EnableRemoteControl=1' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + '? "Remote Control enabled"' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + '? "User permission required"' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + '? "Interact with the session"' + @crlf $strHTML = $strHTML + @crlf $strHTML = $strHTML + $vbTab + 'Case $$objItem.EnableRemoteControl=2' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + '? "Remote Control enabled"' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + '? "User permission not required"' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + '? "Interact with the session"' + @crlf $strHTML = $strHTML + @crlf $strHTML = $strHTML + $vbTab + 'Case $$objItem.EnableRemoteControl=3' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + '? "Remote Control enabled"' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + '? "User permission required"' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + '? "View the session"' + @crlf $strHTML = $strHTML + @crlf $strHTML = $strHTML + $vbTab + 'Case $$objItem.EnableRemoteControl=4' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + '? "Remote Control enabled"' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + '? "User permission not required"' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + '? "View the session"' + @crlf $strHTML = $strHTML + @crlf $strHTML = $strHTML + 'EndSelect' + @crlf + @crlf ;End all settings on the Remote Control Properties Page ;All settings on the Terminal Services Profile Properties page $arrProperties = "TerminalServicesProfilePath", "TerminalServicesHomeDirectory","TerminalServicesHomeDrive", "AllowLogon" $strHTML = $strHTML + ReadPropertiesSimple("Terminal Services Profile","ADSI Extension for Terminal Services",$arrProperties) ;End all settings on the Terminal Services Profile Properties page ;The attribute on the COM+ Properties page $arrSVStringAttribsCOM = "msCOM-UserPartitionSetLink","" $strHTML = $strHTML + strReadCodeSV("COM+",$arrSVStringAttribsCOM) ;End the attribute on the COM+ Properties page ;All attributes on the Member-Of Properties Page $arrSVStringAttribsMO = "primaryGroupID","" $strHTML = $strHTML + strReadCodeSV("Member Of",$arrSVStringAttribsMO) $arrMVStringAttribsMO = "memberOf","" $strHTML = $strHTML + strReadCodeMV("Member Of",$arrMVStringAttribsMO) ;End all attributes on the Member-Of Properties Page ;Selected attributes on the $object Properties Page $arrSVStringAttribsObj = "whenCreated","whenChanged" $strHTML = $strHTML + strReadCodeSV("Object",$arrSVStringAttribsObj) ;Added this because canonicalName is an operational attribute $strHTML = $strHTML + '$$arrMVStringAttribsObj = "canonicalName",""' $strHTML = $strHTML + '$$objItem.GetInfoEx( $$arrMVStringAttribsObj, 0)' + @crlf $arrMVStringAttribsObj = "canonicalName","" $strHTML = $strHTML + strReadCodeMV("Object",$arrMVStringAttribsObj) ;End all attributes on the $object Properties Page ;Dial-in and Security pages skipped. ;A later version of the tool might include a script to read these Properties pages. $UserAttribsToRead = $strHTML EndFunction
Function ContactAttribsToRead $strHTML = ""
;All attributes on the General Properites Page $arrSVStringAttribsGP = "name", "givenName","initials","sn","displayName","description","physicalDeliveryOfficeName","telephoneNumber","mail","wWWHomePage" $strHTML = $strHTML + strReadCodeSV("General",$arrSVStringAttribsGP) $arrMVStringAttribsGP = "otherTelephone", "url" $strHTML = $strHTML + strReadCodeMV("General",$arrMVStringAttribsGP) ;End General Properties Page ;All attributes on the Address Properties Page $arrSVStringAttribsAP = "streetAddress", "l", "st", "postalCode", "c" $strHTML = $strHTML + strReadCodeSV("Address",$arrSVStringAttribsAP)
$arrMVStringAttribsAP = "postOfficeBox","" $strHTML = $strHTML + strReadCodeMV("Address",$arrMVStringAttribsAP) ;End Address Properties Page
;All attributes on the Telephones Properties Page $arrSVStringAttribsTele = "homePhone","pager", "mobile","facsimileTelephoneNumber","ipPhone", "info" $strHTML = $strHTML + strReadCodeSV("Telephone",$arrSVStringAttribsTele) $arrMVStringAttribsTele = "otherHomePhone","otherPager", "otherMobile","otherFacsimileTelephoneNumber","otherIpPhone" $strHTML = $strHTML + strReadCodeMV("Telephone",$arrMVStringAttribsTele) ;End Telephones Properties Page ;All attributes on the Organization Properties Page $arrSVStringAttribsOrg = "title","department", "company","manager" $strHTML = $strHTML + strReadCodeSV("Organization",$arrSVStringAttribsOrg) $arrMVStringAttribsOrg = "directReports","" $strHTML = $strHTML + strReadCodeMV("Organization",$arrMVStringAttribsOrg) ;End Organization Properties Page ;All attributes on the Member-Of Properties Page $arrMVStringAttribsMO = "memberOf","" $strHTML = $strHTML + strReadCodeMV("Member Of",$arrMVStringAttribsMO) ;End all attributes on the Member-Of Properties Page ;Selected attributes on the $object Properties Page $arrSVStringAttribsObj = "whenCreated","whenChanged" $strHTML = $strHTML + strReadCodeSV("Object",$arrSVStringAttribsObj) ;Added this because canonicalName is an operational attribute $strHTML = $strHTML + '$$objItem.GetInfoEx( ("canonicalName",""), 0)' + @crlf $arrMVStringAttribsObj = "canonicalName","" $strHTML = $strHTML + strReadCodeMV("Object",$arrMVStringAttribsObj) ;End all attributes on the $object Properties Page ;Security page skipped. ;A later version of the tool might include a script to read this Properties page. $ContactAttribsToRead = $strHTML EndFunction
Function GroupAttribsToRead $strHTML = ""
;All attributes on the General Properties Page $arrSVStringAttribsGP = "name","samAccountName","description", "mail" $strHTML = $strHTML + strReadCodeSV("General",$arrSVStringAttribsGP)
;For reading the bit flags in grouptype $arrGTConstants = "ADS_GROUP_TYPE_GLOBAL_GROUP", "ADS_GROUP_TYPE_DOMAIN_LOCAL_GROUP", "ADS_GROUP_TYPE_UNIVERSAL_GROUP","ADS_GROUP_TYPE_SECURITY_ENABLED" $arrGTValues = "&2","&4","&8","&80000000" $strHTML = $strHTML + IntReadCode("General","groupType", $arrGTConstants,$arrGTValues) $strHTML = $strHTML + 'Select'+ @crlf $strHTML = $strHTML + $vbTab + 'case $$intgroupType & $$objHash.Item["ADS_GROUP_TYPE_DOMAIN_LOCAL_GROUP"]' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + '? "Group Scope: Domain Local Group"' + @crlf $strHTML = $strHTML + @crlf $strHTML = $strHTML + $vbTab + 'case $$intGroupType & $$objHash.Item["ADS_GROUP_TYPE_GLOBAL_GROUP"]' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + '? "Group Scope: Global Group"' + @crlf $strHTML = $strHTML + @crlf $strHTML = $strHTML + $vbTab + 'case $$intGroupType & $$objHash.Item["ADS_GROUP_TYPE_UNIVERSAL_GROUP"]' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + '? "Group Scope: Universal Group"' + @crlf $strHTML = $strHTML + 'endselect' + @crlf $strHTML = $strHTML + 'If $$intgroupType & $$objHash.Item["ADS_GROUP_TYPE_SECURITY_ENABLED"]' + @crlf $strHTML = $strHTML + $vbTab + '? "Group Type: Security"' + @crlf $strHTML = $strHTML + 'Else' + @crlf $strHTML = $strHTML + $vbTab + '? "Group Type: Distribution"' + @crlf $strHTML = $strHTML + 'EndIf' + @crlf ;End for reading the bit flags in grouptype ;End General Properties Page ;All attributes on the Managed By page. Code checks to see if the ;first field has a value. If so, it binds to the dn of the $object (user) ;and gets the properties of the $object specified on the Managed By page. $arrSVStringAttribsMB = "managedBy","" $strHTML = $strHTML + strReadCodeSV("Managed By",$arrSVStringAttribsMB) $strHTML = $strHTML + 'If $$strmanagedBy <> ""' + @crlf $strHTML = $strHTML + $vbTab + '$$objItem1 = GetObject("LDAP://$strManagedBy")' + @crlf $arrMBProperties = "physicalDeliveryOfficeName","streetAddress", "l","c","telephoneNumber","facsimileTelephoneNumber" For Each $prop in $arrMBProperties if $prop $strHTML = $strHTML + $vbTab + '? "$prop : " + $$objItem1.' + $prop + @crlf endif Next $strHTML = $strHTML + 'EndIf' + @crlf + @crlf ;End all attributes on the Managed By page ;All attributes on the Member Properties Page $arrMVStringAttribsMO = "member","" $strHTML = $strHTML + strReadCodeMV("Member",$arrMVStringAttribsMO) ;End all attributes on the Member-Of Properties Page ;All attributes on the Member-Of Properties Page $arrMVStringAttribsMO = "memberOf","" $strHTML = $strHTML + strReadCodeMV("Member Of",$arrMVStringAttribsMO) ;End all attributes on the Member-Of Properties Page ;All attributes on the Managed By page ;Code checks to see if the ;first field has a value. If so, it binds to the dn of ;the $object (user or group) and gets the properties of the $object ;specified on the Managed By page. $arrSVStringAttribsMB = "managedBy","" $strHTML = $strHTML + strReadCodeSV("Managed By",$arrSVStringAttribsMB) $strHTML = $strHTML + 'If $$strmanagedBy <> ""' + @crlf $strHTML = $strHTML + $vbTab + '$$objItem1 = GetObject("LDAP://$strManagedBy")' + @crlf $arrMBProperties = "physicalDeliveryOfficeName","streetAddress", "l","c","telephoneNumber","facsimileTelephoneNumber" For Each $prop in $arrMBProperties if $prop $strHTML = $strHTML + $vbTab + '? "$prop : " + $$objItem1.' + $prop + @crlf endif Next $strHTML = $strHTML + 'EndIf' + @crlf + @crlf ;End all attributes on the Managed By page $GroupAttribsToRead = $strHTML EndFunction
Function OUAttribsToRead $strHTML = ""
;All attributes on the General Properties Page $arrSVStringAttribsGP = "name", "description", "streetAddress", "postOfficeBox","l","st","postalCode","c" $strHTML = $strHTML + strReadCodeSV("General",$arrSVStringAttribsGP) ;End General Properties Page ;All attributes on the Managed By page ;Code checks to see if the first field has a value. If so, it binds to the dn of ;the $object (user or group) and gets the properties of the $object specified on the ;Managed By page. $arrSVStringAttribsMB = "managedBy","" $strHTML = $strHTML + strReadCodeSV("Managed By",$arrSVStringAttribsMB) $strHTML = $strHTML + 'If $strmanagedBy <> ""' + @crlf $strHTML = $strHTML + $vbTab+'$$objItem1 = GetObject("LDAP://$strManagedBy")' + @crlf $arrMBProperties = "physicalDeliveryOfficeName","streetAddress", "l","c","telephoneNumber","facsimileTelephoneNumber" For Each $prop in $arrMBProperties if $prop $strHTML = $strHTML + $vbTab + '? "$prop : " + $$objItem1.$prop' + @crlf endif Next $strHTML = $strHTML + "EndIf" + @crlf + @crlf ;End all attributes on the Managed By page ;Selected attributes on the $object Properties Page $arrSVStringAttribsObj = "whenCreated","whenChanged" $strHTML = $strHTML + strReadCodeSV("Object",$arrSVStringAttribsObj) ;Added this because canonicalName is an operational attribute $strHTML = $strHTML + 'objItem.GetInfoEx( ("canonicalName",""), 0)' + @crlf $arrMVStringAttribsObj = "canonicalName","" $strHTML = $strHTML + strReadCodeMV("Object",$arrMVStringAttribsObj) ;End all attributes on the $object Properties Page ;Selected attributes on the Group Policy Properties Page $arrSVStringAttribsGP = "gPLink","gPOptions" $strHTML = $strHTML + strReadCodeSV("Group Policy",$arrSVStringAttribsGP) $strHTML = $strHTML + 'Select' + @crlf $strHTML = $strHTML + $vbTab + 'case $strgPOptions = 1' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + '? "Policy inheritance is blocked."' + @crlf $strHTML = $strHTML + @crlf $strHTML = $strHTML + $vbTab + 'case $strgPOptions = 0' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + '? "Policies are inherited."' + @crlf $strHTML = $strHTML + @crlf $strHTML = $strHTML + $vbTab + 'case 1' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + '? "Policies are unknown."' + @crlf $strHTML = $strHTML + 'EndSelect' + @crlf + @crlf ;EndSelected attributes on the Group Policy Properties Page $OUAttribsToRead = $strHTML EndFunction
Function ComputerAttribsToRead $strHTML = ""
;All attributes on the General Properties Page $arrSVStringAttribsGP = "name","dnsHostName","description" $strHTML = $strHTML + strReadCodeSV("General",$arrSVStringAttribsGP) ;End General Properties Page ;For reading the bit flags in userAccountControl $arrUACConstants = "ADS_UF_TRUSTED_FOR_DELEGATION","ADS_UF_WORKSTATION_TRUST_ACCOUNT","ADS_UF_SERVER_TRUST_ACCOUNT" $arrUACValues = "&80000","&1000","&2000" $strHTML = $strHTML + IntReadCode("General","userAccountControl", $arrUACConstants,$arrUACValues) $strHTML = $strHTML + 'If $$intuserAccountControl && $$objHash.Item["ADS_UF_TRUSTED_FOR_DELEGATION"]' + @crlf $strHTML = $strHTML + $vbTab + '? "Trust computer for delegation"' + @crlf $strHTML = $strHTML + 'Else' + @crlf $strHTML = $strHTML + $vbTab + '? Do not trust the computer for delegation"' + @crlf $strHTML = $strHTML + 'EndIf' + @crlf $strHTML = $strHTML + 'If $$intuserAccountControl && $$objHash.Item["ADS_UF_SERVER_TRUST_ACCOUNT"]' + @crlf $strHTML = $strHTML + $vbTab + '? Role: Domain Controller"' + @crlf $strHTML = $strHTML + 'Else' + @crlf $strHTML = $strHTML + $vbTab + '? Role: Workstation or Server"' + @crlf $strHTML = $strHTML + 'EndIf' + @crlf ;End for reading the bit flags in userAccountControl ;All attributes on the Operating System Properties Page $arrSVStringAttribsGP = "operatingSystem","operatingSystemVersion", "operatingSystemServicePack" $strHTML = $strHTML + strReadCodeSV("Operating System",$arrSVStringAttribsGP) ;End Operating System Properties Page ;All attributes on the Member-Of Properties Page $arrSVStringAttribsMO = "primaryGroupID","" $strHTML = $strHTML + strReadCodeSV("Member Of",$arrSVStringAttribsMO) $arrMVStringAttribsMO = "memberOf","" $strHTML = $strHTML + strReadCodeMV("Member Of",$arrMVStringAttribsMO) ;End all attributes on the Member-Of Properties Page ;All attributes on the Location Properties Page $arrSVStringAttribsMO = "location","" $strHTML = $strHTML + strReadCodeSV("Location",$arrSVStringAttribsMO) ;End all attributes on the Location Properties Page ;All attributes on the Managed By page. The code checks to see if the ;first field has a value. If so, it binds to the dn of the $object (user) ;and gets the properties of the $object specified on the Managed By page. $arrSVStringAttribsMB = "managedBy","" $strHTML = $strHTML + strReadCodeSV("Managed By",$arrSVStringAttribsMB) $strHTML = $strHTML + 'If $strmanagedBy <> ""' + @crlf $strHTML = $strHTML + $vbTab + '$$objItem1 = GetObject("LDAP://$strManagedBy")' + @crlf $arrMBProperties = "physicalDeliveryOfficeName","streetAddress", "l","c","telephoneNumber","facsimileTelephoneNumber" For Each $prop in $arrMBProperties if $prop $strHTML = $strHTML + $vbTab + '? "$prop : " + $$objItem1.$prop' + @crlf endif Next $strHTML = $strHTML + 'EndIf' + @crlf + @crlf ;End all attributes on the Managed By page
$ComputerAttribsToRead = $strHTML ;Dial-in page skipped. ;A later version of the tool might include a script to read this Properties page. debug off EndFunction
;************************************************************************** ; These functions write script code to the code window for the Write ; an $object task. Each function varies based on the selected class. ; The function name describes the class it supports. ;************************************************************************** Function UserAttribsToWrite $strHTML = ""
;Attributes on the General Properties Page $arrSVStringAttribsGP = "givenName","initials", "sn","displayName","description","physicalDeliveryOfficeName", "telephoneNumber","mail","wWWHomePage" $strHTML = $strHTML + strWriteCodeSV("General",$arrSVStringAttribsGP,"VALUE")
$arrMVStringAttribsGP = "otherTelephone", "url" $strHTML = $strHTML + strWriteCodeMV("General",$arrMVStringAttribsGP,"VALUE") ;End General Properties Page ;Attributes on the Address Properties Page $arrSVStringAttribsAP = "streetAddress", "l", "st","postalCode" $strHTML = $strHTML + strWriteCodeSV("Address",$arrSVStringAttribsAP,"VALUE") $arrSVStringAttribsAP = "c","" $strHTML = $strHTML + strWriteCodeSV("Address",$arrSVStringAttribsAP,"COUNTRY CODE VALUE")
$arrMVStringAttribsAP = "postOfficeBox","" $strHTML = $strHTML + strWriteCodeMV("Address",$arrMVStringAttribsAP,"VALUE") ;End Address Properties Page ;Attributes on the Profile Properties Page $arrSVStringAttribsPrP = "profilePath", "scriptPath", "homeDirectory" $strHTML = $strHTML + strWriteCodeSV("Profile",$arrSVStringAttribsPrP,"VALUE") $arrSVStringAttribsAP = "homeDrive","" $strHTML = $strHTML + strWriteCodeSV("Profile",$arrSVStringAttribsAP,"DRIVE LETTER VALUE (no colon)") ;End Profile Properties Page ;Attributes on the Telephones Properties Page $arrSVStringAttribsTele = "homePhone","pager","mobile","facsimileTelephoneNumber","ipPhone", "info" $strHTML = $strHTML + strWriteCodeSV("Telephone",$arrSVStringAttribsTele,"VALUE") $arrMVStringAttribsTele = "otherHomePhone","otherPager", "otherMobile","otherFacsimileTelephoneNumber","otherIpPhone" $strHTML = $strHTML + strWriteCodeMV("Telephone",$arrMVStringAttribsTele,"VALUE") ;End Telephones Properties Page ;Attributes on the Organization Properties Page $arrSVStringAttribsOrg = "title","department", "company" $strHTML = $strHTML + strWriteCodeSV("Organization",$arrSVStringAttribsOrg,"VALUE") $arrSVStringAttribsOrg = "manager","" $strHTML = $strHTML + strWriteCodeSV("Organization",$arrSVStringAttribsOrg,"DISTINGUISHED NAME VALUE") ;End attributes on the Organization Properties Page $UserAttribsToWrite = $strHTML ;Account, Terminal Services (Remote control, Terminal Services Profile, ;Environment, and Sessions) COM+, Dial-in and Security ;Properties pages skipped. A later version of the tool might include ;a script to write some or all these Properties pages. ;The Member Of properties page contains the memberOf backlink attribute. ;Modify the member property of a group to modify the contents ;of the memberOf attribute EndFunction
Function ContactAttribsToWrite $strHTML = ""
;Attributes on the General Properties Page $arrSVStringAttribsGP = "givenName","initials","sn","displayName","description","physicalDeliveryOfficeName","telephoneNumber","mail","wWWHomePage" $strHTML = $strHTML + strWriteCodeSV("General",$arrSVStringAttribsGP,"VALUE")
$arrMVStringAttribsGP = "otherTelephone", "url" $strHTML = $strHTML + strWriteCodeMV("General",$arrMVStringAttribsGP,"VALUE") ;End General Properties Page ;Attributes on the Address Properties Page $arrSVStringAttribsAP = "streetAddress", "l", "st", "postalCode" $strHTML = $strHTML + strWriteCodeSV("Address",$arrSVStringAttribsAP,"VALUE") $arrSVStringAttribsAP = "c","" $strHTML = $strHTML + strWriteCodeSV("Address",$arrSVStringAttribsAP,"COUNTRY CODE VALUE")
$arrMVStringAttribsAP = "postOfficeBox","" $strHTML = $strHTML + strWriteCodeMV("Address",$arrMVStringAttribsAP,"VALUE") ;End Address Properties Page ;Attributes on the Telephones Properties Page $arrSVStringAttribsTele = "homePhone","pager","mobile","facsimileTelephoneNumber","ipPhone", "info" $strHTML = $strHTML + strWriteCodeSV("Telephone",$arrSVStringAttribsTele,"VALUE") $arrMVStringAttribsTele = "otherHomePhone","otherPager","otherMobile","otherFacsimileTelephoneNumber","otherIpPhone" $strHTML = $strHTML + strWriteCodeMV("Telephone",$arrMVStringAttribsTele,"VALUE") ;End Telephones Properties Page ;Attributes on the Organization Properties Page $arrSVStringAttribsOrg = "title","department","company" $strHTML = $strHTML + strWriteCodeSV("Organization",$arrSVStringAttribsOrg,"VALUE") $arrSVStringAttribsOrg = "manager","" $strHTML = $strHTML + strWriteCodeSV("Organization",$arrSVStringAttribsOrg,"DISTINGUISHED NAME VALUE") ;End attributes on the Organization Properties Page
$ContactAttribsToWrite = $strHTML ;The Member Of properties page contains the memberOf backlink attribute. ;Modify the member property of a group to modify the contents ;of the memberOf attribute EndFunction
Function GroupAttribsToWrite $strHTML = ""
;Selected attributes on the General Properties Page $arrSVStringAttribsGP = "samAccountName","description","mail" $strHTML = $strHTML + strWriteCodeSV("General",$arrSVStringAttribsGP,"VALUE") ;End attributes on the General Properties Page ;Attributes on the Member Properties Page $arrMVStringAttribsMO = "member","" $strHTML = $strHTML + strWriteCodeMV("Member",$arrMVStringAttribsMO,"DISTINGUISHED NAME VALUE") ;End all attributes on the Member-Of Properties Page ;Attributes on the Managed By Properties Page $arrSVStringAttribsMB = "managedBy","" $strHTML = $strHTML + strWriteCodeSV("Managed By",$arrSVStringAttribsMB,"DISTINGUISHED NAME VALUE") ;End attributes on the Managed By Properties Page $GroupAttribsToWrite = $strHTML ;The Member Of properties page contains the memberOf backlink attribute. ;Modify the member property of a group to modify the contents ;of the memberOf attribute EndFunction
Function OUAttribsToWrite $strHTML = ""
;Selected attributes on the General Properties Page $arrSVStringAttribsGP = "description","street", "postOfficeBox","l","st","postalCode" $strHTML = $strHTML + strWriteCodeSV("General",$arrSVStringAttribsGP,"VALUE") ;End General Properties Page $arrSVStringAttribsAP = "c","" $strHTML = $strHTML + strWriteCodeSV("Address",$arrSVStringAttribsAP,"COUNTRY CODE VALUE") ;Attributes on the Managed By Properties Page $arrSVStringAttribsMB = "managedBy","" $strHTML = $strHTML + strWriteCodeSV("Managed By",$arrSVStringAttribsMB,"DISTINGUISHED NAME VALUE") ;End attributes on the Managed By Properties Page $OUAttribsToWrite = $strHTML ;COM+, and Group Policy Properties pages skipped. ;A later version of the tool might include ;a script to write some or all these Properties pages. EndFunction
Function ComputerAttribsToWrite $strHTML = ""
;Selected attributes on the General Properties Page $arrSVStringAttribsGP = "description","" $strHTML = $strHTML + strWriteCodeSV("General",$arrSVStringAttribsGP,"VALUE") ;End General Properties Page ;All attributes on the Location Properties Page $arrSVStringAttribsMO = "location","" $strHTML = $strHTML + strWriteCodeSV("Location",$arrSVStringAttribsMO,"VALUE") ;End all attributes on the Location Properties Page ;Attributes on the Managed By Properties Page $arrSVStringAttribsMB = "managedBy","" $strHTML = $strHTML + strWriteCodeSV("Managed By",$arrSVStringAttribsMB,"DISTINGUISHED NAME VALUE") ;End attributes on the Managed By Properties Page $ComputerAttribsToWrite = $strHTML ;The Operating System properties page contains attributes that are written when ;a computer becomes a member of the domain. ;The Member Of properties page contains the memberOf backlink attribute. ;Modify the member property of a group to modify the contents ;of the memberOf attribute. ;Dial-in page skipped. A later version of the tool might include ;a script to read this Properties page. EndFunction
;************************************************************************** ; These functions manipulate the script code that appears in the code ; window. Function details appear above each function. ;**************************************************************************
;Reformat the class name so that the first character of the class name is uppercase. ;This does not have an impact on the script's ability to run properly. Function ReformatObjName $strChar1 = UCase(Left($classesPulldown.Text,1)) $strRemaining = LCase(substr($classesPulldown.Text,2,len($classesPulldown.Text))) $ReformatObjName = "obj" + $strChar1 + $strRemaining EndFunction
Function FormatKixObjName($objname) do $i = instr( $objname,"-" ) if $i=0 $FormatKixObjName = $objname return endif if $i>1 $objname = left($objname,$i-1) + "_" + substr($objname,$i+1,len($objname)) else $objname = "_" + substr($objname,$i+1,len($objname)) endif until $false endfunction
;Determine whether the naming attribute for a method should be ou or cn Function NamingAttribute If $classesPulldown.Text = "organizationalUnit" $NamingAttribute = "ou" Else $NamingAttribute = "cn" EndIf EndFunction
;Size the code window and write some header script code based on the selected task. Function PreAmble($intCols,$intRows) $strHTML = "" $arrConstantesEnum = "$$ADS_GROUP_TYPE_GLOBAL_GROUP = &2", "$$ADS_GROUP_TYPE_LOCAL_GROUP = &4", "$$ADS_GROUP_TYPE_UNIVERSAL_GROUP = &8", "$$ADS_GROUP_TYPE_SECURITY_ENABLED = &80000000", "", "$$ADS_PROPERTY_CLEAR = 1", "$$ADS_PROPERTY_UPDATE = 2", "$$ADS_PROPERTY_APPEND = 3", "$$ADS_PROPERTY_DELETE = 4" $strHTML = $strHTML + ';-- constantes definition --' + @crlf For Each $constant In $arrConstantesEnum $strHTML = $strHTML + $constant + @crlf Next
$strHTML = $strHTML + @crlf $strHTML = $strHTML + ';-- variables definition --' + @crlf $strHTML = $strHTML + '$$strContainer = ""' + @crlf $strHTML = $strHTML + '$$strSearchName = "EzAd' + UCase(Left($classesPulldown.Text,1)) + substr($classesPulldown.Text,2,len($classesPulldown.Text)) + '"' + @crlf
$PreAmble = $strHTML + @crlf EndFunction
;Generate the binding $string text for the script Function BindString $strHTML = "" If ($TaskSelectPulldown.Text = "Create an object") OR ($TaskSelectPulldown.Text = "Delete an $object") $strObj = "objContainer" $strHTML = $strHTML + ';***********************************************' + @crlf $strHTML = $strHTML + ';* Connect to a container *' + @crlf $strHTML = $strHTML + ';***********************************************' + @crlf $strHTML = $strHTML + '$$objRootDSE = GetObject("LDAP://rootDSE")' + @crlf $strHTML = $strHTML + 'If $strContainer = ""' + @crlf $strHTML = $strHTML + $vbTab + '$$$strobj = GetObject("LDAP://cn=$strSearchName," + $$objRootDSE.Get("defaultNamingContext"))' + @crlf $strHTML = $strHTML + 'Else' + @crlf $strHTML = $strHTML + $vbTab + '$$$strObj = GetObject("LDAP://cn=$$strSearchName,$strContainer," + $$objRootDSE.Get("defaultNamingContext"))' + @crlf $strHTML = $strHTML + 'EndIf' + @crlf
;The remarked section adds error testing to determine if the attempted ;connection to a domain failed. ;$strHTML = $strHTML + "If @@error = 424 " + @crlf ;$strHTML = $strHTML + " ? You must run the script from an Active Directory enabled client." + @crlf ;$strHTML = $strHTML + " Quit 1" + @crlf ;$strHTML = $strHTML + "EndIf" + @crlf $strHTML = $strHTML + ';***********************************************' + @crlf $strHTML = $strHTML + ';* End connect to a container *' + @crlf $strHTML = $strHTML + ';***********************************************' + @crlf + @crlf Else $strObj = "objItem" $strNamingAttribute = NamingAttribute() $strHTML = $strHTML + ';***********************************************' + @crlf $strHTML = $strHTML + ';* Connect to an object *' + @crlf $strHTML = $strHTML + ';***********************************************' + @crlf $strHTML = $strHTML + '$$objRootDSE = GetObject("LDAP://rootDSE")' + @crlf $strHTML = $strHTML + 'If $strContainer = ""' + @crlf If $classesPulldown.Text = "organizationalUnit" $strHTML = $strHTML + $vbTab + '$$arrNameExceptions = ("Users","Computers","Builtin","System","ForeignSecurityPrincipals","LostAndFound")' + @crlf $strHTML = $strHTML + $vbTab + 'For Each $$name in $$arrNameExceptions' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + 'If lcase($$strSearchName) = lcase($$name)' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + $vbTab + '$$strNameAttrib = "cn="' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + $vbTab + 'Exit For' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + 'Else' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + $vbTab + '$$strNameAttrib = "ou="' + @crlf $strHTML = $strHTML + $vbTab + $vbTab + 'EndIf' + @crlf $strHTML = $strHTML + $vbTab + 'Next' + @crlf $strHTML = $strHTML + $vbTab + '$$$strObj = GetObject("LDAP://$strNameAttrib=$strSearchName,"+$$objRootDSE.Get("defaultNamingContext"))' + @crlf $strHTML = $strHTML + 'Else' + @crlf $strHTML = $strHTML + $vbTab + '$$$strObj = GetObject("LDAP://$strNamingAttribute=$strSearchName,$strContainer,$"+$objRootDSE.Get("defaultNamingContext"))' + @crlf Else $strHTML = $strHTML + $vbTab + '$$$strObj = GetObject("LDAP://cn=$strSearchName,"+$$objRootDSE.Get("defaultNamingContext"))' + @crlf $strHTML = $strHTML + 'Else' + @crlf $strHTML = $strHTML + $vbTab + '$$$strObj = GetObject("LDAP://$strNamingAttribute=$$strSearchName,$strContainer,"+$$objRootDSE.Get("defaultNamingContext"))' + @crlf EndIf $strHTML = $strHTML + 'EndIf' + @crlf ;The remarked section adds error testing to determine if the attempted ;connection to a domain failed. ;$strHTML = $strHTML + "If @@error = 424 " + @crlf ;$strHTML = $strHTML + " ? You must run the script from an Active Directory enabled client." + @crlf ;$strHTML = $strHTML + " Quit 1" + @crlf ;$strHTML = $strHTML + "EndIf" + @crlf $strHTML = $strHTML + ';***********************************************' + @crlf $strHTML = $strHTML + ';* End connect to an object *' + @crlf $strHTML = $strHTML + ';***********************************************' + @crlf + @crlf EndIf $BindString = $strHTML EndFunction
;************************************************************************** ; These two routines generate the text that appears in the two modal dialog ; boxes. These dialog boxes appear when the Running This Script or ; Script Notes buttons are pressed. ;************************************************************************** function DoViewHelp( $title, $height, $width, $message ) if $message="" return endif
dim $ie,$doc,$f,$t
$ie = createobject("internetexplorer.application") $ie.width = $width $ie.height = $height $ie.addressbar=0 $ie.menubar=0 $ie.toolbar=0 $ie.statusbar=0 $ie.navigate("about:blank") $doc = $ie.document $doc.write("<html><head><title>$title</title></head>"+join(split($message,@crlf),"<br>")+"</html>") $ie.visible=1
while $ie.visible sleep 0.25 loop $frmMain.Refresh $frmMain.SetFocus
$ie = nothing endfunction
function RunDialog() $intwidth = 800 $title = "Before Running The " + $TaskSelectPulldown.Text + " - " + UCase(Left($classesPulldown.Text,1)) + substr($classesPulldown.Text,2,len($classesPulldown.Text)) + " Script"
$strHTML = "" $strHTML = $strHTML + "<head>" $strHTML = $strHTML + "<style>" $strHTML = $strHTML + "BODY{background-color: beige;font-family: arial;font-size:10pt;margin-left:10px;}" $strHTML = $strHTML + "div.head{font-size:12pt;font-weight:bold;}" $strHTML = $strHTML + "div.code{font-size:10pt;font-family:courier;margin-left:10px}" $strHTML = $strHTML + "UL{margin-top:5px;margin-bottom:5px;}" $strHTML = $strHTML + "</style>" $strHTML = $strHTML + "</head>" $strHTML = $strHTML + "<body>" $strAddlNotes = "" Select Case "Create an object" $arrAltText = "create", lcase($TaskSelectPulldown.Text), " to create" Case "Write an object" $arrAltText = "write", lcase($TaskSelectPulldown.Text), " whose attributes you will assign" $strAddlNotes = "<div class = head>Attribute Values</div>" + "<UL><li><i>VALUE</i> or <i>VALUEn</i> - $string values" + "<li><i>COUNTRY CODE VALUE</i> - This value is a two-digit country code. For a " + "list of country codes, see <A href=http://www.iso.org>The ISO Web site</A>" + "<li><i>DRIVE LETTER VALUE</i> - This value is a drive letter, " + "typically a value between F and Z. Do not specify a colon following the letter." + "<li><i>DISTINGUISHED NAME VALUE</i> - This value is the DN of an $object." + @crlf + "<b>Examples</b>" + @crlf + "The MyerKen user account in the Management OU of the NA.fabrikam.com domain:" + "<div class=code>cn=myerken,ou=management,dc=na,dc=fabrikam,dc=com</div>" + "The Atl-Users group in the Users container of the contoso.com domain:" + "<div class=code>cn=atl-users,cn=users,dc=contoso,dc=com</div>" + "</UL>" Case "Read an object" $arrAltText = "read", lcase($TaskSelectPulldown.Text), " whose attributes you will read" Case "Delete an object" $arrAltText = "dele
_________________________
Christophe
|
|
Top
|
|
|
|
Moderator: Arend_, Allen, Jochen, Radimus, Glenn Barnas, ShaneEP, Ruud van Velsen, Mart
|
0 registered
and 601 anonymous users online.
|
|
|