Solved

Windows Powershell Script - Exchange 2007

Posted on 2010-08-17
8
548 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
ID: 33454677
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
ID: 33454828
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
ID: 33454842
you got it
0
Problems using Powershell and Active Directory?

Managing Active Directory does not always have to be complicated.  If you are spending more time trying instead of doing, then it's time to look at something else. For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why

 
LVL 13

Assisted Solution

by:soostibi
soostibi earned 50 total points
ID: 33455066
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
 
LVL 13

Expert Comment

by:soostibi
ID: 33455078
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
ID: 33455470
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
ID: 33455508
that's why i like to use the case statement, it is more dynamic
0
 

Author Comment

by:RKEE2008
ID: 33455822
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

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article lists the top 5 free OST to PST Converter Tools. These tools save a lot of time for users when they want to convert OST to PST after their exchange server is no longer available or some other critical issue with exchange server or impor…
This article explains how to install and use the NTBackup utility that comes with Windows Server.
how to add IIS SMTP to handle application/Scanner relays into office 365.
This video discusses moving either the default database or any database to a new volume.

839 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