VBScript to Deploy Printers, Shortcuts and Network Drives


Hi everyone,

For those who want a script to automate the deployment of printers, shortcuts and network drives for users and would like to manage it through Security Groups of Active Directory, I have developed and improved in the last years this VBScript, and I would like to share it with you.

Enjoy!


'-----------========Função Main=======------------
On Error Resume Next

'--==Constantes e Variáveis==--
Const HKEY_CURRENT_USER = &H80000001
Public NomeDir(21), GrupoDir(21), LetraDir(21), UncDir(21), GrupoImp(8), UncImp(8), NomeAtalho(11), UncAtalho(11), GrupoAtalho(11)
Public objNetwork, objShellApp, objGroup
'---------Fim---------

'--==Valores dos Arrays de Diretório==--
'NOME EXIBIDO AO USUÁRIO DENTRO DO WINDOWS EXPLORER
NomeDir(0) = "Diretório - Depto_A"
NomeDir(1) = "Diretório - Depto_B"
NomeDir(2) = "Diretório - Depto_C"
NomeDir(3) = "Diretório - Depto_D"
NomeDir(4) = "Diretório - Depto_E"
NomeDir(5) = "Diretório - Depto_F"
NomeDir(6) = "Diretório - Depto_G"
NomeDir(7) = "Diretório - Depto_H"
NomeDir(8) = "Diretório - Depto_I"
NomeDir(9) = "Diretório - Depto_J"
NomeDir(10) = "Diretório - Depto_K"
NomeDir(11) = "Diretório - Depto_L"
NomeDir(12) = "Diretório - Depto_M"
NomeDir(13) = "Diretório - Depto_N"
NomeDir(14) = "Diretório - Depto_O"
NomeDir(15) = "Diretório - Depto_P"
NomeDir(16) = "Diretório - Depto_Q"
NomeDir(17) = "Diretório - Depto_R"
NomeDir(18) = "Diretório - Depto_S"
NomeDir(19) = "Diretório - Depto_T"
NomeDir(20) = "Diretório - Depto_U"
NomeDir(21) = "Diretório - Depto_V"

'NOME DOS GRUPOS QUE DEVEM SER CRIADOS NO AD CONTENDO OS USUÁRIOS
GrupoDir(0) = "Grupo Diretorios - Depto_A"
GrupoDir(1) = "Grupo Diretorios - Depto_B"
GrupoDir(2) = "Grupo Diretorios - Depto_C"
GrupoDir(3) = "Grupo Diretorios - Depto_D"
GrupoDir(4) = "Grupo Diretorios - Depto_E"
GrupoDir(5) = "Grupo Diretorios - Depto_F"
GrupoDir(6) = "Grupo Diretorios - Depto_G"
GrupoDir(7) = "Grupo Diretorios - Depto_H"
GrupoDir(8) = "Grupo Diretorios - Depto_I"
GrupoDir(9) = "Grupo Diretorios - Depto_J"
GrupoDir(10) = "Grupo Diretorios - Depto_K"
GrupoDir(11) = "Grupo Diretorios - Depto_L"
GrupoDir(12) = "Grupo Diretorios - Depto_M"
GrupoDir(13) = "Grupo Diretorios - Depto_N"
GrupoDir(14) = "Grupo Diretorios - Depto_O"
GrupoDir(15) = "Grupo Diretorios - Depto_P"
GrupoDir(16) = "Grupo Diretorios - Depto_Q"
GrupoDir(17) = "Grupo Diretorios - Depto_R"
GrupoDir(18) = "Grupo Diretorios - Depto_S"
GrupoDir(19) = "Grupo Diretorios - Depto_T"
GrupoDir(20) = "Grupo Diretorios - Depto_U"
GrupoDir(21) = "Grupo Diretorios - Depto_V"

'LETRAS QUE SERÃO MAPEADAS PARA OS USUÁRIOS
LetraDir(0) = "G:"
LetraDir(1) = "H:"
LetraDir(2) = "I:"
LetraDir(3) = "Z:"
LetraDir(4) = "J:"
LetraDir(5) = "M:"
LetraDir(6) = "N:"
LetraDir(7) = "P:"
LetraDir(8) = "Q:"
LetraDir(9) = "R:"
LetraDir(10) = "S:"
LetraDir(11) = "T:"
LetraDir(12) = "U:"
LetraDir(13) = "V:"
LetraDir(14) = "O:"
LetraDir(15) = "X:"
LetraDir(16) = "W:"
LetraDir(17) = "Y:"
LetraDir(18) = "K:"
LetraDir(19) = "M:"
LetraDir(20) = "L:"
LetraDir(21) = "A:"

'CAMINHO UNC DO COMPARTILHAMENTO
UncDir(0) = "\\servername\Depto_A"
UncDir(1) = "\\servername\Depto_B"
UncDir(2) = "\\servername\Depto_C"
UncDir(3) = "\\servername\Depto_D"
UncDir(4) = "\\servername\Depto_E"
UncDir(5) = "\\servername\Depto_F"
UncDir(6) = "\\servername\Depto_G"
UncDir(7) = "\\servername\Depto_H"
UncDir(8) = "\\servername\Depto_I"
UncDir(9) = "\\servername\Depto_J"
UncDir(10) = "\\servername\Depto_K"
UncDir(11) = "\\servername\Depto_L"
UncDir(12) = "\\servername\Depto_M"
UncDir(13) = "\\servername\Depto_N"
UncDir(14) = "\\servername\Depto_O"
UncDir(15) = "\\servername\Depto_P"
UncDir(16) = "\\servername\Depto_Q"
UncDir(17) = "\\servername\Depto_R"
UncDir(18) = "\\servername\Depto_S"
UncDir(19) = "\\servername\Depto_T"
UncDir(20) = "\\servername\Depto_U"
UncDir(21) = "\\servername\Depto_V"

'---------Fim---------

'--==Valores dos Arrays de Impressora==--
GrupoImp(0) = "Grupo Politicas_Impressoras - Administrativo"
GrupoImp(1) = "Grupo Politicas_Impressoras - Comercial A"
GrupoImp(2) = "Grupo Politicas_Impressoras - Comercial B"
GrupoImp(3) = "Grupo Politicas_Impressoras - Engenharia"
GrupoImp(4) = "Grupo Politicas_Impressoras - Pcp"
GrupoImp(5) = "Grupo Politicas_Impressoras - HP600_Compras"
GrupoImp(6) = "Grupo Politicas_Impressoras - 9800_Engenharia"
GrupoImp(7) = "Grupo Politicas_Impressoras - PRO400_Administrativo"
GrupoImp(8) = "Grupo Politicas_Impressoras - Comercial C"

UncImp(0) = "\\servername\administrativo"
UncImp(1) = "\\servername\comerciala"
UncImp(2) = "\\servername\comercialb"
UncImp(3) = "\\servername\engenharia"
UncImp(4) = "\\servername\pcp"
UncImp(5) = "\\servername\HP600_compras"
UncImp(6) = "\\servername\9800_engenharia"
UncImp(7) = "\\servername\PRO400_administrativo"
UncImp(8) = "\\servername\M402_COMERCIAL"

'---------Fim---------

'--==Valores dos Arrays de Atalhos==--

'DEVE CONTER AQUI O MESMO NOME DO ATALHO QUE SERÁ FEITO A CÓPIA DO CAMINHO ABAIXO
NomeAtalho(0) = "ATALHO1.lnk"
NomeAtalho(1) = "ATALHO2.lnk"
NomeAtalho(2) = "ATALHO3.lnk"
NomeAtalho(3) = "ATALHO4.lnk"
NomeAtalho(4) = "ATALHO5.lnk"
NomeAtalho(5) = "ATALHO6.lnk"
NomeAtalho(6) = "ATALHO7.lnk"
NomeAtalho(7) = "ATALHO8.url"
NomeAtalho(8) = "ATALHO9.url"
NomeAtalho(9) = "ATALHO10.lnk"
NomeAtalho(10) = "ATALHO11.rdp"
NomeAtalho(11) = "ATALHO12.url"

'LOCAL ONDE OS ATALHOS JÁ ESTEJAM CRIADOS E ARMAZENADOS, O SCRIPT APENAS FARÁ UMA CÓPIA DO MESMO
UncAtalho(0) = "\\servername\caminho\unc\ATALHO1.lnk"
UncAtalho(1) = "\\servername\caminho\unc\ATALHO2.lnk"
UncAtalho(2) = "\\servername\caminho\unc\ATALHO3.lnk"
UncAtalho(3) = "\\servername\caminho\unc\ATALHO4.lnk"
UncAtalho(4) = "\\servername\caminho\unc\ATALHO5.lnk"
UncAtalho(5) = "\\servername\caminho\unc\ATALHO6.lnk"
UncAtalho(6) = "\\servername\caminho\unc\ATALHO7.lnk"
UncAtalho(7) = "\\servername\caminho\unc\ATALHO8.url"
UncAtalho(8) = "\\servername\caminho\unc\ATALHO9.url"
UncAtalho(9) = "\\servername\caminho\unc\ATALHO10.lnk"
UncAtalho(10) = "\\servername\caminho\unc\ATALHO11.rdp"
UncAtalho(11) = "\\servername\caminho\unc\ATALHO12.url"

'GRUPO AD
    GrupoAtalho(0) = "Grupo Politicas_Deploy - ATALHO1"
GrupoAtalho(1) = "Grupo Politicas_Deploy - ATALHO2"
GrupoAtalho(2) = "Grupo Politicas_Deploy - ATALHO3"
GrupoAtalho(3) = "Grupo Politicas_Deploy - ATALHO4"
GrupoAtalho(4) = "Grupo Politicas_Deploy - ATALHO5"
GrupoAtalho(5) = "Grupo Politicas_Deploy - ATALHO6"
GrupoAtalho(6) = "Grupo Politicas_Deploy - ATALHO7"
GrupoAtalho(7) = "Grupo Politicas_Deploy - ATALHO8"
GrupoAtalho(8) = "Grupo Politicas_Deploy - ATALHO9"
GrupoAtalho(9) = "Grupo Politicas_Deploy - ATALHO10"
GrupoAtalho(10) = "Grupo Politicas_Deploy - ATALHO11"
GrupoAtalho(11) = "Grupo Politicas_Deploy - ATALHO12"


    '---------Fim---------

'---===Metodos Set e Get===---
Set objSysInfo = CreateObject("ADSystemInfo")
Set objNetwork = CreateObject("Wscript.Network")
Set objShellApp = CreateObject("Shell.Application")
Set objUser = GetObject("LDAP://" & objSysInfo.UserName)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objWSH = CreateObject("WScript.Shell")
objDesktop = objWSH.SpecialFolders("Desktop")
'---------Fim---------

'CASO TENHA UM ATALHO PADRÃO QUE QUEIRA ADICIONAR PARA TODOS USUÁRIOS, CONFIGURE O MESMO ABAIXO
'OBS: SERÁ APLICADO PARA O GRUPO DE USUÁRIOS CONTIDO NO FILTRO DE SEGURANÇA DA GPO DESTE SCRIPT
'---===Copia atalho do servidor de arquivos para "Usuários Autenticados"===---
If Not objFSO.FileExists(objDesktop & "\" & "Server.lnk") Then
           objFSO.CopyFile "\\nameserver\NETLOGON\Server.lnk", objDesktop & "\"
        End If
'---------Fim---------

'---===Remove as Impressoras setadas no UncImp===---
For i = 0 To 7
objNetwork.RemovePrinterConnection(UncImp(i))
Next
'---------Fim---------

'---===Define o homepage dos navegadores, independente da versão do IE===---
objWSH.RegWrite "HKCU\SOFTWARE\Microsoft\Internet Explorer\Main\Start page", "http://seuwebsite.com.br", "REG_SZ"
'---------Fim---------

'---===Verifica se o Usuario pertence a um Array de grupos ou String===---
If IsArray(objUser.MemberOf) = False Then
Call Mapear(objUser.MemberOf)
Else
For Each Group In objUser.MemberOf
Call Mapear(Group)
Call Subgrupo(Group)
Next
End If
'---------Fim---------
'--------- Fim Da Função Main ---------

'-----------========Subrotinas=======------------

'---===Executa mapeamento de Diretórios, Impressoras e Softwares comparando os grupos ao que o usuario pertence===---
Sub Mapear(byVal MemberOf)
On Error Resume Next

' --== MAPEAMENTO DOS DIRETORIOS ==--
i = 0
For Each Dir In GrupoDir
If InStr(MemberOf, Dir) Then
objNetwork.RemoveNetworkDRIVE(LetraDir(i))
objNetwork.MapNetworkDrive LetraDir(i), UncDir(i)
objShellApp.NameSpace(LetraDir(i)).Self.Name = NomeDir(i)
End If
i = i + 1
Next

' --== MAPEAMENTO DAS IMPRESSORAS ==--
i = 0
For Each Imps In GrupoImp
If InStr(MemberOf, Imps) Then
objNetwork.AddWindowsPrinterConnection(UncImp(i))
'DEFININDO IMPRESSORAS PRINCIPAIS COMO PADRÃO
If InStr(MemberOf, GrupoImp(0)) Then
objNetwork.SetDefaultPrinter(UncImp(i))
ElseIf InStr(MemberOf, GrupoImp(1)) Then
objNetwork.SetDefaultPrinter(UncImp(i))
ElseIf InStr(MemberOf, GrupoImp(2)) Then
objNetwork.SetDefaultPrinter(UncImp(i))
ElseIf InStr(MemberOf, GrupoImp(3)) Then
objNetwork.SetDefaultPrinter(UncImp(i))
ElseIf InStr(MemberOf, GrupoImp(4)) Then
objNetwork.SetDefaultPrinter(UncImp(i))
ElseIf InStr(MemberOf, GrupoImp(5)) Then
objNetwork.SetDefaultPrinter(UncImp(i))
End If
End If
i = i + 1
Next

'---== MAPEAMENTO DOS SOFTWARES INTERNOS NA ÁREA DE TRABALHO ==---
i = 0              
For Each Atalho In GrupoAtalho
If InStr(MemberOf, Atalho) Then
If Not objFSO.FileExists(objDesktop & "\" & (NomeAtalho(i))) Then
objFSO.CopyFile UncAtalho(i), objDesktop & "\"
End If
End If
i = i + 1
Next

End Sub
'---------Fim---------

'---===Executa mapeamento de Diretórios buscando usuários que estão em grupos aninhados===---
Sub Subgrupo(strcaminho)
Set objGroup = GetObject("LDAP://" & strCaminho)
objGroup.GetInfo
arrSubMembro = objGroup.GetEx("memberOf")

For Each strSubMember in arrSubMembro
Call Mapear(strSubMember)
Next
End sub
'---------Fim---------

'---------Fim das Subrotinas---------

'--------- Fim do Script ---------

Comentários