[Last Call] Learn about multicloud storage options and how to improve your company's cloud strategy. Register Now

x
?
Solved

Loop Question for Powershell Script

Posted on 2013-06-26
4
Medium Priority
?
534 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
[X]
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
  • 2
4 Comments
 
LVL 71

Accepted Solution

by:
Qlemo earned 2000 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:Meir Rivkin
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 71

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

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

Question has a verified solution.

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

This article will help you understand what HashTables are and how to use them in PowerShell.
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 …
Exchange organizations may use the Journaling Agent of the Transport Service to archive messages going through Exchange. However, if the Transport Service is integrated with some email content management application (such as an antispam), the admini…
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…

650 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