Solved

Windows Powershell Script - Exchange 2007

Posted on 2010-08-17
8
544 Views
Last Modified: 2012-05-10
I'm trying to create a Windows powershell script that will hide a user's mailbox and add one or three forwarding addresses depending upon the users Office and Department as specified in AD.  I started off with three different scripts that were run manually without accounting for Office or Department.  They worked as follows:

.\expired.ps1 "username"

 foreach ($i in $args)
{Set-Mailbox $i -ForwardingAddress ExpiredAccounts1 -HiddenFromAddressListsEnabled $true}

.\expired2.ps1 "username"

foreach ($i in $args)
{Set-Mailbox $i -ForwardingAddress ExpiredAccounts2 -HiddenFromAddressListsEnabled $true}

.\expired3.ps1 "username"

foreach ($i in $args)
{Set-Mailbox $i -ForwardingAddress ExpiredAccounts3 -HiddenFromAddressListsEnabled $true}

I tried using the get-user cmdlet along with the Department and Office properties of this cmdlet to combine all three scripts as follows:

.\expiredcombined.ps1 "username"

#Start of Script
$a = get-user $i |select department
$b = get-user $i |select office

foreach ($i in $args)

{
    if (($a -match "Dept1") -and ($b -match "Office1"))
    {
    Set-Mailbox $i -ForwardingAddress ExpiredAccounts2 -HiddenFromAddressListsEnabled $true
    }
        elseif (($a -match "Dept1") -and ($b -match "Office2"))
        {
        Set-Mailbox $i -ForwardingAddress ExpiredAccounts3 -HiddenFromAddressListsEnabled $true
        }
          else  
            {
            Set-Mailbox $i -ForwardingAddress ExpiredAccounts1 -HiddenFromAddressListsEnabled $true
            }
}            

#End of Script

This would work if the user had Office1 in the Office field and Dept1 in the department field but would not run for any other scenario - the elseif and else statements would not run.  I'm a noobie to writing scripts and may be way off base so any help would be greatly appreciated.
0
Comment
Question by:RKEE2008
  • 3
  • 3
  • 2
8 Comments
 
LVL 32

Accepted Solution

by:
endital1097 earned 450 total points
Comment Utility
you want to try the formally known as case command

$a = get-user $i |select department
$b = get-user $i |select office

switch ($a)
    {
        "HR" { switch ($b)
                      {   "Branch1" { Set-Mailbox.....}
                           "Branch2" { Set-Mailbox.....}
                       }
                 }
        "IT" { switch ($b)
                   { "Branch3" { Set-Mailbox...}
                    }
 {     default { Set-Mailbox ...}
    }

it may be easier to do it off of office first, then department
0
 

Author Comment

by:RKEE2008
Comment Utility
Thanks for the quick response!  So, if I'm understanding correctly my script would look like this:

#Start of script

$a = get-user $i |select department
$b = get-user $i |select office

foreach ($i in $args)
{
    switch ($a)
    {
        "Dept"{switch($b)
                { "Office1" {Set-Mailbox $i -ForwardingAddress ExpiredAccounts2-HiddenFromAddressListsEnabled $true}
                  "Office2" {Set-Mailbox $i -ForwardingAddress ExpiredAccounts3 -HiddenFromAddressListsEnabled $true}
                 }
              }
                   
    { default {Set-Mailbox $i -ForwardingAddress ExpiredAccounts1 -HiddenFromAddressListsEnabled $true}
    }
}

#End        
0
 
LVL 32

Expert Comment

by:endital1097
Comment Utility
you got it
0
 
LVL 13

Assisted Solution

by:soostibi
soostibi earned 50 total points
Comment Utility
I do not really understan your $i variable at the beginning, it is not defined...

But I would do something like this, assuming that the $args contains the usernames:

$h = @{

       "Department1---Office1" = "emailoption1@something.com";

       "Department2---Office1" = "emailoption2@something.com";

       "Department1---Office2" = "emailoption3@something.com";

       "Department2---Office2" = "emailoption4@something.com";

     }



foreach($i in $args)

{

    $user = get-user $i

    $target = $h.("$($user.department)---$($user.office)")

    if($target) {

        set-mailbox -identity $user -ForwardingAddress () -HiddenFromAddressListsEnabled $true

    }

}

Open in new window

0
Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

 
LVL 13

Expert Comment

by:soostibi
Comment Utility
Sorry, I forgot the $target at the end.
$h = @{

       "Department1---Office1" = "emailoption1@something.com";

       "Department2---Office1" = "emailoption2@something.com";

       "Department1---Office2" = "emailoption3@something.com";

       "Department2---Office2" = "emailoption4@something.com";

     }



foreach($i in $args)

{

    $user = get-user $i

    $target = $h.("$($user.department)---$($user.office)")

    if($target) {

        set-mailbox -identity $user -ForwardingAddress $target -HiddenFromAddressListsEnabled $true

    }

}

Open in new window

0
 

Author Comment

by:RKEE2008
Comment Utility
The issue I have is instead of doing one to one mappings with Department---------Office for all possible combinations, I only have one department and two offices that require a different forwarding address.  All others should go to one default address.  How would I use the last code snipet to account for this?
0
 
LVL 32

Expert Comment

by:endital1097
Comment Utility
that's why i like to use the case statement, it is more dynamic
0
 

Author Comment

by:RKEE2008
Comment Utility
ok!!! got it!  As soostibi said, the $i variable at the begining of the script was not defined and was causing issues.  I made the following modification and all is working great!  Thanks to you both for the great suggestions.  The help is appreciated.


foreach ($i in $args)

{



$a = get-user $i

$office = $a.Office

$department = $a.Department



    switch ($department)

    {

        "Department"{switch($Office)

                { 

                    "Office1" {Set-Mailbox $i -ForwardingAddress ExpiredAccounts2 -HiddenFromAddressListsEnabled $true}

                    "Office2" {Set-Mailbox $i -ForwardingAddress ExpiredAccounts3 -HiddenFromAddressListsEnabled $true}

                }

              }

                   

        default {Set-Mailbox $i -ForwardingAddress ExpiredAccounts1 -HiddenFromAddressListsEnabled $true}

     }

}

Open in new window

0

Featured Post

Don't lose your head updating email signatures!

Do your end users still have the wrong email signature? Do email signature updates bore you or fill you with a sense of dread? You can make this a whole lot easier on yourself by trusting an Exclaimer email signature management solution. Over 50 million users do...so should you!

Join & Write a Comment

Suggested Solutions

Scam emails are a huge burden for many businesses. Spotting one is not always easy. Follow our tips to identify if an email you receive is a scam.
A procedure for exporting installed hotfix details of remote computers using powershell
To show how to create a transport rule in Exchange 2013. We show this process by using the Exchange Admin Center. Log into Exchange Admin Center.: First we need to log into the Exchange Admin Center. Navigate to the Mail Flow >> Rules tab.:  To cr…
In this fourth video of the Xpdf series, we discuss and demonstrate the PDFinfo utility, which retrieves the contents of a PDF's Info Dictionary, as well as some other information, including the page count. We show how to isolate the page count in a…

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now