VBScript: modificare un attributo di LDAP (esempio d’uso)

| |

Scenario: avevo bisogno di modificare un attributo LDAP secondario, uno di quelli che trovi solo quando abiliti l’opzione “Advanced Features” nella console di Active Directory sul domain controller del tuo ufficio. Il problema è che –almeno su Windows 2008 (R2)– la scheda degli attributi (Attribute Editor) compare solo se apri la scheda utente muovendoti manualmente tra le OU, non la vedi comparire invece se quella scheda la apri in seguito alla ricerca rapida.

VBScript: modificare un attributo di LDAP (esempio d'uso)

Per questo motivo ho accorpato qualche riga di codice VBScript che mi ha permesso di velocizzare l’operazione, sotto un tetto .vbs unico che ti richiederà il nome utente, visualizzerà il valore attuale dell’attributo e ti permetterà di modificarlo con quello che preferisci. Questo esempio d’uso (che è modellato per il mio caso specifico) agisce sul campo “personalTitle“, ma è chiaramente sostituibile con qualsiasi altro campo disponibile (principale o secondario), e in linea di massima lo script è ulteriormente modificabile per fare più operazioni, per effettuare cicli di sostituzioni e molto altro ancora, prendilo quindi solo come base (mancano una serie di controlli di sicurezza, tanto per dire).

Il codice

Pubblicato su Gist per comodità (così lo vedrai sempre aggiornato nel caso in cui ci dovessero essere modifiche future), te lo propongo qui di seguito:


' "personalTitle" Modifier (LDAP attibute)
' ———————————————————————————————————–
' Autore: GSolone
' Versione: 0.1
' Utilizzo: .\personalTitleModifier.vbs
' .\personalTitleModifier.vbs mario.rossi
' ATTENZIONE: utilizzare -se possibile- direttamente sul DC
' Ultima modifica: 27-02-2018
' ———————————————————————————————————–
' Fonti utilizzate:
' https://social.technet.microsoft.com/Forums/scriptcenter/en-US/defcd4c8-1d6f-429c-b5d2-e8b66e857d60/reading-custom-attributes-from-ad-using-vbscript?forum=ITCG
' https://social.technet.microsoft.com/Forums/scriptcenter/en-US/64466490-346e-4ceb-945c-58b957b5f8de/vbscript-modify-custom-attribute-for-all-users-in-domain?forum=ITCG
' https://stackoverflow.com/questions/27347045/vbscript-inputbox-how-to-identify-when-the-cancel-button-is-pressed
' http://www.pierotofy.it/pages/guide/Guida_VBScript/Le_MsgBox/
'
' ————————————————————————————————————
' Modifiche:
' –
set WshShell = CreateObject("WScript.Shell")
' Constants for the NameTranslate object.
Const ADS_NAME_INITTYPE_GC = 3
Const ADS_NAME_TYPE_NT4 = 3
Const ADS_NAME_TYPE_1779 = 1
' Determine DNS name of domain from RootDSE.
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("defaultNamingContext")
' Use the NameTranslate object to find the NetBIOS domain name from the
' DNS domain name.
Set objTrans = CreateObject("NameTranslate")
objTrans.Init ADS_NAME_INITTYPE_GC, ""
objTrans.Set ADS_NAME_TYPE_1779, strDNSDomain
strNetBIOSDomain = objTrans.Get(ADS_NAME_TYPE_NT4)
' Remove trailing backslash.
strNetBIOSDomain = Left(strNetBIOSDomain, Len(strNetBIOSDomain) – 1)
if WScript.Arguments.Count = 0 then
strName = InputBox("Enter domain username" & vbCrLf & "(ex: rossi)", "personalTitleModifier")
else
strName = Wscript.Arguments(0)
end if
' Use the Set method to specify the NT format of the user name.
' Trap error if user does not exist.
On Error Resume Next
objTrans.Set ADS_NAME_TYPE_NT4, strNetBIOSDomain & "\" & strName
If (Err.Number <> 0) Then
On Error GoTo 0
'DEBUG
'Wscript.Echo "User " & strNTName & " does not exist"
MsgBox strNTName & " does not exist",vbCritical,"personalTitleModifier"
Wscript.Quit
End If
On Error GoTo 0
' Use the Get method to retrieve the RPC 1779 Distinguished Name.
strUserDN = objTrans.Get(ADS_NAME_TYPE_1779)
' Bind to the user object.
Set objUser = GetObject("LDAP://" & strUserDN)
' DEBUG: Display attribute of user.
'Wscript.Echo objUser.personalTitle
Dim strPersonalTitle
strPersonalTitle = InputBox("Current title: " & objUser.personalTitle & vbCrLf & vbCrLf & "Enter new personalTitle (clic on Cancel OR press ESC to quit)", "personalTitleModifier", objUser.personalTitle)
If IsEmpty(strPersonalTitle) Then
'cancelled
MsgBox "Operation has been cancelled",vbExclamation,"personalTitleModifier"
Else
'something has entered even zero-length
objUser.Put "personalTitle", strPersonalTitle
objUser.SetInfo
MsgBox objUser.DisplayName & " is now " & objUser.personalTitle,vbInformation,"personalTitleModifier"
'DEBUG
'Wscript.Echo objUser.personalTitle
End If

Puoi scaricare il file VBS direttamente facendo clic qui, anche se è più opportuno andare su Gist e fare clic su Download ZIP per ottenere sempre la versione più aggiornata (pulsante in alto a destra, nda).

Per qualsiasi dubbio, consiglio o ulteriore informazione, l’area commenti è sempre a tua disposizione.

Buon lavoro!


Immagine di copertina: unsplash.com / author: Markus Spiske

Correzioni, suggerimenti? Lascia un commento nell'apposita area qui di seguito o contattami privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! ☕ :-)

L'articolo potrebbe non essere aggiornato

Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)

Condividi l'articolo con i tuoi contatti:
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Commenti
Inline Feedbacks
View all comments