none
Script para habilitar o campo "User Must Change Password at Next Logon" para 2000 usuários RRS feed

  • Pergunta

  • Gostaria de uma ajuda para habilitar o campo "User Must Change Password at Next Logon" para aproximadamente 2000 usuários no AD.

    quinta-feira, 30 de julho de 2009 14:58

Respostas

  • Olá,

    Faça o seguinte, vou te passar 2 scripts, o Script 1 você executa para gerar um arquivo csv com todos os usuários. Feito isso, abra o arquivo no excel e coloque na terceira coluna o caracter S nos usuários que você quer pedir para trocar no proximo logon.

    Depois execute o segundo script que irá abrir a planilha, varrer todos os usuários e o usuário que tiver com o S na terceira coluna ele pede para alterar a senha.

    Altere o dominio "contoso.local" para o seu dominio.


    Se atente que no script 2 o arquivo tem que estar salvo em c:\Lista_de_Usuarios.xls

    Então, abra o arquivo .csv no excel e salve como .xls no c:\Lista_de_Usuarios.xls



    SCRIPT 1:

    Const ADS_SCOPE_SUBTREE = 2

    Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
    Set OutPutFile = FileSystem.CreateTextFile("Lista_de_Usuarios.csv", True)

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection

    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

    objCommand.CommandText = _
        "SELECT name,description,distinguishedname,instanceType FROM 'LDAP://dc=contoso,dc=local' " & _
            "WHERE objectCategory='user'" 

    Set objRecordSet = objCommand.Execute

    objRecordSet.MoveFirst

    Do Until objRecordSet.EOF
        nome = objRecordSet.Fields("name").Value
        descricao = objRecordSet.Fields("description").Value
        cn = objRecordSet.Fields("distinguishedname").Value
        OutPutFile.WriteLine nome & ";" & cn
        objRecordSet.MoveNext
    Loop


    '================================================================================


    SCRIPT 2:


    Const ForReading = 1
    Const ADS_SCOPE_SUBTREE = 2

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection

    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

    Set objExcel = CreateObject("Excel.Application")


    'caminho do arquivo excel
    Set objWorkbook = objExcel.Workbooks.Open ("c:\Lista_de_Usuarios.xls")
    intRow = 2

    Do Until objExcel.Cells(intRow,1).Value = ""
       nome = objExcel.Cells(intRow, 1).Value
       cn = objExcel.Cells(intRow, 2).Value
       altera = objExcel.Cells(intRow, 3).Value
       if TRIM(UCASE(altera)) = "S" Then
          Set objUser = GetObject("LDAP://" & cn)
          objUser.Put "pwdLastSet", 0
          objUser.SetInfo
       End if
       intRow = intRow + 1
    Loop

    objExcel.Quit

    '================================================================

    Faça os testes e nos retorne.


    Até mais,

    Jesiel

    Obs.: Se útil, classifique




    quinta-feira, 30 de julho de 2009 17:05

Todas as Respostas

  • Olá,

    Faça os testes no script abaixo:




    Option Explicit

    Dim objDSE, strDefaultDN, strDN, objContainer, objChild,objUser

    Set objDSE = GetObject("LDAP://rootDSE")
    strDefaultDN = "OU=Usuarios," & objDSE.Get("defaultNamingContext")

    strDN =     InputBox("Coloque o caminho do container" & _
        vbCrLf & "(Exemplo " & strDefaultDN & ")", , strDefaultDN)

    If strDN = "" Then WScript.Quit(1)       
    Set objContainer = GetObject("LDAP://" & strDN)

    objContainer.Filter = Array("user")

    For Each objChild In objContainer
        set objUser = GetObject("LDAP://" & objChild.Name & "," & strDN)
        objUser.Put "pwdLastSet", 0
        objUser.SetInfo
    Next

    Salve com a extensão .vbs e execute.

    Poste os resultados.


    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    quinta-feira, 30 de julho de 2009 16:33
  • Jesiel, Obrigado pela ajuda!

    Porém, deste modo eu consigo pegar somente os usuários de uma determinada OU não é? Tenho no ambiente mais de 10.000 usuários e só queria habilitar a opção para 2.000 usuários, por isso que perguntei uma maneira de ler um arquivos excel ou um arquivo txt. Vc poderia me ajudar ?
    quinta-feira, 30 de julho de 2009 16:50
  • Olá,

    Faça o seguinte, vou te passar 2 scripts, o Script 1 você executa para gerar um arquivo csv com todos os usuários. Feito isso, abra o arquivo no excel e coloque na terceira coluna o caracter S nos usuários que você quer pedir para trocar no proximo logon.

    Depois execute o segundo script que irá abrir a planilha, varrer todos os usuários e o usuário que tiver com o S na terceira coluna ele pede para alterar a senha.

    Altere o dominio "contoso.local" para o seu dominio.


    Se atente que no script 2 o arquivo tem que estar salvo em c:\Lista_de_Usuarios.xls

    Então, abra o arquivo .csv no excel e salve como .xls no c:\Lista_de_Usuarios.xls



    SCRIPT 1:

    Const ADS_SCOPE_SUBTREE = 2

    Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
    Set OutPutFile = FileSystem.CreateTextFile("Lista_de_Usuarios.csv", True)

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection

    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

    objCommand.CommandText = _
        "SELECT name,description,distinguishedname,instanceType FROM 'LDAP://dc=contoso,dc=local' " & _
            "WHERE objectCategory='user'" 

    Set objRecordSet = objCommand.Execute

    objRecordSet.MoveFirst

    Do Until objRecordSet.EOF
        nome = objRecordSet.Fields("name").Value
        descricao = objRecordSet.Fields("description").Value
        cn = objRecordSet.Fields("distinguishedname").Value
        OutPutFile.WriteLine nome & ";" & cn
        objRecordSet.MoveNext
    Loop


    '================================================================================


    SCRIPT 2:


    Const ForReading = 1
    Const ADS_SCOPE_SUBTREE = 2

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection

    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

    Set objExcel = CreateObject("Excel.Application")


    'caminho do arquivo excel
    Set objWorkbook = objExcel.Workbooks.Open ("c:\Lista_de_Usuarios.xls")
    intRow = 2

    Do Until objExcel.Cells(intRow,1).Value = ""
       nome = objExcel.Cells(intRow, 1).Value
       cn = objExcel.Cells(intRow, 2).Value
       altera = objExcel.Cells(intRow, 3).Value
       if TRIM(UCASE(altera)) = "S" Then
          Set objUser = GetObject("LDAP://" & cn)
          objUser.Put "pwdLastSet", 0
          objUser.SetInfo
       End if
       intRow = intRow + 1
    Loop

    objExcel.Quit

    '================================================================

    Faça os testes e nos retorne.


    Até mais,

    Jesiel

    Obs.: Se útil, classifique




    quinta-feira, 30 de julho de 2009 17:05