#199060 - 2010-07-21 03:30 PM
Convert Exchange out of office vbs to kix
|
foxy75
Just in Town
Registered: 2010-06-26
Posts: 2
Loc: Germany
|
Hello,
who can help me to convert the following script to kix? I'm new on kix. This script open every Mailbox on the Exchange and looks if the oof is enabled or not. If true, export the mailboxname, forwarding address and the creator of the rule to a file (in kix an .ini file to import in listview in kixforms). So we can see if there are more than one rules are enabled.
On Error Resume Next
servername = WScript.arguments(0)
PR_HAS_RULES = &H663A000B
PR_URL_NAME = &H6707001E
PR_CREATOR = &H3FF8001E
Set fso = CreateObject("Scripting.FileSystemObject")
Set wfile = fso.opentextfile("c:\forwardingRules.ini",2,True)
'wfile.writeline("Mailbox,FolderPath,Creator,AdressObject,SMTPForwdingAddress")
Set conn = CreateObject("ADODB.Connection")
Set com = CreateObject("ADODB.Command")
Set 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
Set 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") = 100
Com.CommandText = strQuery
Set Rs1 = Com.Execute
While Not Rs1.eof
Call procmailboxes(servername,rs1.fields("mailnickname"))
WScript.echo rs1.fields("mailnickname")
rs1.movenext
Wend
rs.movenext
Wend
rs.close
wfile.close
Set fso = Nothing
Set conn = Nothing
Set com = Nothing
WScript.echo "Done"
Sub procmailboxes(servername,mailboxname)
Set objSession = CreateObject("MAPI.Session")
objSession.Logon "","",False,True,True,True,servername & vbLF & mailboxname
Set objInfoStores = objSession.InfoStores
Set objInfoStore = objSession.GetInfoStore
If objSession.outofoffice = True Then
Set Inbox = objSession.Inbox
If inbox.fields.item(PR_HAS_RULES) = True Then
Set objMessages = inbox.HiddenMessages
For Each objMessage In objMessages
If objMessage.type = "IPM.Rule.Message" Then
Call procrule(objMessage,mailboxname,inbox.fields.item(PR_URL_NAME).value)
End If
Next
End If
End If
End Sub
Sub procrule(objmessage,MailboxName,folderpath)
frule = False
splitarry = Split(hextotext(objmessage.fields.item(&H65EF0102)),Chr(132),-1,1)
If UBound(splitarry) <> 0 Then
WScript.echo
WScript.echo "Mailbox Name :" & MailboxName
WScript.echo "Folder Path :" & folderpath
WScript.echo "Rule Created By : " & objmessage.fields.item(PR_CREATOR).value
mbname = MailboxName
fpath = folderpath
creator = objmessage.fields.item(PR_CREATOR).value
frule = True
End If
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) Then
If tfirst = 1 Then addcount = addcount + 1
WScript.echo
WScript.echo "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=") Then
resarray(1,1,1,1,0,addcount) = Mid(addrrsplit(j),(InStr(addrrsplit(j),"0/o=")+1),Len(addrrsplit(j)))
WScript.echo "ExchangeDN :" & Mid(addrrsplit(j),(InStr(addrrsplit(j),"0/o=")+1),Len(addrrsplit(j)))
Else
WScript.echo "Address :" & Mid(addrrsplit(j),3,Len(addrrsplit(j)))
resarray(1,1,1,1,0,addcount) = Mid(addrrsplit(j),3,Len(addrrsplit(j)))
End If
tfirst = 1
End If
smtpsep = Chr(254) & "9"
If InStr(addrrsplit(j),smtpsep) Then
slen = InStr(addrrsplit(j),smtpsep) + 2
elen = InStr(addrrsplit(j),Chr(3))
WScript.echo "SMTP Forwarding Address : " & Mid(addrrsplit(j),slen,(elen-slen))
resarray(1,1,1,1,1,addcount) = Mid(addrrsplit(j),slen,(elen-slen))
End If
Next
Next
If frule = True Then
For r = 1 To UBound(resarray,6)
wfile.writeline("[" & resarray(1,0,0,0,0,r) & "]" & vbnewline & "Name=" & resarray(1,1,1,0,0,r) & vbnewline & "forwardto=" & resarray(1,1,1,1,1,r) & vbnewline & "creator=" & resarray(1,1,1,0,0,r))
Next
End If
End Sub
Function hextotext(binprop)
arrnum = Len(binprop)/2
ReDim aout(arrnum)
slen = 1
For i = 1 To arrnum
If CLng("&H" & Mid(binprop,slen,2)) <> 0 Then
aOut(i) = Chr(CLng("&H" & Mid(binprop,slen,2)))
rem wscript.echo CLng("&H" & mid(binprop,slen,2)) & "," & chr(CLng("&H" & mid(binprop,slen,2)))
End If
slen = slen+2
Next
hextotext = Join(aOUt,"")
End Function
|
|
Top
|
|
|
|
#199061 - 2010-07-21 05:30 PM
Re: Convert Exchange out of office vbs to kix
[Re: foxy75]
|
Richard H.
Administrator
   
Registered: 2000-01-24
Posts: 4946
Loc: Leatherhead, Surrey, UK
|
Unfortunately I don't have the tools (CDO?) installed to get very far, but the following should get you started so that you can see how VBS converts to KiXtart:
Break ON
$=SetOption("WrapAtEOL","ON")
$TRUE=Not 0
$FALSE=Not $TRUE
If Not IsDeclared($SERVER)
"You must supply a server name on the command line"+@CRLF
" kix32.exe script.kix $$SERVER=server"+@CRLF
Exit 1
EndIf
$PR_HAS_RULES = &663A000B
$PR_URL_NAME = &6707001E
$PR_CREATOR = &3FF8001E
$sIni="c:\forwardingRules.ini"
;wfile.writeline("Mailbox,FolderPath,Creator,AdressObject,SMTPForwdingAddress")
$conn=CreateObject("ADODB.Connection")
$com=CreateObject("ADODB.Command")
$iAdRootDSE=GetObject("LDAP://RootDSE")
$strNamingContext=$iAdRootDSE.Get("configurationNamingContext")
$strDefaultNamingContext=$iAdRootDSE.Get("defaultNamingContext")
$Conn.Provider="ADsDSOObject"
$Conn.Open("ADs Provider")
$svcQuery="<LDAP://"+$strNamingContext+">;(&(objectCategory=msExchExchangeServer)(cn="+$SERVER+"));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
"Processing: "+$rs1.fields("mailnickname")+@CRLF
procmailboxes($SERVER,$rs1.fields("mailnickname"))
$rs1.movenext
Loop
$rs.movenext
Loop
$rs.close
$fso = 0
$conn = 0
$com = 0
"Done"+@CRLF
Exit 0
Function procmailboxes($sServer,$sMailName)
"In ProcMailBoxes"+@CRLF
EndFunction
|
|
Top
|
|
|
|
#199258 - 2010-08-03 05:00 PM
Re: Convert Exchange out of office vbs to kix
[Re: Richard H.]
|
foxy75
Just in Town
Registered: 2010-06-26
Posts: 2
Loc: Germany
|
Hy,
thx, the first part works. Because its very hard for me to translate the rest of vbs. This is the secon part i translated, because i get now results.
Function procmailboxes($Server, $mailboxname)
$objSession = CreateObject("MAPI.Session")
$objSession.Logon(,, 0, 1, 1, 1, $Server+@CRLF+$mailboxname)
$objInfoStores = $objSession.InfoStores
$objInfoStore = $objSession.GetInfoStore
If $objSession.outofoffice.value
$Inbox = $objSession.Inbox
If $inbox.fields.item(&663A000B).value
$objMessages = $inbox.HiddenMessages
For Each $objMessage in $objMessages
If $objMessage.type = "IPM.Rule.Message"
;procrule($objMessage, $mailboxname,inbox.fields.item(&6707001E).value)
EndIf
Next
EndIf
EndIf
EndFunction
|
|
Top
|
|
|
|
#199275 - 2010-08-04 09:53 AM
Re: Convert Exchange out of office vbs to kix
[Re: foxy75]
|
Arend_
MM club member
   
Registered: 2005-01-17
Posts: 1896
Loc: Hilversum, The Netherlands
|
Like Richard, I don't have Outlook or CDO to test, but I did a literal translation of your script. Since we are dealing with a COM object, the Boolean values might not always work out.
$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
|
|
Top
|
|
|
|
Moderator: Glenn Barnas, NTDOC, Arend_, Jochen, Radimus, Allen, ShaneEP, Ruud van Velsen, Mart
|
1 registered
(Allen)
and 977 anonymous users online.
|
|
|