Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

Loop Question for Powershell Script

Posted on 2013-06-26
4
529 Views
Last Modified: 2013-06-26
Hello, I am new to powershell and have been working on a code but am running into a road block.  What I would like to do is have the code go back to the top and ask for the username again to run the process over if needed.  After it runs set-mailbox -identity $username -CustomAttribute I need it to go back to the top and ask for the username again without reloading the Exchange Module again.

Here is the code:

#...Load Exchange Module into Powershell Session
$s = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://NAMEOFEXCHANGESERVER.COM/PowerShell/ -

Authentication Kerberos
Import-PSSession $s

#...Ask for Username
$username=Read-Host 'Username'

#...Display Custom Attributes
Get-Mailbox -Identity "$username" | Format-List 

CustomAttribute2,CustomAttribute3,CustomAttribute4,CustomAttribute5,CustomAttribute6

#...Display Menu
Do {
Write-Host "
----------Custom Attribute Change---------
1 = Change Attribute 2
2 = Change Attribute 3
3 = Change Attribute 4
4 = Change Attribute 5
5 = Change Attribute 6
----------------------___-----------------"
$choice1 = read-host -prompt "Select number & press enter"
} until ($choice1 -eq "1" -or $choice1 -eq "2" -or $choice1 -eq "3" -or $choice1 -eq "4" -or $choice1 -eq "5" -or $choice1 -eq "6")

#...Menu Selection Actions
Switch ($choice1) {
"1" {$att2= Read-Host 'New Attribute2:'
set-mailbox -identity $username -CustomAttribute2 $att2}
"2" {$att3= Read-Host 'New Attribute3:'
set-mailbox -identity $username -CustomAttribute3 $att3}
"3" {$att4= Read-Host 'New Attribute4:'
set-mailbox -identity $username -CustomAttribute4 $att4}
"4" {$att5= Read-Host 'New Attribute5:'
set-mailbox -identity $username -CustomAttribute5 $att5}
"5" {$att6= Read-Host 'New Attribute6:'
set-mailbox -identity $username -CustomAttribute6 $att6
}
}

Open in new window

0
Comment
Question by:Sedgwick_County
  • 2
4 Comments
 
LVL 69

Accepted Solution

by:
Qlemo earned 500 total points
ID: 39278718
Just run it in a endless loop. If you need to "jump" to the beginning again, execute continue.
Please use proper indents to make the code more readable.
You allowed "6" as input, though that is not used anywhere. You'll see that I've simplified the menu check, and added "9" for exit.
#...Load Exchange Module into Powershell Session
$s = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://NAMEOFEXCHANGESERVER.COM/PowerShell/ -Authentication Kerberos
Import-PSSession $s

:endless while ($true) {
  #...Ask for Username
  $username=Read-Host 'Username'

  #...Display Custom Attributes
  Get-Mailbox -Identity "$username" | Format-List 

  CustomAttribute2,CustomAttribute3,CustomAttribute4,CustomAttribute5,CustomAttribute6

  #...Display Menu
  Do {
    Write-Host "
----------Custom Attribute Change---------
1 = Change Attribute 2
2 = Change Attribute 3
3 = Change Attribute 4
4 = Change Attribute 5
5 = Change Attribute 6
9 = Exit
----------------------___-----------------"
    $choice1 = read-host -prompt "Select number & press enter"
  } until ($choice1 -like "[1-59]")

  #...Menu Selection Actions
  Switch ($choice1) {
    "1" {$att2= Read-Host 'New Attribute2:'; set-mailbox -identity $username -CustomAttribute2 $att2}
    "2" {$att3= Read-Host 'New Attribute3:'; set-mailbox -identity $username -CustomAttribute3 $att3}
    "3" {$att4= Read-Host 'New Attribute4:'; set-mailbox -identity $username -CustomAttribute4 $att4}
    "4" {$att5= Read-Host 'New Attribute5:'; set-mailbox -identity $username -CustomAttribute5 $att5}
    "5" {$att6= Read-Host 'New Attribute6:'; set-mailbox -identity $username -CustomAttribute6 $att6}
    "9" {break endless}
  }
}

Open in new window

0
 
LVL 42

Expert Comment

by:sedgwick
ID: 39278720
#...Load Exchange Module into Powershell Session
$s = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://NAMEOFEXCHANGESERVER.COM/PowerShell/ -

Authentication Kerberos
Import-PSSession $s
Do {

#...Ask for Username
$username=Read-Host 'Type Username (Enter to exit)'

#...Display Custom Attributes
Get-Mailbox -Identity "$username" | Format-List 

CustomAttribute2,CustomAttribute3,CustomAttribute4,CustomAttribute5,CustomAttribute6

#...Display Menu
Do {
Write-Host "
----------Custom Attribute Change---------
1 = Change Attribute 2
2 = Change Attribute 3
3 = Change Attribute 4
4 = Change Attribute 5
5 = Change Attribute 6
----------------------___-----------------"
$choice1 = read-host -prompt "Select number & press enter"
} until ($choice1 -eq "1" -or $choice1 -eq "2" -or $choice1 -eq "3" -or $choice1 -eq "4" -or $choice1 -eq "5" -or $choice1 -eq "6")

#...Menu Selection Actions
Switch ($choice1) {
"1" {$att2= Read-Host 'New Attribute2:'
set-mailbox -identity $username -CustomAttribute2 $att2}
"2" {$att3= Read-Host 'New Attribute3:'
set-mailbox -identity $username -CustomAttribute3 $att3}
"3" {$att4= Read-Host 'New Attribute4:'
set-mailbox -identity $username -CustomAttribute4 $att4}
"4" {$att5= Read-Host 'New Attribute5:'
set-mailbox -identity $username -CustomAttribute5 $att5}
"5" {$att6= Read-Host 'New Attribute6:'
set-mailbox -identity $username -CustomAttribute6 $att6
}
}
} until ($username -ne '')

Open in new window

0
 
LVL 69

Expert Comment

by:Qlemo
ID: 39278761
sedgwick,

The outer DO loop needs to include the read-host of $username, else it does not work and is not as intended ;-). In addition, the end criterion has not been defined yet, but I guess an empty username is a valid one.
0
 
LVL 40

Expert Comment

by:Subsun
ID: 39278773
All above codes will work.. IMO, You can ask a question at the end of each mailbox edit process to exit or continue before you go back to the 'Type Username' question..

For example..
#...Load Exchange Module into Powershell Session
$s = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://NAMEOFEXCHANGESERVER.COM/PowerShell/ -

Authentication Kerberos
Import-PSSession $s

Do {

#Add rest of the code here for processing

$Exitcode = Read-Host "Type 0 & press Enter to exit or Enter to Continue"
} Until ($Exitcode -eq 0)

Open in new window

0

Featured Post

Netscaler Common Configuration How To guides

If you use NetScaler you will want to see these guides. The NetScaler How To Guides show administrators how to get NetScaler up and configured by providing instructions for common scenarios and some not so common ones.

Question has a verified solution.

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

How to sign a powershell script so you can prevent tampering, and only allow users to run authorised Powershell scripts
The Nano Server Image Builder helps you create a custom Nano Server image and bootable USB media with the aid of a graphical interface. Based on the inputs you provide, it generates images for deployment and creates reusable PowerShell scripts that …
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

808 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