Usuário com melhor resposta
Alterar senha de usuários que não alteram a X dias

Pergunta
-
Bom dia pessoal,
Pesquisei sobre o assunto e não encontrei nada, por isso compartilho minha necessidade com vocês.
Preciso de um script que altere a senha dos usuários que não a alteram a 60 dias por exemplo.
Ou seja, um script que consulte o valor "Ultima alteração de senha" e se for superior a X dias, altera a senha.
Agradeço desde já!
Respostas
-
Olá Oliveira,
Não precisa adaptar não :-D. Criei um que faz o que você precisa, segue abaixo.
A única coisa que terá que fazer é inserir o nome de logon de todos os seus usuários do domínio (independente da OU que eles estejam) que você deseja que esse script se aplique e coloca-los (um por linha) dentro do arquivo usuarios.txt que você deverá criar. Caso o caminho não seja o descrito no script (C:\Scripts\usuarios.txt) basta alterar essa linha no script indicando o caminho correto do arquivo.
O script não funciona para usuários que estão com a propriedade de senha "A senha nunca expira" habilitada. Copie o código no bloco de notas e salve com a extenção .vbs
Nesse script todos os usuários que estiverem com nome de logon no arquivo usuarios.txt e que fizeram a alteração de senha a mais de 60 dias terá setado nas propriedades da conta a opção "Alterar a senha no proximo logon"
Dim oFSO, sArquivo, oArquivo, sTexto, strNomeUsuario, strDominio, objUsuario
On error resume next
Set oFSO = CreateObject("Scripting.FileSystemObject")
sArquivo = "c:\Scripts\usuarios.txt"
If oFSO.FileExists(sArquivo) Then
Set oArquivo = oFSO.OpenTextFile(sArquivo, 1)
Do While Not oArquivo.AtEndOfStream
sTexto = oArquivo.ReadLine
If Trim(sTexto) <> "" Then
strNomeUsuario= sTexto
UserDN = buscaDN(strNomeUsuario)
Set objUser = GetObject("LDAP://" & UserDN)dtmValue = objUser.PasswordLastChanged
Tmpwd = int(now - dtmValue)
Tempo = (Tmpwd - 59)If Tempo > 1 Then
objUser.Put "pwdLastSet", 0
objUser.SetInfo
End IfEnd if
Loop
oArquivo.CloseEnd If
Function buscaDN(ByVal nomeUsuario)
Dim oRootDSE, oConnection, oCommand, oRecordSet
Set oRootDSE = GetObject("LDAP://rootDSE")
Set oConnection = CreateObject("ADODB.Connection")
oConnection.Open "Provider=ADsDSOObject;"
Set oCommand = CreateObject("ADODB.Command")
oCommand.ActiveConnection = oConnection
oCommand.CommandText = "<LDAP://" & oRootDSE.get("defaultNamingContext") & _
">;(&(objectCategory=User)(samAccountName=" & nomeusuario & "));distinguishedName;subtree"
Set oRecordSet = oCommand.Execute
On Error Resume Next
buscaDN = oRecordSet.Fields("DistinguishedName")
On Error GoTo 0
oConnection.Close
Set oRecordSet = Nothing
Set oCommand = Nothing
Set oConnection = Nothing
Set oRootDSE = Nothing
End FunctionSe lhe foi útil, vote! e marque como resposta!
Elmo Baraúna, SSA-Ba - FSCTP / MCP / MCDST / MCSA / MCT- Sugerido como Resposta Elmo Baraúna domingo, 27 de março de 2011 03:47
- Marcado como Resposta Richard Juhasz segunda-feira, 28 de março de 2011 19:01
Todas as Respostas
-
-
Olá Oliveira,
Não precisa adaptar não :-D. Criei um que faz o que você precisa, segue abaixo.
A única coisa que terá que fazer é inserir o nome de logon de todos os seus usuários do domínio (independente da OU que eles estejam) que você deseja que esse script se aplique e coloca-los (um por linha) dentro do arquivo usuarios.txt que você deverá criar. Caso o caminho não seja o descrito no script (C:\Scripts\usuarios.txt) basta alterar essa linha no script indicando o caminho correto do arquivo.
O script não funciona para usuários que estão com a propriedade de senha "A senha nunca expira" habilitada. Copie o código no bloco de notas e salve com a extenção .vbs
Nesse script todos os usuários que estiverem com nome de logon no arquivo usuarios.txt e que fizeram a alteração de senha a mais de 60 dias terá setado nas propriedades da conta a opção "Alterar a senha no proximo logon"
Dim oFSO, sArquivo, oArquivo, sTexto, strNomeUsuario, strDominio, objUsuario
On error resume next
Set oFSO = CreateObject("Scripting.FileSystemObject")
sArquivo = "c:\Scripts\usuarios.txt"
If oFSO.FileExists(sArquivo) Then
Set oArquivo = oFSO.OpenTextFile(sArquivo, 1)
Do While Not oArquivo.AtEndOfStream
sTexto = oArquivo.ReadLine
If Trim(sTexto) <> "" Then
strNomeUsuario= sTexto
UserDN = buscaDN(strNomeUsuario)
Set objUser = GetObject("LDAP://" & UserDN)dtmValue = objUser.PasswordLastChanged
Tmpwd = int(now - dtmValue)
Tempo = (Tmpwd - 59)If Tempo > 1 Then
objUser.Put "pwdLastSet", 0
objUser.SetInfo
End IfEnd if
Loop
oArquivo.CloseEnd If
Function buscaDN(ByVal nomeUsuario)
Dim oRootDSE, oConnection, oCommand, oRecordSet
Set oRootDSE = GetObject("LDAP://rootDSE")
Set oConnection = CreateObject("ADODB.Connection")
oConnection.Open "Provider=ADsDSOObject;"
Set oCommand = CreateObject("ADODB.Command")
oCommand.ActiveConnection = oConnection
oCommand.CommandText = "<LDAP://" & oRootDSE.get("defaultNamingContext") & _
">;(&(objectCategory=User)(samAccountName=" & nomeusuario & "));distinguishedName;subtree"
Set oRecordSet = oCommand.Execute
On Error Resume Next
buscaDN = oRecordSet.Fields("DistinguishedName")
On Error GoTo 0
oConnection.Close
Set oRecordSet = Nothing
Set oCommand = Nothing
Set oConnection = Nothing
Set oRootDSE = Nothing
End FunctionSe lhe foi útil, vote! e marque como resposta!
Elmo Baraúna, SSA-Ba - FSCTP / MCP / MCDST / MCSA / MCT- Sugerido como Resposta Elmo Baraúna domingo, 27 de março de 2011 03:47
- Marcado como Resposta Richard Juhasz segunda-feira, 28 de março de 2011 19:01
-
Elmo, obrigado pela ajuda!
Este script é muito útil, mas no meu caso, preciso alterar a senha destes usuários.
Muitos são contas de serviços, entre outros casos... enfim, preciso definir uma senha e aplicar p/ estes usuários.
De qualquer forma, obrigado!