Export receipts.vbs

From Alpine Linux
Revision as of 14:36, 6 June 2008 by Clandmeter (talk | contribs) (New page: '================================================================================================== ' NAME: PostfixAddressExtract.VBS ' VERSION: 1.0 ' AUTHOR: Bharat Suneja (altered by...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
'==================================================================================================
' 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