Hace un tiempo un cliente que tiene mucha gente por owa sin acceso a la red me pidio si le podia armar algo para que les avise de manera evidente que se les esta por vencer el password ya que los usuarios se quejaban que no notaban el cartelito del owa. Asi que arme este script que manda un mail a cada usuario que tiene el password cerca de caducar, Espero les sea util Solo hay que renombrarlo a .vbs, cambiar los parametros de smtp, tiempo de control para el envio del mail y ejecutarlo con cscript.
'------copiar---
'==========================================================================
'
' VBScript Source File -- Created with SAPIEN Technologies PrimalScript 4.1
'
' NAME: Notificacion de cambio de passoword para exchange
'
' AUTHOR: Leandro Amore.
' DATE : 7/14/2007
'
' COMMENT: El script chequea la antiguedad del password de cada usuario en AD
' y envia un mail informando que debe ser cambiado si se cumple una condicion.
'==========================================================================
'defino constantes para el sistema
Const SMTP_SERVER = "192.168.0.2"
Const STRFROM = "administrador@prisma.cc"
Const DAYS_FOR_EMAIL = 35
'Constantes de sistema, no modificar
Const ONE_HUNDRED_NANOSECOND = .000000100
Const SECONDS_IN_DAY = 86400
Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000
Const E_ADS_PROPERTY_NOT_FOUND = &h8000500D
Const bDebug = True 'amplia o reduce la informacion mostrada en pantalla durante la ejecucion del script
Dim rootDSE, domainObject
'defino mi estructura de AD a inspeccionar
Set rootDSE=GetObject("LDAP://RootDSE")
domainContainer = rootDSE.Get("defaultNamingContext")
Set domainObject = GetObject("LDAP://" & domainContainer)
numdays = GetMaximumPasswordAge (domainContainer)
dp "Antiguedad maxima de password: " & numDays
If numDays > 0 Then 'chequeo que el dominio tenga la expiración de password habilitada
call ExportUsers(domainObject, numdays)
end if
Function GetMaximumPasswordAge (ByVal strDomainDN)
Dim objDomain, objMaxPwdAge
Dim dblMaxPwdNano, dblMaxPwdSecs, dblMaxPwdDays
Set objDomain = GetObject("LDAP://" & strDomainDN)
Set objMaxPWdAge = objDomain.maxPwdAge
If objMaxPwdAge.LowPart = 0 And objMaxPwdAge.Highpart = 0 Then
GetMaximumPasswordAge = 0
Else
dblMaxPwdNano = Abs (objMaxPwdAge.HighPart * 2^32 + objMaxPwdAge.LowPart)
dblMaxPwdSecs = dblMaxPwdNano * ONE_HUNDRED_NANOSECOND
dblMaxPwdDays = Int (dblMaxPwdSecs / SECONDS_IN_DAY)
GetMaximumPasswordAge = dblMaxPwdDays
End If
End Function
function ExportUsers (oObject,imaxpwdage)
Dim oUser
For Each oUser in oObject
Select Case oUser.Class
Case "user"
If Right (oUser.Name, 1) <> "$" Then
If IsEmpty (oUser.Mail) or IsNull (oUser.Mail) Then
dp Mid (oUser.Name, 4) & " no tiene mailbox"
Else
If UserIsExpired (oUser, iMaxPwdAge, DAYS_FOR_EMAIL, iResult) Then
wscript.Echo "...enviando mail a " & oUser.Mail
Call SendEmail (oUser, iResult)
Else
dp "...no enviar mail"
End If
End If
End If
Case "organizationalUnit" , "container"
If UsersinOU (oUser) then
call ExportUsers(oUser,imaxpwdage)
End if
End select
Next
end function
Function UsersinOU (oObject)
Dim oUser
UsersinOU = False
for Each oUser in oObject
Select Case oUser.Class
Case "organizationalUnit" , "container"
UsersinOU = UsersinOU(oUser)
Case "user"
UsersinOU = True
End select
Next
End Function
Function UserIsExpired (objUser, iMaxAge, iDaysForEmail, iRes)
Dim intUserAccountControl, dtmValue, intTimeInterval
Dim strName
On Error Resume Next
Err.Clear
strName = Mid (objUser.Name, 4)
intUserAccountControl = objUser.Get ("userAccountControl")
If intUserAccountControl And ADS_UF_DONT_EXPIRE_PASSWD Then
dp "El password para " & strName & " no expira."
UserIsExpired = False
Else
iRes = 0
dtmValue = objUser.PasswordLastChanged
If Err.Number = E_ADS_PROPERTY_NOT_FOUND Then
UserIsExpired = True
dp "Nunca se seteo un password para " & strName & " "
Else
intTimeInterval = Int (Now - dtmValue)
dp "El password de " & strName & " fue establecido " & _
DateValue(dtmValue) & " a las " & TimeValue(dtmValue) & _
" (" & intTimeInterval & " dias atras)"
If intTimeInterval >= iMaxAge Then
dp "El password para " & strName & " ha expirado."
UserIsExpired = True
Else
iRes = Int ((dtmValue + iMaxAge) - Now)
dp "El password para " & strName & " expirara el " & _
DateValue(dtmValue + iMaxAge) & " dentro de " & _
iRes & " dias"
If iRes <= iDaysForEmail Then
dp strName & " Necesita un mail para cambio de password"
UserIsExpired = True
Else
dp strName & " No necesita cambio de password"
UserIsExpired = False
End If
End If
End If
End If
End Function
Sub SendEmail (objUser, iResult)
Dim objMail
Set objMail = CreateObject ("CDO.Message")
objMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = SMTP_SERVER
objMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objMail.Configuration.Fields.Update
objMail.From = STRFROM
objMail.To = objUser.Mail
objMail.Subject = "Se debe cambiar el password de " & Mid (objUser.Name, 4)
objMail.Textbody = "El password de " & objUser.userPrincipalName & _
" (" & objUser.sAMAccountName & ")" & vbCRLF & _
"expirara en " & iResult & " días." & vbCRLF & _
"Por favor cámbielo lo antes posible" & vbCRLF & vbCRLF & _
"Muchas Gracias," & vbCRLF & _
"Dpto. de sistemas"
objMail.Send
Set objMail = Nothing
End Sub
Sub dp (str)
If bDebug Then
WScript.Echo str
End If
End Sub
'---------------------hasta aca----------
Les dejo algo que encontre por ahi para agregar la opcion de montar discos virtuales (VHD) de virtual server 2005 SP1 al menu contextual de windows.
Solo tienen que copiar lo que les dejo abajo en un archivo .inf y darle boton derecho instalar.
---Copiar desde aca---------------------------------------
[version]
signature="$CHICAGO$"
[DefaultInstall]
AddReg=Reg
[Reg]
HKCR,".vhd",,,"Virtual.Machine.HD"
HKCR,"Virtual.Machine.HD",,,"Virtual Machine Disk Image"
HKCR,"Virtual.Machine.HD\DefaultIcon",,,"C:\Program Files\Microsoft Virtual Server\vssrvc.exe,3"
HKCR,"Virtual.Machine.HD\shell\Mount\Command",,,"c:\program files\Microsoft Virtual Server\vhdmount\vhdmount.exe" /m /f %1"
HKCR,"Virtual.Machine.HD\shell\DisMount\Command",,,"c:\program files\Microsoft Virtual Server\vhdmount\vhdmount.exe" /u %1"
HKCR,"Virtual.Machine.HD\shell",,,"Mount"
HKCR,"Virtual.Machine.HD",BrowserFlags,0x00010001,0x8
HKCR,"Virtual.Machine.HD",EditFlags,0x00010001,0x0
---hasta aca------------------------------------
Espero les sea util
saludos
La gente de producto de Configuration Manager esta comenzando a dar webcasts sobre instalacion y configuracion del producto. Estos 2 son destacables ya que lo da la misma gente del grupo de producto.
Les dejo los links
Monday, July 2nd, at 1:00pm Pacific, is Deploying System Center Configuration Manager 2007: http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032343568&Culture=en-US
Friday, July 6th, at 1:00pm Pacific, is Deploying System Center Configuration Manager 2007 Clients: http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032343641&Culture=en-US
Que los disfruten
Saludos
Leandro