If you’re using the built-in Content Filtering in Exchange 2007 on a Hub or Edge server you may want to take advantage of System white lists. But if you have used the Set-ContentFilterSetting cmdlet you may have noticed this isn't the most user friendly cmdlet. If you’re maintaining these lists on a regular basis you may really start to dislike the lack of a GUI well I certainly do so I built a pretty simple GUI to make managing the BypassedSenders and BypassedSenderDomains a more enjoyable experience.
It’s pretty simple code first it uses Get-ContentFilterSetting to get the current setting of both of these properties and then displays then in a DatagridView. You can then add more entries or change existing entries by editing the flexGrid then when you hit the update button it will run back through the datagrid values and then creates a collection which is then used to update the ByPassedSenders or ByPassedSenderDomains properties.
I've put a download of the script here the script look like
[System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")
function UpdateBypassSenders(){
$newcombCollection = @()
foreach($Item in $dgDataGrid.Rows){
if ($item.Cells[0].Value -ne $null){
if ($item.Cells[0].Value -ne ""){
$newcombCollection += $item.Cells[0].Value
}
}
}
Set-ContentFilterConfig -BypassedSenders $newcombCollection
$fsTable.Clear()
$contentFilterConfig = get-ContentFilterConfig
foreach ($ent in $contentFilterConfig.BypassedSenders){
$fsTable.Rows.add($ent.ToString())
}
$dgDataGrid.DataSource = $fsTable
}
function UpdateBypassSenderDomains(){
$newcombCollection = @()
foreach($Item in $dgDataGrid1.Rows){
if ($item.Cells[0].Value -ne $null){
if ($item.Cells[0].Value -ne ""){
$newcombCollection += $item.Cells[0].Value
}
}
}
Set-ContentFilterConfig -BypassedSenderDomains $newcombCollection
$fsTable1.Clear()
$contentFilterConfig = get-ContentFilterConfig
foreach ($ent in $contentFilterConfig.BypassedSenderDomains){
$fsTable1.Rows.add($ent.ToString())
}
$dgDataGrid1.DataSource = $fsTable1
}
$form = new-object System.Windows.Forms.form
$contentFilterConfig = get-ContentFilterConfig
$Dataset = New-Object System.Data.DataSet
$fsTable = New-Object System.Data.DataTable
$fsTable.TableName = "BypasssedSender"
$fsTable.Columns.Add("WhitelistEntry")
$BypassSenderArray = $contentFilterConfig.BypassedSenders.ToString().Split(',')
foreach ($ent in $contentFilterConfig.BypassedSenders){
$fsTable.Rows.add($ent.ToString())
}
$fsTable1 = New-Object System.Data.DataTable
$fsTable1.TableName = "BypassedSenderDomains"
$fsTable1.Columns.Add("WhitelistEntry")
foreach ($ent in $contentFilterConfig.BypassedSenderDomains){
$fsTable1.Rows.add($ent.ToString())
}
$dgDataGrid = new-object System.windows.forms.DataGridView
$dgDataGrid.Location = new-object System.Drawing.Size(20,50)
$dgDataGrid.size = new-object System.Drawing.Size(250,450)
$dgDataGrid.AutoSizeRowsMode = "AllHeaders"
$form.Controls.Add($dgDataGrid)
$dgDataGrid.DataSource = $fsTable
$dgDataGrid1 = new-object System.windows.forms.DataGridView
$dgDataGrid1.Location = new-object System.Drawing.Size(320,50)
$dgDataGrid1.size = new-object System.Drawing.Size(250,450)
$dgDataGrid1.AutoSizeRowsMode = "AllHeaders"
$form.Controls.Add($dgDataGrid1)
$dgDataGrid1.DataSource = $fsTable1
# Add Update Button
$exButton = new-object System.Windows.Forms.Button
$exButton.Location = new-object System.Drawing.Size(20,530)
$exButton.Size = new-object System.Drawing.Size(150,20)
$exButton.Text = "Update - Senders"
$exButton.Add_Click({UpdateBypassSenders})
$form.Controls.Add($exButton)
# Add Update Button
$exButton1 = new-object System.Windows.Forms.Button
$exButton1.Location = new-object System.Drawing.Size(320,530)
$exButton1.Size = new-object System.Drawing.Size(150,20)
$exButton1.Text = "Update - Domains"
$exButton1.Add_Click({UpdateBypassSenderDomains})
$form.Controls.Add($exButton1)
$Gbox = new-object System.Windows.Forms.GroupBox
$Gbox.Location = new-object System.Drawing.Size(10,15)
$Gbox.Size = new-object System.Drawing.Size(270,550)
$Gbox.Text = "By-Passed Senders"
$form.Controls.Add($Gbox)
$Gbox1 = new-object System.Windows.Forms.GroupBox
$Gbox1.Location = new-object System.Drawing.Size(310,15)
$Gbox1.Size = new-object System.Drawing.Size(270,550)
$Gbox1.Text = "By-Passed Sender Domains"
$form.Controls.Add($Gbox1)
$form.Text = "Exchange 2007 WhiteList Form"
$form.size = new-object System.Drawing.Size(600,600)
$form.autoscroll = $true
$form.Add_Shown({$form.Activate()})
$form.ShowDialog()
Sunday, February 22, 2009
Subscribe to:
Post Comments (Atom)
15 comments:
Hi,
This sound really good but forgive my ignorance. How do you run the Script. Do I need to change the file extension?
fogive me as I am new to exchange 2007
Saltrock
You need to run this from within the Exchange Management shell and just run the script using something like .\whitelistgui.ps1
Cheers
Glen
This is truly excellent. Just what I needed. Thanks for your generosity!
-John S
Great script. thanks for your efforts.
Thanks heaps - worked a treat!
What an awesome script..many thanks for sharing!! E2K7 script of the year 2009!
Thank YOU for this script!!
(rant mode: please wear fireproof vest)
How come MS could not even think that we need to continually add to whitelist??? sheesh....
Love it! Thanks
Thanks amazing!
One question:
I try to update manually and easily this list.
EX:
*Adding a mail address
C:\Script>Set-ContentFilterConfig -Bypassedsenders badspam@bad.org
*Results
C:\Script>Get-ContentFilterConfig | select BypassedSenders
BypassedSenders
---------------
{badspam@bad.org}
*Now through a list (whitelist.txt)
stupid@dumb.org
smart@dumb.org
C:\Script>Set-ContentFilterConfig -Bypassedsenders (get-content whitelist.txt)
*Results
BypassedSenders
---------------
{smart@dumb.org, stupid@dumb.org}
*We can see that this erased badspam@bad.org...
How can i do it to update progressivly ? such as a ">>" thing.
Any Idea?
Thanks
Fabien
Damnit Glen, You Rock!!!
// T
Huzzah! made my day. Thankyou!
Hello
Can't install script, message = not signed script forbiden to install, how can i solve it? thanks in advance
Have a look at http://technet.microsoft.com/en-us/library/dd347649.aspx you need to either sign the script or change you default execution policy
cheers
Glen
Wow, just found this and it's totally rad. Thank you kindly! Really makes the process more simple.
I love you.
Post a Comment