Active Directory – Script di logon per condivisioni di rete

Oggi mi sono ritrovato a dover risolvere un problemino, non da poco, in un ambiente MS Active Directory. La questione era:

Abbiamo n utenti di Dominio, vogliamo che ognuno, al momento del login, venga connesso automaticamente a delle condivisioni di rete (share) di competenza della propria Unità Organizzativa.

C’è stato chi mi ha detto “… semplice !!! …” io ho risposto ” … mica tanto …” perchè si deve :

1) evitare che al momento della connessione la “lettera di unità” sia già utilizzata

2) evitare che la connessione sia attiva dall’ultimo logout

Ho risolto approcciando il problema come segue :

innanzi tutto ho deciso di usare alcune righe di codice di VBScript, in modo da avere il mio file con estensione vbs che, importato in una Group Policy, può essere eseguito da qualsisi macchina in fase di login.

In pratica, ad ogni utente, in fase di logon viene passato un file nomescript.vbs che verrà eseguito dalla macchina sulla quale si effettuta l’operazioni di accesso al Dominio. Una volta eseguito lo script, l’utente troverà le sue condivisioni in Risorse del Computer.

A questo punto, per risolvere i problemi del punto 1 e 2, siamo obbligati a profilare le macchine che abbiamo nel nostro Dominio. Immaginiamo che ogni computer abbia queste unità di memoria :

a = floppy;  c =hard disk 1; d = hard disk 2; e = lettore dvd 1; f = lettore dvd 2; g = penna usb 1; h = penna usb 2;

l’operazione che lo script dovrà eseguire, quindi, sarà quella di disconnettere tutti i drive di rete dalla lettera “i” alla lettera “z”, lo faremo con un ciclo for next, poi ricollegheremo tutte le condivisioni create ed impostate sul server che sarà raggiungibile all’interno del Dominio attraverso un semplice \\server. Lo script alla fine si presentava così :

' Imposto la condivisione della condivisione di rete 
Option Explicit
Dim strRemotePath1, strRemotePath2, strRemotePath3, strRemotePath4  
Dim strDriveLetter1, strDriveLetter2, strDriveLetter3, strDriveLetter4
Dim strDriveName1, strDriveName2, strDriveName3, strDriveName4  
Dim objNetwork, objShell, objShellApp
Dim CheckDrive, intDrive
Dim bforce, bUpdateProfile,DriveLetter
bforce = "True"
bUpdateProfile ="True"

' Imposto i nomi dei drive ed i loro percorsi

strDriveLetter1 = "Z:"
strDriveLetter2 = "W:"
strDriveLetter3 = "Y:"
strDriveLetter4 = "X:"

strRemotePath1 = "\\server\Share1$"
strRemotePath2 = "\\server\Share2$"
strRemotePath3 = "\\server\archivio"
strRemotePath4 = "\\server\scambio"

strDriveName1 = "Gruppo Lavoro 1"
strDriveName2 = "Gruppo Lavoro 2"
strDriveName3 = "Archivio"
strDriveName4 = "Archivio - Scambio"

' Creo gli oggetti per lo script:
' objShell and objNetwork e conto i drive collegati
Set objShell = CreateObject("WScript.Shell")
Set objNetwork = CreateObject("WScript.Network")
Set objShellApp = CreateObject("Shell.Application")
Set CheckDrive = objNetwork.EnumNetworkDrives()
' Uso un For ... Next loop
' Confronto il risultato del For con strDriveLetter
On Error Resume Next

For intDrive = CheckDrive.Count - 1 to 0 Step -2
DriveLetter=CheckDrive.Item(intDrive)
if Len(DriveLetter) = 2 And DriveLetter >="I:" And DriveLetter <="Z:" Then
WshNetwork.RemoveNetworkDrive DriveLetter, bforce, bUpdateProfile
End If
Next

' disconnetto e riconnetto dopo per sicurezza
' Messaggio di confema  
objShell.PopUp "Disconnesso tutti i drive di rete ",2,"Drive di rete"
objNetwork.MapNetworkDrive strDriveLetter1, strRemotePath1
objNetwork.MapNetworkDrive strDriveLetter2, strRemotePath2
objNetwork.MapNetworkDrive strDriveLetter3, strRemotePath3
objNetwork.MapNetworkDrive strDriveLetter4, strRemotePath4

objShell.PopUp "Connesso il drive di rete " & strDriveLetter1 & VBCrlf & "Connesso il drive di rete " & strDriveLetter2 & VBCrlf & "Connesso il drive di rete " & strDriveLetter3 & VBCrlf & "Connesso il drive di rete " & strDriveLetter4 &VBCrlf & "Le unità di rete del tuo gruppo sono state riconnesse",2, "Drive di rete"
objShellApp.NameSpace(strDriveLetter1).Self.Name=strDriveName1
objShellApp.NameSpace(strDriveLetter2).Self.Name=strDriveName2
objShellApp.NameSpace(strDriveLetter3).Self.Name=strDriveName3
objShellApp.NameSpace(strDriveLetter4).Self.Name=strDriveName4

WScript.Quit

Bene, vi ricordo che questo script essendo in VB potrete usarlo in qualsiasi situazione necessitiate automatizzare questa operazione al logon, anche senza Dominio impostandolo quindi sulla vostra macchina in : Pannello di controllo >  Strumenti di amministrazione > Gestione Computer > Users > vostronomeutente

Buon lavoro !