Inquiridor
Script para alertar o usuário que a senha vai expirar em X dias

Discussão Geral
-
' Script to alert the user that their password will expire em X days - Active directory ' Daniel Tolouei ' Days before to alert user QtDiasAviso = 7 Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000 Set oTranslate = CreateObject("NameTranslate") Set oNetwork = CreateObject("WScript.Network") oTranslate.Init 3,"" oTranslate.Set 3, oNetwork.UserDomain & "\" & oNetwork.UserName Set objUserLDAP = GetObject _ ("LDAP://"&oTranslate.Get(1)) intCurrentValue = objUserLDAP.Get("userAccountControl") ' Check if user account have date to password expires If not intCurrentValue and ADS_UF_DONT_EXPIRE_PASSWD Then ' Determine when password expires and calculate the days ' Instead of property PasswordExpirationDate, you can use the accountExpirationDate property, depending on the case SenhaAlt = DateDiff("d",date,objUserLDAP.PasswordExpirationDate) ' If password will expire if (SenhaAlt <= QtDiasAviso) then Msgbox "Attention! Your password will expire in " & vbCrLf & vbCrLf & vbCrLf & " " & SenhaAlt & " day(s)" & vbCrLf & vbCrLf & vbCrLf & "Change it through the Intranet " & vbCrLf & "http://xxxxxx", vbCritical, "ALERT" end if end if
Fica aí para quem tiver interesse =)
Neste caso usei a propriedade accountExpirationDate para fazer o calculo. E também chequei antes se de fato a conta tem data para expirar ou é do tipo "never expires".
Valeu!
- Editado Daniel Tolouei quinta-feira, 8 de agosto de 2013 20:16
Todas as Respostas
-
-
Numa rede AD com estações windows, nao achei isso nativamente, por isso fiz esse script para alertar os users
- Editado Daniel Tolouei quinta-feira, 8 de agosto de 2013 19:39
-
Script publicado aqui:
http://gallery.technet.microsoft.com/scriptcenter/Script-to-alert-the-user-ea55bb43
-
Só pra informação.
How to change the password expiry notice default
http://technet.microsoft.com/en-us/library/ee829687(v=ws.10).aspx
Fábio de Paula Junior
-
Só pra informação.
How to change the password expiry notice default
http://technet.microsoft.com/en-us/library/ee829687(v=ws.10).aspx
Fábio de Paula Junior
Para usuários de dominio, esse aviso só ocorre por meio de uma notificaçao de balao, caso o usuário tenha tirado do oculto, que vem por default.
Esse script é pra alertar de forma mais chamativa o usuário em um dominio AD, com um alerta mais chamativo.
Mesmo tirando o oculto o avisao de balao, este nao tem se mostrado eficaz, os usuários ignoram e as vezes acabam até marcando para ocultar o aviso.
- Editado Daniel Tolouei sexta-feira, 9 de agosto de 2013 13:52
-
Esse script alerta e envia email para o usuario.
On Error Resume Next
'DECLARA VARIAVEIS
Dim objConnection, objCommand, objRootDSE, strDNSDomain
Dim strFilter, strQuery, objRecordSet, strDN, Diasfaltam
'CONFIGURAR OBJETOS
Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000
Const E_ADS_PROPERTY_NOT_FOUND = &h8000500D
Const ONE_HUNDRED_NANOSECOND = .000000100
Const SECONDS_IN_DAY = 86400
Set objSh = CreateObject("Wscript.Shell")
Set objDomain = GetObject("LDAP://" & objADSystemInfo.DomainDNSName)
Set objMaxPwdAge = objDomain.Get("maxPwdAge")
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOOBject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("defaultNamingContext")
strFilter = "(&(objectCategory=person)(objectClass=user))"
strQuery = "<LDAP://" & strDNSDomain & ">;" & strFilter & ";distinguishedName;subtree"
objCommand.CommandText = strQuery
objCommand.Properties("Page Size") = 99999
objCommand.Properties("Timeout") = 300
objCommand.Properties("Cache Results") = False
'CAPTURA NA GPO O MAXIMO DE DIAS PARA EXPIRAR A SENHA
Set objADSystemInfo = CreateObject("ADSystemInfo")
Set objUser = GetObject("LDAP://" & objADSystemInfo.UserName)
intUserAccountControl = objUser.Get("userAccountControl")
Set objMaxPwdAge = objDomain.Get("maxPwdAge")
Set objRecordSet = objCommand.Execute
'LOOP
Do Until objRecordSet.EOF
strDN = objRecordSet.Fields("distinguishedName")
Set objUser = GetObject("LDAP://" & strDN)
intUserAccountControl = objUser.Get("userAccountControl")
If intUserAccountControl And ADS_UF_DONT_EXPIRE_PASSWD Then
'PASSWORD NAO EXPIRA
Else
dtmValue = objUser.PasswordLastChanged
Set objDomain = GetObject("LDAP://" & objADSystemInfo.DomainDNSName)
Set objMaxPwdAge = objDomain.Get("maxPwdAge")
dblMaxPwdNano = Abs(objMaxPwdAge.HighPart * 2^32 + objMaxPwdAge.LowPart)
dblMaxPwdSecs = dblMaxPwdNano * ONE_HUNDRED_NANOSECOND
dblMaxPwdDays = Int(dblMaxPwdSecs / SECONDS_IN_DAY)
'EM QUANTOS DIAS A SENHA EXPIRA = dblMaxPwdDays
If intTimeInterval >= dblMaxPwdDays Then
'SENHA EXPIRADA
Else
' --- ABAIXO CALCULA QUANTOS DIAS FALTAM PARA EXPIRAR A SENHA
Diasfaltam = Int((dtmValue + dblMaxPwdDays) - Now)
End If
' --- SE FALTA MENOS DE 15 DIAS PARA EXPIRAR...
If int(Diasfaltam) <= 10 and int(Diasfaltam) >= 0 Then
' --- COLETA INFORMACAO DE EMAIL
strDN.GetInfo
strEndemail = ObjUser.Get("mail")
' WScript.Echo "A sua senha expira daqui a " & Diasfaltam & " dias..: " & strDN
WScript.Echo dtmValue
WScript.sleep 1000
Dim objMail
Set objEmail = CreateObject("CDO.Message")
WScript.sleep 1000
objEmail.From = strEndemail
objEmail.To = "xx@dominio.com.br"
objEmail.Subject = "Sua senha está expirando, faltam " & Diasfaltam & " dias"
objEmail.Textbody = "Sua senha está expirando, dentro de " & Diasfaltam & " dia(s).Caso não houver a troca ela será automaticamente bloqueada" & chr(13) & chr(13) &"Procedimento para a troca de senha:" & chr(13) & "Acesse o site: http://172.16.1.7/ti/Documentos%20Compartilhados/trocasenha.aspx , e proceda com as instruções." & chr(13) & chr(13) & "Qualquer dúvida, favor entrar em contato com o Suporte."
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "192.168.1.200"
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update
objEmail.Send
Wscript.sleep 10000
Set objMail=Nothing
End If
End If
objRecordSet.MoveNext
Loop
objConnection.Close
Set objConnection = Nothing
Set objCommand = Nothing
Set objRootDSE = Nothing
Set objRecordSet = NothingThomas Edson Mattos Roeder
-
Esse script alerta e envia email para o usuario.
On Error Resume Next
'DECLARA VARIAVEIS
Dim objConnection, objCommand, objRootDSE, strDNSDomain
Dim strFilter, strQuery, objRecordSet, strDN, Diasfaltam
'CONFIGURAR OBJETOS
Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000
Const E_ADS_PROPERTY_NOT_FOUND = &h8000500D
Const ONE_HUNDRED_NANOSECOND = .000000100
Const SECONDS_IN_DAY = 86400
Set objSh = CreateObject("Wscript.Shell")
Set objDomain = GetObject("LDAP://" & objADSystemInfo.DomainDNSName)
Set objMaxPwdAge = objDomain.Get("maxPwdAge")
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOOBject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("defaultNamingContext")
strFilter = "(&(objectCategory=person)(objectClass=user))"
strQuery = "<LDAP://" & strDNSDomain & ">;" & strFilter & ";distinguishedName;subtree"
objCommand.CommandText = strQuery
objCommand.Properties("Page Size") = 99999
objCommand.Properties("Timeout") = 300
objCommand.Properties("Cache Results") = False
'CAPTURA NA GPO O MAXIMO DE DIAS PARA EXPIRAR A SENHA
Set objADSystemInfo = CreateObject("ADSystemInfo")
Set objUser = GetObject("LDAP://" & objADSystemInfo.UserName)
intUserAccountControl = objUser.Get("userAccountControl")
Set objMaxPwdAge = objDomain.Get("maxPwdAge")
Set objRecordSet = objCommand.Execute
'LOOP
Do Until objRecordSet.EOF
strDN = objRecordSet.Fields("distinguishedName")
Set objUser = GetObject("LDAP://" & strDN)
intUserAccountControl = objUser.Get("userAccountControl")
If intUserAccountControl And ADS_UF_DONT_EXPIRE_PASSWD Then
'PASSWORD NAO EXPIRA
Else
dtmValue = objUser.PasswordLastChanged
Set objDomain = GetObject("LDAP://" & objADSystemInfo.DomainDNSName)
Set objMaxPwdAge = objDomain.Get("maxPwdAge")
dblMaxPwdNano = Abs(objMaxPwdAge.HighPart * 2^32 + objMaxPwdAge.LowPart)
dblMaxPwdSecs = dblMaxPwdNano * ONE_HUNDRED_NANOSECOND
dblMaxPwdDays = Int(dblMaxPwdSecs / SECONDS_IN_DAY)
'EM QUANTOS DIAS A SENHA EXPIRA = dblMaxPwdDays
If intTimeInterval >= dblMaxPwdDays Then
'SENHA EXPIRADA
Else
' --- ABAIXO CALCULA QUANTOS DIAS FALTAM PARA EXPIRAR A SENHA
Diasfaltam = Int((dtmValue + dblMaxPwdDays) - Now)
End If
' --- SE FALTA MENOS DE 15 DIAS PARA EXPIRAR...
If int(Diasfaltam) <= 10 and int(Diasfaltam) >= 0 Then
' --- COLETA INFORMACAO DE EMAIL
strDN.GetInfo
strEndemail = ObjUser.Get("mail")
' WScript.Echo "A sua senha expira daqui a " & Diasfaltam & " dias..: " & strDN
WScript.Echo dtmValue
WScript.sleep 1000
Dim objMail
Set objEmail = CreateObject("CDO.Message")
WScript.sleep 1000
objEmail.From = strEndemail
objEmail.To = "xx@dominio.com.br"
objEmail.Subject = "Sua senha está expirando, faltam " & Diasfaltam & " dias"
objEmail.Textbody = "Sua senha está expirando, dentro de " & Diasfaltam & " dia(s).Caso não houver a troca ela será automaticamente bloqueada" & chr(13) & chr(13) &"Procedimento para a troca de senha:" & chr(13) & "Acesse o site: http://172.16.1.7/ti/Documentos%20Compartilhados/trocasenha.aspx , e proceda com as instruções." & chr(13) & chr(13) & "Qualquer dúvida, favor entrar em contato com o Suporte."
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "192.168.1.200"
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update
objEmail.Send
Wscript.sleep 10000
Set objMail=Nothing
End If
End If
objRecordSet.MoveNext
Loop
objConnection.Close
Set objConnection = Nothing
Set objCommand = Nothing
Set objRootDSE = Nothing
Set objRecordSet = Nothing
Thomas Edson Mattos Roeder
@Thomas,
Teria como adaptar este script para conectar com o Office 365?
-
Bacana o script, mas quando executo ele, ele traz um alert com uma data, creio que seja a ultima de troca de senha do usuario listado, fica aguardando o ok pra continuar e enviar o email.
Tem como tirar isto?
by Dimiro MCP | MCDST | ITILF Foi útil? Classifique! Se resolveu, avalie! ;) °dimiro.com | ºtwitter.com/bydimiro
-