$servername = "MYSERVERNAME"
$PR_HAS_RULES = &663A000B
$PR_URL_NAME = &6707001E
$PR_CREATOR = &3FF8001E
$fso = CreateObject("Scripting.FileSystemObject")
$wfile = $fso.opentextfile("c:\forwardingRules.ini",2,1)
;$wfile.writeline("Mailbox,FolderPath,Creator,AdressObject,SMTPForwdingAddress")
$conn = CreateObject("ADODB.Connection")
$com = CreateObject("ADODB.Command")
$iAdRootDSE = GetObject("LDAP://RootDSE")
$strNameingContext = $iAdRootDSE.Get("configurationNamingContext")
$strDefaultNamingContext = $iAdRootDSE.Get("defaultNamingContext")
$Conn.Provider = "ADsDSOObject"
$Conn.Open("ADs Provider")
$svcQuery = "<LDAP://" + $strNameingContext + ">;(&(objectCategory=msExchExchangeServer)(cn=" + $Servername + "));cn,name,legacyExchangeDN;subtree"
$Com.ActiveConnection = $Conn
$Com.CommandText = $svcQuery
$Rs = $Com.Execute
While Not $rs.eof
$GALQueryFilter = "(&(&(&(& (mailnickname=*)(!msExchHideFromAddressLists=TRUE)(| (&(objectCategory=person)(objectClass=user)(msExchHomeServerName=" + $rs.fields("legacyExchangeDN") + ")) )))))"
$strQuery = "<LDAP://" + $strDefaultNamingContext + ">;" + $GALQueryFilter + ";distinguishedName,mailnickname;subtree"
$com.Properties("Page Size").Value = 100
$Com.CommandText = $strQuery
$Rs1 = $Com.Execute
While Not $Rs1.eof
procmailboxes($servername,$rs1.fields("mailnickname"))
? $rs1.fields("mailnickname")
$rs1.movenext
Loop
$rs.movenext
Loop
$rs.close
$wfile.close
$fso = ""
$conn = ""
$com = ""
? "Done"
Function procmailboxes($servername,$mailboxname)
$objSession = CreateObject("MAPI.Session")
$objSession.Logon("","",0,1,1,1,$servername + @CRLF + $mailboxname
$objInfoStores = $objSession.InfoStores
$objInfoStore = $objSession.GetInfoStore
If $objSession.outofoffice = 1
$Inbox = $objSession.Inbox
If $inbox.fields.item($PR_HAS_RULES).value = 1
$objMessages = $inbox.HiddenMessages
For Each $objMessage In $objMessages
If $objMessage.type = "IPM.Rule.Message"
$procrule($objMessage,$mailboxname,$inbox.fields.item(PR_URL_NAME).value)
EndIf
Next
EndIf
EndIf
EndFunction
Function procrule($objmessage,$MailboxName,$folderpath)
$frule = 0
$splitarry = Split(hextotext($objmessage.fields.item(&65EF0102)),Chr(132),-1,1)
If UBound($splitarry) <> 0
?
? "Mailbox Name :" + $MailboxName
? "Folder Path :" + $folderpath
? "Rule Created By : " + $objmessage.fields.item(PR_CREATOR).value
$mbname = $MailboxName
$fpath = $folderpath
$creator = $objmessage.fields.item(PR_CREATOR).value
$frule = 1
EndIf
$tfirst = 0
$addcount = 1
For $i=0 To UBound($splitarry)
$addrrsplit = Split($splitarry($i),Chr(176),-1,1)
For $j=0 To UBound($addrrsplit)
$addrcontsep = Chr(3) + "0"
If InStr($addrrsplit($j),$addrcontsep)
If $tfirst = 1
$addcount = $addcount + 1
?
? "Address Object :" + $addcount
ReDim Preserve $resarray(1,1,1,1,1,$addcount)
$resarray(1,0,0,0,0,$addcount) = $mbname
$resarray(1,1,0,0,0,$addcount) = $fpath
$resarray(1,1,1,0,0,$addcount) = $creator
If InStr($addrrsplit($j),"0/o=")
$resarray(1,1,1,1,0,$addcount) = SubStr($addrrsplit($j),(InStr($addrrsplit($j),"0/o=")+1),Len($addrrsplit($j)))
? "ExchangeDN :" + SubStr($addrrsplit($j),(InStr($addrrsplit($j),"0/o=")+1),Len($addrrsplit($j)))
Else
? "Address :" + SubStr($addrrsplit($j),3,Len($addrrsplit($j)))
$resarray(1,1,1,1,0,$addcount) = SubStr($addrrsplit($j),3,Len($addrrsplit($j)))
EndIf
$tfirst = 1
EndIf
$smtpsep = Chr(254) + "9"
If InStr($addrrsplit($j),$smtpsep)
$slen = InStr($addrrsplit($j),$smtpsep) + 2
$elen = InStr($addrrsplit($j),Chr(3))
? "SMTP Forwarding Address : " + SubStr($addrrsplit($j),$slen,($elen-$slen))
$resarray(1,1,1,1,1,$addcount) = SubStr($addrrsplit($j),$slen,($elen-$slen))
EndIf
EndIf
Next
Next
If $frule = 1
For $r=1 To UBound($resarray,6)
$wfile.writeline("[" + $resarray(1,0,0,0,0,$r) + "]" + @CRLF + "Name=" + $resarray(1,1,1,0,0,$r) + @CRLF + "forwardto=" + $resarray(1,1,1,1,1,$r) + @CRLF + "creator=" + $resarray(1,1,1,0,0,$r))
Next
EndIf
EndFunction
Function hextotext($binprop)
$arrnum = Len($binprop)/2
ReDim $aout($arrnum)
$slen = 1
For $i=1 To $arrnum
If CLng("&" + SubStr($binprop,$slen,2)) <> 0
$aOut($i) = Chr(CLng("&" + SubStr($binprop,$slen,2)))
? CLng("&" + SubStr($binprop,$slen,2)) + "," + chr(CLng("&" + SubStr($binprop,$slen,2)))
EndIf
$slen = $slen+2
Next
$hextotext = Join($aOUt,"")
EndFunction