One thing you may need to do from time to time for a myriad of reasons is stop and start a particular instance of a Virtual SMTP server on Exchange. To do this via a script you can use the IIS provider which has a stop and start method you can use once you have connected to the object in question. A simple Example would be
Set SMTPsvc = GetObject("IIS://" & Servername & "/SMTPSVC/1")
SMTPsvc.Stop
SMTPsvc.Start
This should also work for Pop3 and IMAP4 virtual servers (as long as you use the correct path to the object). I've put a more complicated sample together that allows you to enter a servername as a commandline parameter and it will then query Active Directory to find all the SMTP Virtual Server instances on the particular server it will then connect to and query those instances on that server and restart any currently active instances. I've put a downloadable copy of the script here the script itself looks like.
snServerName = wscript.arguments(0)
set conn = createobject("ADODB.Connection")
set com = createobject("ADODB.Command")
Set iAdRootDSE = GetObject("LDAP://RootDSE")
strNameingContext = iAdRootDSE.Get("configurationNamingContext")
strDefNamingContext = iAdRootDSE.Get("defaultNamingContext")
Conn.Provider = "ADsDSOObject"
Conn.Open "ADs Provider"
Com.ActiveConnection = Conn
Com.ActiveConnection = Conn
Wscript.echo
Wscript.echo "SMTP Virtual Servers Status"
vsQuery = "<LDAP://" & strNameingContext &amp;amp;amp; ">;(objectCategory=protocolCfgSMTPServer);name,distinguishedName;subtree"
Com.ActiveConnection = Conn
Com.CommandText = vsQuery
Set Rs = Com.Execute
While Not Rs.EOF
strstmsrv = "LDAP://" & rs.fields("distinguishedName")
set svsSmtpserver = getobject(strstmsrv)
crServerName =
mid(svsSmtpserver.distinguishedName,instr(svsSmtpserver.distinguishedName,"CN=Protocols,")+16,instr(svsSmtpserver.distinguishedName,",CN=Servers")-(instr(svsSmtpserver.distinguishedName,"CN=Protocols,")+16))
wscript.echo
wscript.echo "ServerName:" & crServerName
if lcase(snServerName) = lcase(crServerName) then call
getSTMPstatus(crServerName,svsSmtpserver.adminDisplayName)
rs.movenext
wend
sub getSTMPstatus(servername,vsname)
Set SMTPVSS = GetObject("IIS://" & Servername &amp;amp;amp; "/SMTPSVC")
for each SMTPVS in SMTPVSS
if SMTPVS.KeyType = "IIsSmtpServer" then
if SMTPVS.ServerComment = vsname then
wscript.echo "SMTP Server : " & SMTPVS.ServerComment
select case SMTPVS.ServerState
case 1 Wscript.echo "Current State: Starting"
case 2 Wscript.echo "Current State: Started"
Wscript.echo "Will Restart"
SMTPVS.Stop
wscript.echo "Virtual server Stop"
SMTPVS.Start
wscript.echo "Virtual server Start"
case 3 Wscript.echo "Current State: Stopping"
case 4 Wscript.echo "Current State: Stopped"
case 5 Wscript.echo "Current State: Pausing"
case 6 Wscript.echo "Current State: Paused"
case 7 Wscript.echo "Current State: Continuing"
case else Wscript.echo "unknown"
end select
end if
end if
next
end sub
Set SMTPsvc = GetObject("IIS://" & Servername & "/SMTPSVC/1")
SMTPsvc.Stop
SMTPsvc.Start
This should also work for Pop3 and IMAP4 virtual servers (as long as you use the correct path to the object). I've put a more complicated sample together that allows you to enter a servername as a commandline parameter and it will then query Active Directory to find all the SMTP Virtual Server instances on the particular server it will then connect to and query those instances on that server and restart any currently active instances. I've put a downloadable copy of the script here the script itself looks like.
snServerName = wscript.arguments(0)
set conn = createobject("ADODB.Connection")
set com = createobject("ADODB.Command")
Set iAdRootDSE = GetObject("LDAP://RootDSE")
strNameingContext = iAdRootDSE.Get("configurationNamingContext")
strDefNamingContext = iAdRootDSE.Get("defaultNamingContext")
Conn.Provider = "ADsDSOObject"
Conn.Open "ADs Provider"
Com.ActiveConnection = Conn
Com.ActiveConnection = Conn
Wscript.echo
Wscript.echo "SMTP Virtual Servers Status"
vsQuery = "<LDAP://" & strNameingContext &amp;amp;amp; ">;(objectCategory=protocolCfgSMTPServer);name,distinguishedName;subtree"
Com.ActiveConnection = Conn
Com.CommandText = vsQuery
Set Rs = Com.Execute
While Not Rs.EOF
strstmsrv = "LDAP://" & rs.fields("distinguishedName")
set svsSmtpserver = getobject(strstmsrv)
crServerName =
mid(svsSmtpserver.distinguishedName,instr(svsSmtpserver.distinguishedName,"CN=Protocols,")+16,instr(svsSmtpserver.distinguishedName,",CN=Servers")-(instr(svsSmtpserver.distinguishedName,"CN=Protocols,")+16))
wscript.echo
wscript.echo "ServerName:" & crServerName
if lcase(snServerName) = lcase(crServerName) then call
getSTMPstatus(crServerName,svsSmtpserver.adminDisplayName)
rs.movenext
wend
sub getSTMPstatus(servername,vsname)
Set SMTPVSS = GetObject("IIS://" & Servername &amp;amp;amp; "/SMTPSVC")
for each SMTPVS in SMTPVSS
if SMTPVS.KeyType = "IIsSmtpServer" then
if SMTPVS.ServerComment = vsname then
wscript.echo "SMTP Server : " & SMTPVS.ServerComment
select case SMTPVS.ServerState
case 1 Wscript.echo "Current State: Starting"
case 2 Wscript.echo "Current State: Started"
Wscript.echo "Will Restart"
SMTPVS.Stop
wscript.echo "Virtual server Stop"
SMTPVS.Start
wscript.echo "Virtual server Start"
case 3 Wscript.echo "Current State: Stopping"
case 4 Wscript.echo "Current State: Stopped"
case 5 Wscript.echo "Current State: Pausing"
case 6 Wscript.echo "Current State: Paused"
case 7 Wscript.echo "Current State: Continuing"
case else Wscript.echo "unknown"
end select
end if
end if
next
end sub