Platform SDK: Active Directory, ADSI, and Directory Services |
The following example uses two scripts. The first script (frommenu.vbs) is the command that is run when the menu item is selected. The second script (addmenu.vbs) installs the display specifier context menu item to execute the script frommenu.vbs. This example assumes locale 409 (US English) and extends the user object's context menu in Active Directory administrative snap-ins.
To run the example code
FROMMENU.VBS
'frommenu.vbs is the script run when the menu item is chosen. ''''''''''''''''''''''''''''''''''''''' 'Parse the arguments 'First arg is ADsPath of the selected object. Second is Class. ''''''''''''''''''''''''''''''''''''''' On Error Resume Next Set oArgs = WScript.Arguments sText = "This script was run from a display specifier context menu." & vbCrLf & "Selected Item:" If oArgs.Count > 1 Then sText = sText & vbCrLf & " ADsPath: " & oArgs.item(0) sText = sText & vbCrLf & " Class: " & oArgs.item(1) Else sText = sText & vbCrLf & "Arg Count: " & oArgs.Count End If show_items sText Err.Number = 0 sBind = oArgs.item(0) Set dsobj= GetObject(sBind) If (Err.Number <> 0) Then BailOnFailure Err.Number, "on GetObject method" End If objname = dsobj.Get("name") If (Err.Number <> 0) Then BailOnFailure Err.Number, "on Get method" End If sText = "Use ADsPath from first argument to bind and get RDN (name) property." sText = sText & vbCrLf & "Name: " & objname show_items sText ''''''''''''''''''''''''''''''''''''''' 'Display subroutines ''''''''''''''''''''''''''''''''''''''' Sub show_items(strText) MsgBox strText, vbInformation, "Script from Context Menu" End Sub Sub BailOnFailure(ErrNum, ErrText) strText = "Error 0x" & Hex(ErrNum) & " " & ErrText MsgBox strText, vbInformation, "ADSI Error" WScript.Quit End Sub
ADDMENU.VBS
'addmenu.vbs adds the menu item to run frommenu.vbs 'from user object's context menu in the admin snap-ins. On Error Resume Next Set root= GetObject("LDAP://rootDSE") If (Err.Number <> 0) Then BailOnFailure Err.Number, "on GetObject method" End If sConfig = root.Get("configurationNamingContext") 'hardcoded for user class. sClass = "user" 'hardcoded for US English sLocale = "409" sPath = "LDAP://cn=" & sClass & "-Display,cn=" & sLocale & ",cn=DisplaySpecifiers," & sConfig show_items "Display Specifier: " & sPath Set obj= GetObject(sPath) If (Err.Number <> 0) Then BailOnFailure Err.Number, "on GetObject method" End If 'TODO--check if this is already there. 'Add the value for the context menu sValue = "5,Run My Test Script,c:\frommenu.vbs" vValue = Array(sValue) obj.PutEx 3, "adminContextMenu", vValue If (Err.Number <> 0) Then BailOnFailure Err.Number, "on IADs::PutEx method" End If 'Commit the change obj.SetInfo If (Err.Number <> 0) Then BailOnFailure Err.Number, "on IADs::SetInfo method" End If show_items "Success! Added value to adminContextMenu property of user-Display: " & sValue ''''''''''''''''''''''''''''''''''''''' 'Display subroutines ''''''''''''''''''''''''''''''''''''''' Sub show_items(strText) MsgBox strText, vbInformation, "Add admin context menu" End Sub Sub BailOnFailure(ErrNum, ErrText) strText = "Error 0x" & Hex(ErrNum) & " " & ErrText MsgBox strText, vbInformation, "ADSI Error" WScript.Quit End Sub