Welke relayserver

Status
Niet open voor verdere reacties.
Lijkt me toch TCP poort 25 verkeer, zowel als uitgaande poort (vanuit het script) als inkomende poort (voor de Exchange server).

Natuurlijk moeten zowel de bron als het doel dezelfde zijn (dus 192.168.66.11), dus kun je ook daar op filteren. Dit omdat het script op je Exchange server zélf draait.

Als iedereen binnen je organisatie Outlook gebruikt (dus niet POP/SMTP) dan is SMTP verkeer alleen in gebruik vanuit het script of vanuit (het publieke ip-adres van) die Baracuda server, dus zou je daarmee verder moeten komen. Dit lijkt me het geval, dus dat scheelt een hoop netwerkverkeer.

Tijs.
 
Nog wat tips over het gebruik van Wireshark: (o.a.) hier

Tijs.
 
Helaas kom ik er niet uit, ik zag geen regels verschijnen op het moment dat ik het script uitvoerde, het filter had ik ingesteld op port25.

Ik heb inmiddels wel een ander script gevonden wat ervoor zorgt dat 14 dagen voor het verstrijken van iemands wachtwoord een popup geeft na het aanmelden op de PC.
Dit script wordt uitgevoerd tijdens het aanmelden en werkt ook goed.
Vanaf Windows7 is de melding dat je wachtwoord gaat verlopen standaard gewoon te kort zichtbaar.

Groeten Marcel
 
Dat geeft sterk het idee dat het script dat je had gewoon niet werkt, ondanks alle claims dat het van alles en nog wat kan (incl. mailen). Jammer, maar helaas.

Tijs.
 
Hieronder het bewuste .vbs script, er hoort ook nog een .ini file welke ik daaronder zet.
In de .ini file staat een ipadres welke ik al heb vervangen door de servernaam en FQDN.
Overal waar het woord bedrijf voorkomt in het script en .ini file staat normaal gesproken onze domeinnaam.
Wanneer ik het script uitvoer vanaf de server (RDP) eindigt ie met een popup venstertje:
1AVU3Jp.png

PHP:
'Define constants
Const SEC_IN_DAY = 86400
Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000
Const ADS_UF_ACCOUNTDISABLE = 2
Const crlf="<BR>"

'Define global variables
Dim txtOutput, binFirstWindow, intMaxPwdAge, iDaysExpire, showTextWindow, strSMTPFrom, strSMTPRelay
Dim objExplorer, rootDSE, domainObject, userObject, userFile, numLines
Dim arrTextLine(9)
ReDim arrBody(1)


'Run Subroutines
runSetup
getExpiredUsers(domainObject)
runExit

wscript.echo "Done!"



Sub getExpiredUsers(oObject)
	On Error Resume Next
	'Dim oUser
	For Each oUser in oObject
	Select Case oUser.Class
		Case "user"
			usrName 	= oUser.displayName
			usrLoc		= Replace(oUser.distinguishedName, "\", "")
			
			Set objUserLDAP = GetObject("LDAP://" & oUser.distinguishedName)
			intCurrentValue = objUserLDAP.Get("userAccountControl")
	
			If intCurrentValue AND ADS_UF_ACCOUNTDISABLE Then
				usrStatus 	= "User is disabled"
			Else
				If intCurrentValue and ADS_UF_DONT_EXPIRE_PASSWD Then
					usrStatus 	= "The password does not expire."
				Else
					dtmValue = objUserLDAP.PasswordLastChanged
					If Err.Number <> 0 then
						usrStatus 	= "Error: user may not have changed password"
						Err.Clear
					Else
						usrDate 	= dtmValue
						intTimeInterval = int(now - dtmValue)

						If intMaxPwdAge < 0 Then
							usrLeft		= 0
							usrExpiredDate 	= ""
							usrStatus		= "Password does not expire"
						Else
							intMaxInSec = (intMaxPwdAge / SEC_IN_DAY)
							If intTimeInterval >= intMaxInSec Then
								usrLeft		= 0
								usrExpiredDate	= DateValue(dtmValue + intMaxInSec)
								usrStatus	= "Password has expired"
							Else
								usrLeft		= int((dtmValue + intMaxInSec) - Now)
								usrExpiredDate	= DateValue(dtmValue + intMaxInSec)
								If usrLeft <= iDaysExpire Then
									strResult = sendUserMail(oUser.givenName, oUser.sn, oUser.mail, usrLeft)
									usrStatus = "Expiring in " & usrLeft & " days! " & strResult
								Else
									usrStatus	= "Not expired"
								End If
							End If
						End If
					End If
				End If
			End If
			userFile.Write chr(34) & usrName & chr(34) & "," & chr(34) & usrLoc & chr(34) & "," & usrDate & "," & usrLeft & "," & usrExpiredDate & "," & chr(34) & usrStatus & chr(34)
			userFile.WriteLine ""
		Case "organizationalUnit" , "container"
			txtOU = oUser.distinguishedName
			txtOU = right(txtOU, len(txtOU)-3)
			txtOU = left(txtOU, instr(txtOU, ",") - 1)
			showtext("Now looking in " & txtOU & "...")
			getExpiredUsers(oUser)
		End Select
	Next
End Sub


Sub ShowText(txtInput)
	If showTextWindow = True then
		If binFirstWindow = True then
			objExplorer.Navigate "about:blank"   
			objExplorer.ToolBar = 0
			objExplorer.StatusBar = 0
			objExplorer.Width=400
			objExplorer.Height = 300 
			objExplorer.Left = 200
			objExplorer.Top = 200

			Do While (objExplorer.Busy)
				Wscript.Sleep 200
			Loop

			objExplorer.Visible = 1
			binFirstWindow = False
		End If

		intTop = UBound(arrTextLine)
		For z = 0 to intTop - 1
			arrTextLine(z) = arrTextLine(z + 1)
		Next
		arrTextLine(intTop) = txtInput

		For z = 0 to intTop
			strText = strText & "<BR>" & arrTextLine(z)
		Next
	
		objExplorer.Document.Body.InnerHTML = strText
   End If
End Sub


Sub runSetup
	Set rootDSE=GetObject("LDAP://RootDSE")
	domainContainer = rootDSE.Get("defaultNamingContext")
	Set domainObject = GetObject("LDAP://" & domainContainer)

	Set oNetwork = CreateObject("WScript.Network")
	domain = oNetwork.UserDomain
	Set oDomainNT = GetObject("WinNT://" & domain)
	intMaxPwdAge = oDomainNT.Get("MaxPasswordAge")

	Set fs = CreateObject ("Scripting.FileSystemObject")
	If fs.FileExists(".\ExpiredPasswords.csv") Then
		fs.DeleteFile(".\ExpiredPasswords.csv")
	End If
	Set userFile = fs.CreateTextFile (".\ExpiredPasswords.csv")
	userFile.Write "UserName, UserDN, LastPasswordChangeDate, DaysUntilExpired, DateOfExpire, UserStatus"
	userFile.WriteLine
	
	'Parse the INI file
	Set readFile = fs.OpenTextFile (".\EmailExpiringPasswords.ini")
	strMode = "SETUP"
	Do Until readFile.AtEndOfStream
		strLine = readFile.ReadLine
		If strMode = "SETUP" Then
			If InStr(strLine, "=") > 0 Then
				strValue = Trim(Right(strLine, Len(strLine) - InStr(strLine, "=")))
			Else
				strValue = ""
			End If
			
			If UCase(Left(strLine, 9)) = "SMTPRELAY" Then
				strSMTPRelay = strValue
			End If 
			
			If UCase(Left(strLine, 8)) = "SMTPFROM" Then
				strSMTPFrom = strValue
			End If
			
			If UCase(Left(strLine, 18)) = "SHOWPROGRESSWINDOW" Then
				If strValue = "Yes" or strValue = "TRUE" or strValue = "1" Then
					showTextWindow = TRUE
				Else
					showTextWindow = FALSE
				End If
			End If
			
			If UCASE(Left(strLine, 12)) = "DAYSTOEXPIRE" Then
				iDaysExpire = CInt(strValue)
			End If
			
			If UCase(Left(strLine, 12)) = "[EMAIL BODY]" Then
				strMode = "BODY"
				numLines = 0
			End If
			
			If UCase(Left(strLine, 7)) = "[SETUP]" Then
				strMode = "SETUP"
			End If
		Else
			numLines = numLines + 1
			ReDim Preserve arrBody(numLines)
			arrBody(numLines) = strLine & vbCRLF
		End If
	Loop
	
	'Construct the progress window
	If showTextWindow = True then
		dim txtOutput
		binFirstWindow = True
		Set objExplorer = WScript.CreateObject("InternetExplorer.Application")
	End If
End Sub


Function sendUserMail(strGivenName, strSN, strEmailAddress, iDays)
	For x = 1 to numLines
		strLine = arrBody(x)
		strLine = Replace(strLine, "%DAYS%" , iDays)
		strLine = Replace(strLine, "%FIRSTNAME%", strGivenName)
		strLine = Replace(strLine, "%EMAILADDR%", strEmailAddress)
		strLine = Replace(strLine, "%LASTNAME%", strSN)
		strTextBody = strTextBody & strLine
	Next
	
	Set objMessage = CreateObject("CDO.Message")
	objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 
	objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTPRelay
	objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 
	objMessage.Configuration.Fields.Update
	
	objMessage.Subject = "Your password is about to expire in " & iDays & " days!"
	objMessage.From = strSMTPFrom
	objMessage.To = "hoogteijling@bedrijf.nl"
	'strEmailAddress
	objMessage.TextBody = strTextBody

	objMessage.Send
	
	If Err.Number <> 0 then
		strResult = "Failed to send Email"
	Else
		strResult = "Email sent to user"
	End If
	Err.Clear

	sendUserMail = strResult
End Function

Sub runExit
	showtext(crlf & "Finished!")
End Sub
EmailExpiringPasswords.ini file:
PHP:
[SETUP]
SMTPRelay=<192.168.66.11>
SMTPFrom=admin@bedrijf.nl
ShowProgressWindow= No
DaystoExpire=14


#
# %DAYS% = replaces with the number of days until the password expires
# %FIRSTNAME% = user's first name
# %LASTNAME% = user's last name
# %EMAILADDR% = user's email address
#


[EMAIL BODY]
*** This is an automatically generated email, please do not reply. ***

Good morning %FIRSTNAME%,

We have detected that your password is going to expire in %DAYS% days.
We strongly suggest you change it immediately.  Once your password expires you will not be able to log into Outlook Web Access or the VPN.  Passwords can only be changed from the office or if you have a VPN connection.  Remote employees may not be able to get into the system at all without assistance from the help desk.
If you're still unsure how to change your password simply email hoogteijling@bedrijf.nl for assistance.
Groeten Marcel
 
Laatst bewerkt:
a. Het is mij niet duidelijk of er inderdaad wat te mailen is (oftewel: Of er wel gebruikers zijn waarvan het wachtwoord binnen 14 dagen verloopt)
b. Lijkt mij niet dat in het .ini bestand
SMTPRelay=<192.168.66.11>
moet staan, maar wel
SMTPRelay=192.168.66.11

(dus zonder de < en > erbij...), want die staan ook niet in (bijv.) deze .ini

Tijs.
 
Laatst bewerkt:
Zonder de <> werkt ie nog steeds niet, er wordt een .csv file gegenereerd waarin ik kan zien welke accounts wanneer verlopen.
De waarde 14 heb ik al aangepast naar waardes waardoor ik zeker weet dat ie een mailtje zou moeten sturen maar tot nog toe steeds geen mails ontvangen.

Is het script misschien dusdanig aan te passen dattie zo-wie-zo een mail stuurt, bij wijze van test?

Groeten Marcel
 
Laatst bewerkt:
Herstel !!!

Ik moest na het verwijderen van de < en de > idd Wscript.exe toevoegen aan de uitzonderingslijst in McAfee.
Het werkt nu precies zoals het hoort !!!

Dank je wel dnties voor alle moeite. :thumb:

Groeten Marcel
 
Dus (toch) wat ik in posting #16 al suggereerde:
Maarre... Dat script moet zeker ook in McAfee als uitzondering worden toegevoegd??? Of de achterliggende scripttaal zelf.

Fijn dat het opgelost is.

Tijs.
 
In posting 16 was ik er helaas nog niet achter dat de <> weggehaald moesten worden uit het script.
Op dat moment verstuurde ie nog geen mail.
Na het weghalen van de <> zag ik de blokkade pas in McAfee.

Groeten Marcel
 
Ah, interessante toevoeging. Bedankt daarvoor.

Tijs.
 
Ik kan in ieder geval weer verder.
Bedankt nogmaals.

Groeten Marcel
 
script runt niet onder de gplande taak op 2012 R2

ik heb het script werkend maar het lukt niet om hem in te plannen?

Als ik een taak aanmaak blijft hij op running staan en er gebeurd niks :-/
als ik direct het script opstart dan verstuurd hij netjes de email.

ik heb de gebruiker log on as a batch rights gegeven.
ik heb naar mijn odee alle varianten geprobeerd mbt start in folder en account settings

ik heb zelfs een BATfile gemaakt met Cscript diet op zijn beurt weer het script aanroept maar daar heb ik het zelfde reslutaat.

heeft er iemand een werkende oplossing hiervoor?
 
Ik ben blij dattie bij mij werkt in ieder geval.
Ik ben ook wel even aan het tobben geweest.
Hier is het een W2008R2 server

Gebruiker: Administrator
Password: Met het correcte password.
.VBS en .INI staan in dezelfde map onder C:\Windows\sysvol\sysvol\Domain\scripts\ExpiringPasswords\
Misschien kom je HIER nog verder mee, daar heb ik ook vrijwel alle info uit weten te halen om het werkend te krijgen.

Verder krijgen bij ons de gebruikers een mailtje maar ook bij het aanmelden komt er een venstertje in beeld, dit gaat via een GPO logon script.
Dit werkt ook als een tiet.
Code:
Dim oDomain
Dim oUser
Dim maxPwdAge
Dim numDays
Dim warningDays
warningDays = 14

Set LoginInfo = CreateObject("ADSystemInfo") 
Set objUser = GetObject("LDAP://" & LoginInfo.UserName & "") 
strDomainDN = UCase(LoginInfo.DomainDNSName) 
strUserDN = LoginInfo.UserName

Set oDomain = GetObject("LDAP://" & strDomainDN)
Set maxPwdAge = oDomain.Get("maxPwdAge")

'========================================
' Calculate the number of days that are
' held in this value.
'========================================
numDays = CCur((maxPwdAge.HighPart * 2 ^ 32) + _
maxPwdAge.LowPart) / CCur(-864000000000)
'WScript.Echo "Maximum Password Age: " & numDays

'========================================
' Determine the last time that the user
' changed his or her password.
'========================================
Set oUser = GetObject("LDAP://" & strUserDN)

'========================================
' Add the number of days to the last time
' the password was set.
'========================================
whenPasswordExpires = DateAdd("d", numDays, oUser.PasswordLastChanged)
fromDate = Date
daysLeft = DateDiff("d",fromDate,whenPasswordExpires)

'WScript.Echo "Password Last Changed: " & oUser.PasswordLastChanged
if (daysLeft < warningDays) and (daysLeft > -1) then
Msgbox "Je wachtwoord verloopt binnen " & daysLeft & " dag(en)" & " op " & whenPasswordExpires & chr(13) & chr(13) & "Om je wachtwoord alvast te wijzigen druk je op CTRL+ALT+DEL en" & chr(13) & "druk op 'Wachtwoord wijzigen...'" & chr(13) & chr(13) & "Vergeet niet je wachwoord van je smartphone ook te wijzigen!!!" & chr(13) & chr(13) & "Wanneer je je wachtwoord niet wijzigt binnen " & daysLeft & " dag(en) " & chr(13) & "kun je niet meer inloggen op het netwerk!!!", 0, "WACHTWOORD VERLOOPT BIJNA!!!"
End if

'========================================
' Clean up.
'========================================
Set oUser = Nothing
Set maxPwdAge = Nothing
Set oDomain = Nothing

Groeten Marcel
 
Laatst bewerkt:
Thanks a lot!!

ik ben voor de Powershell versie gegaan, en werkt als een trein.
gelijk ook wat meer leuke opties in het script :)
 
Ik dacht dat het gewoon een Visual Basic script was (.vbs)
Of is dat hetzelfde?

Groeten Marcel
 
Bedankt voor de tip, ik zal er eens naar kiken of er verbeteringen inzitten t.o.v. de vorige versie.

Groeten Marcel
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan