OVH Cloud OVH Cloud

Créer un fichier log

6 réponses
Avatar
jcc0127
Bonjour,

J'ai un morceau de code VBS qui envoie des mails automatiquement !
Je voudrais obtenir un fichier log qui liste les personnes =E0 qui on
envoie un mail !
Comment faire, SVP ?

Merci !
Voici le code :

Sub SendEmailMessage(strDestEmail, strNoOfDays)
Set objMessage =3D CreateObject("CDO.Message")
objMessage.Subject =3D "Password Expires in " & strNoOfDays & " days"
objMessage.Sender =3D "toto@exchtest.local"
objMessage.To =3D strDestEmail
objMessage.TextBody =3D "Your password expires in " & strNoOfDays & "
days. Please go to http://www.google.fr"=20
objMessage.Send
End Sub

6 réponses

Avatar
Jean-Claude BELLAMY
Dans le message :,
jcc0127 a pris la peine d'écrire ce qui suit :
Bonjour,

J'ai un morceau de code VBS qui envoie des mails automatiquement !
Je voudrais obtenir un fichier log qui liste les personnes à qui on
envoie un mail !
Comment faire, SVP ?


J'ai inclus les lignes nécessaire :

Voici le code :

Sub SendEmailMessage(strDestEmail, strNoOfDays)


ForAppending=8
LogName="k:trucs diversjournal sendmail.log"
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
set f=fso.OpenTextFile(LogName,ForAppending,true)

Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Password Expires in " & strNoOfDays & " days"
objMessage.Sender = ""
objMessage.To = strDestEmail
objMessage.TextBody = "Your password expires in " & strNoOfDays & "
days. Please go to http://www.google.fr"
objMessage.Send


f.write "Message envoyé à " & strDestEmail & " le " & Date & " à " & Time
f.close
End Sub


NB: suivant la structure générale de ton code, il est possible et même
souhaitable de placer les 3 1ères instructions (avant le
"CreateObjetc(CDO...") AVANT le sous-programme, et le "f.close" sera placé à
la fin du script.

--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP]
http://www.bellamyjc.org ou http://jc.bellamy.free.fr

Avatar
jcc0127
Merci beaucoup JC !

Effectivement, le code entier est beaucoup plus long et sert à
surveiller les comptes qui expirent bientôt pour avertir les
utilisateurs par mail.
Je le fait passer au cas où cela intéresserait quelqu'un !
(J'ai inclus ta solution !)
D'ailleurs, si je veux juste la liste des utilisateurs dont le mot de
passe expire, je met en remarque la ligne =
objMessage.Send
Est-ce correct ?

JCC

' Runs check on last password change date
'
Option Explicit

Dim objCommand, objConnection, objChild, objUserConnection, strBase,
strFilter, strAttributes, strPasswordChangeDate, intPassAge
Dim lngTZBias, objPwdLastSet, strEmailAddress, objMessage
Dim objShell, lngBiasKey, k, PasswordExpiry, strRootDomain
Dim strQuery, objRecordset, strName, strCN

' ********************* CHANGE THESE VALUES TO PASSWORD EXPIRY AND ROOT
OF WHERE USERS WILL BE SEARCHED ***********************************

PasswordExpiry=6
strRootDomain="cn=group,dc=exchtest,dc=local"

'
*************************************************************************** **************************************************************


' Obtain local Time Zone bias from machine registry.
Set objShell = CreateObject("Wscript.Shell")
lngBiasKey =
objShell.RegRead("HKLMSystemCurrentControlSetControlTimeZoneInformation ActiveTimeBias")
If UCase(TypeName(lngBiasKey)) = "LONG" Then
lngTZBias = lngBiasKey
ElseIf UCase(TypeName(lngBiasKey)) = "VARIANT()" Then
lngTZBias = 0
For k = 0 To UBound(lngBiasKey)
lngTZBias = lngTZBias + (lngBiasKey(k) * 256^k)
Next
End If

Set objCommand = CreateObject("ADODB.Command")
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
objCommand.ActiveConnection = objConnection
strBase = "<LDAP://" & strRootDomain & ">"

strFilter = "(&(objectCategory=person) (objectClass=user)
(!userAccountControl:1.2.840.113556.1.4.803:=2)
(!userAccountControl:1.2.840.113556.1.4.803:e536))"
strAttributes = "sAMAccountName,cn,mail,pwdLastSet,distinguishedName"
strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
objCommand.CommandText = strQuery
objCommand.Properties("Page Size") = 100
objCommand.Properties("Timeout") = 30
objCommand.Properties("Cache Results") = False
Set objRecordSet = objCommand.Execute

' WScript.echo "Running at " & Date()

Do Until objRecordSet.EOF
strName = objRecordSet.Fields("sAMAccountName").Value
strCN = objRecordSet.Fields("cn").value
strEmailAddress = objRecordSet.Fields("mail").value
Wscript.Echo "NT Name: " & strName & ", Common Name: " & strCN

Set objUserConnection = GetObject("LDAP://" &
objRecordSet.Fields("distinguishedName").Value)
Set objPwdLastSet = objUserConnection.pwdLastSet
strPasswordChangeDate = Integer8Date(objPwdLastSet, lngTZBias)
WScript.Echo vbTab & "Password last changed at " &
strPasswordChangeDate
intPassAge = DateDiff("d", strPasswordChangeDate, Now)
WScript.Echo vbTab & "Password changed " & intPassAge & " days ago"

If intPassAge = (PasswordExpiry-3) Then
WScript.echo vbTab & "Sending user notification to " &
strEmailAddress & " that password expires in 3 days"
Call SendEmailMessage(strEmailAddress, 3)
ElseIf intPassAge = (PasswordExpiry-6) Then
WScript.echo vbTab & "Sending user notification to " &
strEmailAddress & " that password expires in 6 days"
Call SendEmailMessage(strEmailAddress, 6)
ElseIf intPassAge = (PasswordExpiry-9) Then
WScript.echo vbTab & "Sending user notification to " &
strEmailAddress & " that password expires in 9 days"
Call SendEmailMessage(strEmailAddress, 9)
End If

objRecordSet.MoveNext
Loop

objConnection.Close


Function Integer8Date(objDate, lngBias)
' Function to convert Integer8 (64-bit) value to a date, adjusted for
' local time zone bias.
Dim lngAdjust, lngDate, lngHigh, lngLow
lngAdjust = lngBias
lngHigh = objDate.HighPart
lngLow = objdate.LowPart
' Account for error in IADslargeInteger property methods.
If lngLow < 0 Then
lngHigh = lngHigh + 1
End If
If (lngHigh = 0) And (lngLow = 0) Then
lngAdjust = 0
End If
lngDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) _
+ lngLow) / 600000000 - lngAdjust) / 1440
' Trap error if lngDate is overly large
On Error Resume Next
Integer8Date = CDate(lngDate)
If Err.Number <> 0 Then
On Error GoTo 0
Integer8Date = #1/1/1601#
End If
On Error GoTo 0
End Function

Sub SendEmailMessage(strDestEmail, strNoOfDays)

ForAppending=8
LogName="k:trucs diversjournal sendmail.log"
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
set f=fso.OpenTextFile(LogName,ForAppending,true)

Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Password Expires in " & strNoOfDays & " days"
objMessage.Sender = ""
objMessage.To = strDestEmail
objMessage.TextBody = "Your password expires in " & strNoOfDays & "
days. Please go to http://www.google.fr"
objMessage.Send

f.write "Message envoyé à " & strDestEmail & " le " & Date & " à " &
Time
f.close

End Sub
Avatar
Jean-Claude BELLAMY
Dans le message :,
jcc0127 a pris la peine d'écrire ce qui suit :
Merci beaucoup JC !

Effectivement, le code entier est beaucoup plus long et sert à
surveiller les comptes qui expirent bientôt pour avertir les
utilisateurs par mail.
Je le fait passer au cas où cela intéresserait quelqu'un !
(J'ai inclus ta solution !)
D'ailleurs, si je veux juste la liste des utilisateurs dont le mot de
passe expire, je met en remarque la ligne > objMessage.Send
Est-ce correct ?


OUI !
(tu peux commenter aussi tout ce qu'il y a avant concernant l'objet
CDO.message)

--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP]
http://www.bellamyjc.org ou http://jc.bellamy.free.fr

Avatar
jcc0127
Encore moi !

J'ai un message d'erreur au lancement du script avec cscript :

pwdchg.vbs (45,1) Provider: Table does not exist

D'ou peut-elle venir ?
Merci d'avance !

JCC
Avatar
jcc0127
Je n'ai rien dit !!!
Erreur dans le nom de domaine !!

Par contre, si je veux chercher dans un groupe, comment modifier le
code ?
J'ai essayé :
strRootDomain="cn=group, dc=exchtest,dc=local"

Mais, cela donne encore l'erreur : pwdchg.vbs (45,1) Provider: Table
does not exist

Quelle est la syntaxe exact, SVP ?

JCC
Avatar
jcc0127
Au fait : le fichier log ne se crée pas !
Pas de message d'erreur !!

???