Inquiridor
VBscript mudando conta para Disable no ActiveDerectory

Pergunta
-
Pessoal Boa noite
eu tenho um script em VB onde ele lé informações em um arquivo e desabilita o usuário porem ele precisa fazer uma checagem de data e nome do usuário a data do sistema operacional e o nome do usuário no AD o arquivo CSV não tem colunas a formação dele é nome do usuário e data por ex
Joao Silva,10/10/2010
o script lé o nome do usuário encontra ele no AD e compara a data se a data for igual a do sistema operacional ele desabilita a conta caso contrario ele não toma ação nenhuma, o problema que da maneira que escrevi o script não consigo fazer ele desabilitar a conta
o erro é o seguinte
=================================
C:\script....
Line 93
Char 2
Error The Server is not operational
Code 80072034
Source (null)
=================================
segue script
----------------------
Option Explicit
Const ForReading = 1
Dim strL, spl1, strOU, strUserCN, strName, strData, Hoje, dNow, srtDate
Dim objFSO, objInputFile
dNow = Now
Hoje = Left(dNow, 10)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objInputFile = objFSO.OpenTextFile("C:\strati\users.csv", ForReading) 'Seu arquivo de usuarios
'extract from csv file
Do until objInputFile.AtEndOfStream
strL = objInputFile.ReadLine
spl1 = Split(strL, ",")
strData = "C:\strati\users.csv"
strName = (spl1(0))
srtDate = (spl1(1))
If (UserExists(strName) = True) then
if (srtDate = Hoje) then
'WScript.Echo strName & " exists."
Desabilita_User
End If
end if
Loop
Set objFSO = Nothing
Set objInputFile = Nothing
'user exist check
Function UserExists(strsAMUserName)
Dim strDNSDomain, strFilter, strQuery
Dim objConnection, objCommand, objRootLDAP, objLDAPUser, objRecordSet
UserExists = False
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
Set objRootLDAP = GetObject("LDAP://RootDSE")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
'objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
strDNSDomain = objRootLDAP.Get("DefaultNamingContext")
strFilter = "(&(objectCategory=user)(CN=" & strsAMUserName & "))"
'strQuery = "<LDAP://" & strDNSDomain & ">;" & strFilter & ";sAMAccountName,adspath,CN;subTree"
strQuery = "<LDAP://" & strDNSDomain & ">;" & strFilter & ";CN,adspath,;subTree"
objCommand.CommandText = strQuery
'WScript.Echo strFilter
'WScript.Echo strQuery
Set objRecordSet = objCommand.Execute
If objRecordSet.RecordCount = 1 Then
objRecordSet.MoveFirst
' 'If objRecordSet.Fields("sAMAccountname").Value = strsAMUserName Then
If objRecordSet.Fields("CN").Value = strsAMUserName Then
UserExists = True
Set objLDAPUser = GetObject(objRecordSet.Fields("adspath").Value)
strOU = objLDAPUser.Parent
strUserCN = objRecordSet.Fields("CN").Value
End If
Else
WScript.Echo strsAMUserName & " Usuario nao existe ou loginName duplicado no csv"
UserExists = False
strUserCN = ""
strOU = ""
End If
objRecordSet.Close
Set objConnection = Nothing
Set objCommand = Nothing
Set objRootLDAP = Nothing
Set objLDAPUser = Nothing
Set objRecordSet = Nothing
end function
Sub Desabilita_User()
wscript.echo "Teste: " & strUserCN
Set objUser = GetObject("LDAP://"& strUserCN)
objUser.LsAccountDisabled = True
objUser.SetInfo
end subSe alguém puder me dar uma ajuda agradeço ja tentei de algumas formas e não consegui corrigir o problema
- Editado Fábio JrModerator quarta-feira, 18 de setembro de 2013 00:44 Retirada ajuda do título
Todas as Respostas
-
-
Você desenvolveu o Script?
Aonde você passa os parâmetros do domínio? No CN?
Imagino que para realizar esse processo você deve fornecer o CN do usuário, ou então o SamAccountName;
Verifique se ao invés de colocar o nome do usuário você não tem que colocar o CN ou então o SamAccountame no arquivo CSV.
Heitor Mocelin Ferreira - MCP|MCTS|MCITP|MCSA-2k8/12|MCSE-SrvInfra|MCT Microsoft Premier Support - Latino-Americano.
- Sugerido como Resposta Heitor Mocelin terça-feira, 17 de setembro de 2013 21:03
-
Ola
Heitor Mocelin Ferreira
Então ele encontra o nome do usuário no A? como preciso e compara a data nesta linhaSub Desabilita_User()
wscript.echo "Teste: " & strUserCNele mostra a box com "teste nome do user' porem no momento de desativar a conta ele da o erro
Line 93
Char 2
Error The Server is not operational
eu me baseei em um outro script que faz a mesma comparação e exclui o usuário e ele funciona perfeitamente sem erro algum.. eu peguei este script e mudei so a ação dele ao invés de deletar ele da um disable
so alterei essas linhas aqui
Sub Desabilita_User()
wscript.echo "Teste: " & strUserCN
Set objUser = GetObject("LDAP://"& strUserCN)
objUser.LsAccountDisabled = True
objUser.SetInfoacredito que seja por ai o problema
obrigado