Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 562
  • Last Modified:

Windows Powershell Script - Exchange 2007

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
RKEE2008
Asked:
RKEE2008
  • 3
  • 3
  • 2
2 Solutions
 
endital1097Commented:
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
 
RKEE2008Author Commented:
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
 
endital1097Commented:
you got it
0
Microsoft Certification Exam 74-409

VeeamĀ® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

 
soostibiCommented:
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
 
soostibiCommented:
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
 
RKEE2008Author Commented:
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
 
endital1097Commented:
that's why i like to use the case statement, it is more dynamic
0
 
RKEE2008Author Commented:
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

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

  • 3
  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now