VBS строка Wizzardry - PullRequest
0 голосов
/ 10 июля 2009

Хорошо, это не так, но ...

так что это быстрый скрипт Я нашел в Интернете , который работает на моем сервере Exchange и выдает список адресов электронной почты, которые я могу использовать для проверки получателей на фильтре спама:

' Export all valid recipients (= proxyAddresses) into a
' file virtual.txt
'
' Ferdinand Hoffmann & Patrick Koetter
' 20021100901
' Shamelessly stolen from 
' http://www.microsoft.com/windows2000/techinfo/ \
' planning/activedirectory/bulksteps.asp


'Global variables
Dim Container
Dim OutPutFile
Dim FileSystem

'Initialize global variables
Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
Set OutPutFile = FileSystem.CreateTextFile("virtual.txt", True)
Set Container=GetObject("LDAP://CN=Users,DC=office,DC=example,DC=com")

'Enumerate Container
EnumerateUsers Container

'Clean up
OutPutFile.Close
Set FileSystem = Nothing
Set Container = Nothing

'Say Finished when your done
WScript.Echo "Finished"
WScript.Quit(0)

'List all Users
Sub EnumerateUsers(Cont)
Dim User

'Go through all Users and select them
For Each User In Cont
Select Case LCase(User.Class)

'If you find Users
Case "user"
  'Select all proxyAddresses
  Dim Alias
  If Not IsEmpty(User.proxyAddresses) Then
    For Each Alias in User.proxyAddresses
    OutPutFile.WriteLine "alias: " & Alias
    'WScript.Echo Alias
  Next
  End If

Case "organizationalunit" , "container"
  EnumerateUsers User

End Select
Next
End Sub

Проблема в том, что список получателей возвращается так:

smtp:user@local.lan
SMTP:user@publicdomain.com
x400:c=US;a= ;p=local;o=Exchange;s=lastname;g=firstname;
smtp:postmaster@publicdomain.com
smtp:webmaster@publicdomain.com

Фильтр спама имеет скрипт импорта, который импортирует только строки с префиксом «smtp» или «SMTP», поэтому x400 не представляет проблемы. Проблема в том, что я не хочу, чтобы VBscript экспортировал адрес «user@local.lan». Я пробовал это:

'List all Users
Sub EnumerateUsers(Cont)
Dim User

'Go through all Users and select them
For Each User In Cont
Select Case LCase(User.Class)

'If you find Users
Case "user"
  'Select all proxyAddresses
  Dim Alias
  If Not IsEmpty(User.proxyAddresses) Then
    For Each Alias in User.proxyAddresses
    If Not Alias = "*.lan" Then
        OutPutFile.WriteLine "alias: " & Alias
        WScript.Echo Alias
    End If
  Next
  End If

Case "organizationalunit" , "container"
  EnumerateUsers User

End Select
Next
End Sub

Но это ничего не делает. Я попытался сопоставить общедоступный домен (если Alias ​​= " publicdomain " Тогда), но это не дало никаких результатов.

Итак, как мне отфильтровать выходные данные, чтобы я получал адреса только в общем домене?

Ответы [ 2 ]

1 голос
/ 10 июля 2009

Заменить

If Not Alias = "*.lan"

с

If Right(Alias, 4) <> ".lan"

(Это можно сделать с помощью регулярных выражений, но сейчас пятница, и я устал!)

0 голосов
/ 10 июля 2009

Вы можете использовать регулярное выражение для фильтрации строк, которые не соответствуют вашим критериям. Что-то вроде следующего.

smtp:.*@publicdomain\.com

В качестве альтернативы вы также можете настроить свой запрос LDAP, чтобы возвращать только пользователей определенного OU. Существует ли группа AD, в которую входят только пользователи с учетными записями Exchange?

Вот VBS для соответствия RegEx ...

Dim s : s = "smtp:user@local.lan" & VBCRLF & _
    "SMTP:user@publicdomain.com" & VBCRLF & _
    "x400:c=US;a= ;p=local;o=Exchange;s=lastname;g=firstname;" & VBCRLF & _
    "smtp:postmaster@publicdomain.com" & VBCRLF & _
    "smtp:webmaster@publicdomain.com"

Dim ex : ex = "smtp:.*@publicdomain\.com"

Dim oRE: Set    oRE = New RegExp
        oRE.IgnoreCase = True
        oRE.Global = True
        oRE.Pattern = ex

Dim matches : Set matches = oRE.Execute(s)

For Each match In matches
    WScript.Echo match.Value
Next
...