Export receipts.vbs

From Alpine Linux
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
 '==================================================================================================
 ' NAME: PostfixAddressExtract.VBS
 ' VERSION: 1.0
 ' AUTHOR: Bharat Suneja (altered by Lee Monamy)
 ' LAST MODIFIED : 16/08/2007
 '==================================================================================================
 ' COMMENT: Based on LISTPROXYADDRESSES.VBS/LISTEMAILADDRESSES.VBS by Bharat Suneja
 '          http://exchangepedia.com/blog/2005/09/how-to-export-all-email-addresses-from.html
 '          but altered to:
 '          o  strip out cn, mail, etc entries
 '          o  strip out .local addresses
 '          o  remove a bunch of extra CRLFs
 '          o  remove the "SMTP:" or "smtp:" prefix from addresses (x = Right(x), Len(x) -5))
 '          o  put the display name commented out just before the email addresses
 '          o  append "   OK" after just the email address (sans SMTP: prefix)
 '          Run the script (double-click) and the output appears in a dialog.  It is also written
 '          to C:\proxyaddresses.txt.  You should be able to copy this file to your spam filter and
 '          simply postmap it with no further processing required.
 '          DISCLAIMER: THIS SCRIPT IS ENTIRELY UNSUPPORTED.  USE AT YOUR OWN RISK.  NOBODY BUT YOU
 '          IS RESPONSIBLE IF THIS SCRIPT DELETES THE CONTENTS OF YOUR ACTIVE DIRECTORY OR SETS FIRE
 '          TO YOUR CAT.  CAVEAT EMPTOR.
 '          LICENCE: Unknown, as this is pretty much Bharat Suneja's script with minor changes, and
 '          there was no licence mentioned originally.  Otherwise, LGPL.  Do what you like.
 '          This has been tested on several SBS 2003 installations and Works For Me, and does what I
 '          need.  I hope you find it useful.
 '          Thanks to Gary V (http://www200.pair.com/mecham/spam/) & freespamfilter.org for their
 '          truly excellent documentation!
 '==================================================================================================

 'Set up constant for deleting values from multivalued attribute memberOf

 Const ADS_PROPERTY_NOT_FOUND  = &h8000500D
 Const ADS_UF_ACCOUNTDISABLE = 2                       'For UserAccountControl
 Const strX400Search = "x400"
 Const LocSearch = ".local"
 '______________________________________________________

 'Set RootDSE
 Set objRootDSE = GetObject("LDAP://rootDSE")
 strDomain = objRootDSE.Get("defaultNamingContext")
 strADPath = "LDAP://" & strDomain
 'wscript.Echo strADPath
 Set objDomain = GetObject(strADPath)
 'wscript.echo "objDomain: " & objDomain.distinguishedName

 'Setup ADODB connection
 Set objConnection = CreateObject("ADODB.Connection")
 objConnection.Open "Provider=ADsDSOObject;"
 Set objCommand = CreateObject("ADODB.Command")
 objCommand.ActiveConnection = objConnection

 'Execute search command to look for Contacts & Groups
     objCommand.CommandText = _
       "<" & strADPath & ">" & ";(&(|(objectClass=contact)(objectClass=group))(mail=*))" & ";distinguishedName,displayName,mail,proxyAddresses;subtree"

     'Execute search to get Recordset
     Set objRecordSet = objCommand.Execute
     
         
         'Start procedure
         
     strResult = strResult & VbCrLf & "# Domain: " & strDomain

     strResult = strResult & VbCrlf &  "#Total Records Found (other accounts, distribution groups): " & objRecordSet.RecordCount & VbCrlf
     AddressCount = 0

        While Not objRecordSet.EOF 'Iterate through the search results
  
             strUserDN = objRecordSet.Fields("distinguishedName")     'Get User's distinguished name from Recordset into a string
             set objUser= GetObject("LDAP://"& strUserDN & "")         'Use string to bind to user object
             

                        arrProxyAddresses = objRecordSet.Fields("proxyAddresses")
                        If IsArray(objRecordSet.Fields("proxyAddresses")) Then               
                           For Each ProxyAddress in arrProxyAddresses
                             'Sub: Check X400 
                              If InStr(LCase(ProxyAddress), strX400Search) <> 0 Then 
                         		'Wscript.Echo "#This was an x400"
                     		 Else
                                      If InStr(1, ProxyAddress, LocSearch, 1) = 0 Then
                                          proxyAddress = Right(proxyAddress, Len(proxyAddress) -5 )
                                          strResult = strResult & VbCrlf & proxyAddress & "   OK"
                                      End If
                               End If   'Ends loop for X400 address
                 Next

             Else
                 strResult = strResult & VbCrlf &  "#Object does not have proxy addresses"
             End If
                 'strResult = strResult &  VbCrLf

      objRecordSet.MoveNext
 Wend

 '*************************************
 'Begin second query for users
 varDisabledCounter = 0                  

 'Execute search command to look for user
     objCommand.CommandText = _
       "<" & strADPath & ">" & ";(&(objectClass=user)(mail=*))" & ";distinguishedName,displayName,mail,proxyAddresses;subtree"

     'Execute search to get Recordset
     Set objRecordSet = objCommand.Execute
     
     strResult = strResult & vbCrlf & vbCrlf & "#Users"
     strResult = strResult & VbCrlf &  "#Total Records Found (users): " & objRecordSet.RecordCount
     


        While Not objRecordSet.EOF 'Iterate through the search results
             strUserDN = objRecordSet.Fields("distinguishedName")     'Get User's distinguished name from Recordset into a string
             set objUser= GetObject("LDAP://"& strUserDN & "")         'Use string to bind to user object
             
             
             If objUser.AccountDisabled = TRUE Then                    'If User account disabled, then skip proxy address enum
                varDisabledCounter = varDisabledCounter + 1
                strResult2 = strResult2 & VbCrLf & "# " & varDisabledCounter & " " & objUser.displayName & VbCrLf

                        arrProxyAddresses = objRecordSet.Fields("proxyAddresses")
                        If IsArray(objRecordSet.Fields("proxyAddresses")) Then

                           For Each ProxyAddress in arrProxyAddresses
                             'Sub: Check X400
                              If InStr(LCase(ProxyAddress), strX400Search) <> 0 Then 
                         		'Wscript.Echo "#This was an x400"
                     		 Else
                                          If InStr(1, ProxyAddress, LocSearch, 1) = 0 Then
                                              proxyAddress = Right(proxyAddress, Len(proxyAddress) -5 )
                         		     strResult2 = strResult2 & "# " &  proxyAddress & "   OK"
                                          End If
                                  AddressCount = AddressCount + 1
                               End If   'Ends loop for X400 address
                           Next
                               Else
                                   strResult2 = strResult2 & VbCrLf &  "#Object does not have proxy addresses"
                           End If
                               'strResult2 = strResult2 &  VbCrLf
                
    
             Else
                   strResult = strResult & VbCrLf & "# " & " " & objUser.displayName
                        arrProxyAddresses = objRecordSet.Fields("proxyAddresses")
                        If IsArray(objRecordSet.Fields("proxyAddresses")) Then
                           
                           For Each ProxyAddress in arrProxyAddresses
                             'Sub: Check X400
                              If InStr(LCase(ProxyAddress), strX400Search) <> 0 Then 
                         		'Wscript.Echo "#This was an x400"
                     		 Else
                                          If InStr(1, ProxyAddress, LocSearch, 1) = 0 Then
                                              proxyAddress = Right(proxyAddress, Len(proxyAddress) -5 )
                         		     strResult = strResult & vbCrlf & proxyAddress & "   OK"
                                          End If
                                  AddressCount = AddressCount + 1
                               End If   'Ends loop for X400 address
                           Next
                               Else
                                   strResult = strResult & VbCrLf &  "#Object does not have proxy addresses"
                           End If
                               strResult = strResult &  VbCrLf
                 
           End If   'End check for disabled user 
             
      objRecordSet.MoveNext 
 Wend  'End second query for users

               
 strResult = "# Users, Groups & Contacts" & VbCrLf & "#-------------------------" & VbCrLf & strResult
 strResult = strResult & VbCrLf & "# Disabled Users" & VbCrLf & "#-------------------------" & VbCrLf & strResult2
 'WScript.Echo strResult

 'Output to a text file
 Set objFileSystem = CreateObject("Scripting.FileSystemObject")
 Set objOutputFile = objFileSystem.CreateTextFile("C:\Inetpub\wwwroot\virtual.txt")
 objOutputFile.Write strResult