Artigos do Blog

Área destinada a publicação dos artigos.


Marcelo Montezuma - Rio de Janeiro - Brasil

sexta-feira, 10 de outubro de 2008

Seleciona e move conta de computador no AD

'Esse script é interessane, pois toda vez que é executado o mesmo envia um email com
'o nome do usuário e da estação onde foi executado. Um outro ponto interessane é
'que
'também podemos controlar até quando o script será usado devido a verificação
'efetuada na linha de 'versão dentro do arquivo ID salvo dentro de um
'compartilhamento.

'Título= Seleciona e move conta de computador no AD
'Autor= Marcelo Montezuma
'versão Beta 1.0
'criada em 26/09/2007
'
'-----------------------------------------------------------------------------------------------
'Início
'-----------------------------------------------------------------------------------------------
On Error Resume Next

'-----------------------------------------------------------------------------------------------
'Constantes e variáveis
'-----------------------------------------------------------------------------------------------
Const ForAppending = 8
Const ForReading = 1
Const ADS_SCOPE_SUBTREE = 2
Const cdoSendUsingMethod = "http://schemas.microsoft.com/cdo/configuration/sendusing", _
cdoSendUsingPort = 2, _
cdoSMTPServer = "http://schemas.microsoft.com/cdo/configuration/smtpserver"

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")
Set objDialog = CreateObject("UserAccounts.CommonDialog")

objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCOmmand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

Set objWshNet = CreateObject("Wscript.Network")
Var_StrPC_Name = LCase(objWshNet.ComputerName)
Set objRootFile = strName

strPClocal = objShell.ExpandEnvironmentStrings("%computername%")
strUserLocal = objShell.ExpandEnvironmentStrings("%username%")
'Título que será exibido nas caixas de diálogo.
strLogoMarca = "Scriptonita"
strVersao = ""
'Servidor para amarzenar os logs e o arquivo de controle de versão.
strFileImport = "\\servidor\pasta_compartilhada\id"
strFileExport2 = "\\servidor\pasta_compartilhada\" & strPClocal & "_" & strUserLocal &".log"
strFileExport3 = "\\servidor\pasta_compartilhada\geral.log"

'e-mail
'remetente do e-mail
strMailFrom = "Administrador@scriptonita.com"
'lista de e-mail separados por(;) das pessoas que serão notificadas toda a vez que o script for executado.
strMailto = "email-1@teste.com;email-2@teste.com;email-3@teste.com"
strSubject = "Active Directory Info - " & strUserLocal
strMessage = "Scriptonita"
strSMTPServer = "Servidor_de_correio"
'logfile = "c:\logteste.txt"

'-----------------------------------------------------------------------------------------------
'Mensagens
'-----------------------------------------------------------------------------------------------
strMsg1 = ("Computador" & vbCrLf &_
"------------------------" & vbCrLf & vbCrLf &_
"Digite o NOME do Computador desejado:" & vbCrLf &_
"Para sair do aplicativo, digite 0 (zero) e confirme.")

'-----------------------------------------------------------------------------------------------
'Verifica versão do script
'-----------------------------------------------------------------------------------------------
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objRootFileK = objFSO.OpenTextFile(strFileImport, 1)
Flag=0
strKey = objRootFilek.ReadLine
If strkey = "v1" Then 'If Verifica versão
Flag = 1
Else
wscript.Echo ("Versao desatualizada, entre em contato com o administrador")
Flag =0
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objLogFile3 = objFSO.OpenTextFile(strFileExport3 , ForAppending,True)
objLogFile3.WriteLine strKey & ";" & strPClocal & ";" & strUserLocal & ";" & Now
'e-mail
strMessage = "Computador :....." & strPClocal & vbCrLf &_
"Usuário :............." & strUserlocal & vbCrLf &_
"Versão :............. " & strKey & vbCrLf &_
"Hora :................ "& now
Call SendMail(strFrom,strTo,strSubject & " " & strOutputComputerName,strMessage)
WScript.Quit
End If 'Fim do If Verifica versão

'-----------------------------------------------------------------------------------------------
'Verifica Hostname e Se a versão está OK
'-----------------------------------------------------------------------------------------------
If flag =1 then

Do
strName = InputBox(strMsg1,"Seleciona PC " & strLogoMarca & strVersao,Var_StrPC_Name)
If strName = "0" Then WScript.Quit(1)
Loop Until strName <> ""

'-----------------------------------------------------------------------------------------------
'Verifica e trata e exibe o nome da OU atual
'-----------------------------------------------------------------------------------------------

objCommand.CommandText = "Select * from 'LDAP://DC=SEU_DOMÍNIO,DC=Corp,DC=Net' " & "Where objectClass='computer' AND Name='" & strName & "'"
Set objRecordSet = objCommand.Execute

'OU Destino
Set objNewOU = GetObject(strDestinyLDAP)

'OU Origem
strSource = objRecordSet.Fields("ADSPath")

'Separa a OU do Path
Acum = split(strSource, ",")
strA1 = acum(0)
strA2 = acum(1)

'Trata o Nome da OU
Acum2 = split(strA2, "=")
strB1 = acum2(0)
strB2 = acum2(1)

strMsg = "Este PC está atualmente na OU:"& vbCrLf & strB2 & vbCrLf & vbCrLf&_
"Caminho completo: "& strSource & vbCrLf & vbCrLf &_
"Deseja continuar a operação?"

strMsgVal = MsgBox (strMsg,vbYesNo, "Validação da Operação " & strLogoMarca & strversao)

'log

Set objLogFile3 = objFSO.OpenTextFile(strFileExport3 , ForAppending,True)
objLogFile3.WriteLine strHost & ";" & strSource & ";" & strPClocal & ";" & strUserLocal & ";" & Now

'fim do log

If strMsgVal = "6" Then

'-----------------------------------------------------------------------------------------------
'Entrada de dados
'-----------------------------------------------------------------------------------------------
Do
strOpcao = InputBox ("INFORME O NUMERO DA OPCAO DESEJADA:" & vbCrLf &_
"----------------------------------------------------------------------------------------------------------------" & vbCrLf &_
" 1 - DESCRIÇÃO DA OU A" & vbCrLf & vbCrLf &_
" 2 - DESCRIÇÃO DA OU B " & vbCrLf & vbCrLf &_
" 3 - DESCRIÇÃO DA OU C" & vbCrLf & vbCrLf &_
" 4 - DESCRIÇÃO DA OU D " & vbCrLf & vbCrLf &_
" 5 - DESCRIÇÃO DA OU E" & vbCrLf & vbCrLf &_
" 6 - PADRAO (RJ) " & vbCrLf & vbCrLf &_
" 7 - NOTEBOOK (RJ)" & vbCrLf & vbCrLf &_
" 8 - VIP (RJ) " & vbCrLf & vbCrLf &_
" 9 - SUPORTE (RJ)" & vbCrLf & vbCrLf &_
" 0 - SAIR" & vbCrLf & vbCrLf ,"Seleciona OU Destino " & strLogoMarca & strversao,"0")

If strOpcao = "0" Then WScript.Quit(1)
Loop Until strOpcao <> ""

'-----------------------------------------------------------------------------------------------
'Seleciona a OU Correta
'-----------------------------------------------------------------------------------------------
srtCheckPoint = 0

Select Case strOpcao

Case "1"
srtCheckPoint = 1
strPerfil = "DESCRIÇÃO DA OU A"
strFil = "A"
strReg = "Regional A"
strDestinyLDAP = "LDAP://OU=" & strPerfil & ",OU=" & strFil & ",OU=" & strReg & ",OU=Estacoes,DC=SEU_DOMINIO,DC=corp,DC=net"

Case "2"
srtCheckPoint = 1
strPerfil = "DESCRIÇÃO DA OU B"
strFil = "B"
strReg = "Regional B"
strDestinyLDAP = "LDAP://OU=" & strPerfil & ",OU=" & strFil & ",OU=" & strReg & ",OU=Estacoes,DC=SEU_DOMINIO,DC=corp,DC=net"

Case "3"
srtCheckPoint = 1
strPerfil = "DESCRIÇÃO DA OU C"
strFil = "C"
strReg = "Regional C"
strDestinyLDAP = "LDAP://OU=" & strPerfil & ",OU=" & strFil & ",OU=" & strReg & ",OU=Estacoes,DC=SEU_DOMINIO,DC=corp,DC=net"

Case "4"
srtCheckPoint = 1
strOUDest = "DESCRIÇÃO DA OU D"
strPerfil = "D"
strFil = "D"
strReg = "Regional D"
strDestinyLDAP = "LDAP://OU=" & strOUDest & ",OU=" & strPerfil & ",OU=" & strFil & ",OU=" & strReg & ",OU=Estacoes,DC=SEU_DOMINIO,DC=corp,DC=net"

Case "5"
srtCheckPoint = 1
strOUDest = "DESCRIÇÃO DA OU E"
strPerfil = "E"
strFil = "E"
strReg = "Regional E"
strDestinyLDAP = "LDAP://OU=" & strOUDest & ",OU=" & strPerfil & ",OU=" & strFil & ",OU=" & strReg & ",OU=Estacoes,DC=SEU_DOMINIO,DC=corp,DC=net"

Case "6"
srtCheckPoint = 1
strPerfil = "Padrao"
strFil = "RJ"
strReg = "Regional RJ"
strDestinyLDAP = "LDAP://OU="& strPerfil & ",OU=" & strFil & ",OU=" & strReg & ",OU=Estacoes,DC=SEU_DOMINIO,DC=corp,DC=net"

Case "7"
srtCheckPoint = 1
strPerfil = "Notebooks"
strFil = "RJ"
strReg = "Regional RJ"
strDestinyLDAP = "LDAP://OU=" & strPerfil & ",OU=" & strFil & ",OU=" & strReg & ",OU=Estacoes,DC=SEU_DOMINIO,DC=corp,DC=net"

Case "8"
srtCheckPoint = 1
strPerfil = "Vip"
strFil = "RJ"
strReg = "Regional RJ"
strDestinyLDAP = "LDAP://OU=" & strPerfil & ",OU=" & strFil & ",OU=" & strReg & ",OU=Estacoes,DC=SEU_DOMINIO,DC=corp,DC=net"

Case "9"
srtCheckPoint = 1
strPerfil = "Suporte"
strFil = "RJ"
strReg = "Regional RJ"
strDestinyLDAP = "LDAP://OU=" & strPerfil & ",OU=" & strFil & ",OU=" & strReg & ",OU=Estacoes,DC=SEU_DOMINIO,DC=corp,DC=net"

Case Else
WScript.Echo ("Opcao incorreta, o aplicativo será encerrado" )
WScript.Quit(1)

End Select

If srtCheckPoint = 1 then

objCommand.CommandText = "Select * from 'LDAP://DC=SEU_DOMINIO,DC=Corp,DC=Net' " & "Where objectClass='computer' AND Name='" & strName & "'"
Set objRecordSet = objCommand.Execute

'Destiny OU
Set objNewOU = GetObject(strDestinyLDAP)

'Source OU
strSource = objRecordSet.Fields("ADSPath")
strHostTemp = "CN=" & strName
Set objMoveComputer = objNewOU.MoveHere (strSource, strHostTemp)
objRootFile.Close

'Log
Set objLogFile2 = objFSO.OpenTextFile(strFileExport2 , ForAppending,True)
objLogFile2.WriteLine strHost & ";" & strSource & ";" & strDestinyLDAP & ";" & strPClocal & ";" & strUserLocal & ";" & Now
Set objLogFile3 = objFSO.OpenTextFile(strFileExport3 , ForAppending,True)
objLogFile3.WriteLine strHost & ";" & strSource & ";" & strDestinyLDAP & ";" & strPClocal & ";" & strUserLocal & ";" & Now
'e-mail
strMessage = "Computador :....." & strPClocal & vbCrLf &_
"Usuário :............." & strUserlocal & vbCrLf &_
"Versão :............. " & strKey & vbCrLf &_
"Hora :................" & Now & vbCrLf & vbCrLf &_
"OU de Origem:........." & strSource & vbCrLf & vbCrLf &_
"OU de Destino:........" & strDestinyLDAP & vbCrLf
Call SendMail(strFrom,strTo,strSubject & " " & strOutputComputerName,strMessage)

'Fim do Log

WScript.Echo "Fim do processo."

End If

Else

WScript.Echo "Processo finalizado pelo usuário"
End If
End If
objLogFile2.Close
objLogFile3.Close
objRootFile.Close

WScript.Quit(1)

'------------------------------------------------------------------------
'Function SendMail - email the warning file (RETIRADO DA INERNET)
'------------------------------------------------------------------------
Function SendMail(strFrom,strTo,strSubject,strMessage)
Dim iMsg, iConf, Flds

'// Create the CDO connections.
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
Set Flds = iConf.Fields

'// SMTP server configuration.
With Flds
.Item(cdoSendUsingMethod) = cdoSendUsingPort
'// Set the SMTP server address here.
.Item(cdoSMTPServer) = strSMTPServer
.Update
End With

'l.close

'Dim r
'Set r = ws.OpenTextFile (logfile, ForReading, False, TristateUseDefault)
'strMessage = r.readall

'// Set the message properties.
With iMsg
Set .Configuration = iConf
.To = strMailTo
.From = strMailFrom
.Subject = strSubject
.TextBody = strMessage
End With

'iMsg.AddAttachment wsuslog
iMsg.HTMLBody = replace(strMessage,vbnewline,"
")
'// Send the message.
on error resume next

iMsg.Send ' send the message.
Set iMsg = nothing

End Function

Seja o primeiro a comentar

  ©Template Blogger Elegance by Dicas Blogger.

TOPO