none
VBscript mudando conta para Disable no ActiveDerectory RRS feed

  • 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 sub

    Se  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
    terça-feira, 17 de setembro de 2013 20:39

Todas as Respostas

  • A linha 93 é esta

    Set objUser = GetObject("LDAP://"& strUserCN)

    terça-feira, 17 de setembro de 2013 20:40
  • 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
    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 linha

    Sub Desabilita_User()
        wscript.echo "Teste: " & strUserCN

    ele 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.SetInfo

    acredito que seja por ai o problema

    obrigado

    quarta-feira, 18 de setembro de 2013 00:09