2

I am writing a script where I want the users to either enter in a manual server or they could supply a list of servers from say c:\temp\servers.txt.

Only problem is that I have no idea how I make this happen - ie I know I could prompt the user to enter in the below - but I would like them to have a button choice or something - maybe they can type in a manual server or a path and then powershell figures out which is which?

Any idea how I go around this?

Read-Host "Do you wish to enter in a manual computer or list of computers? "

Thanks,

3 Answers 3

3

Look at PromptForChoice method. There are many resources on Internet. E.g. http://scriptolog.blogspot.com/2007/09/make-choice.html by @Shay.

First you have to show a prompt for choice (that's where you call PromptForChoice) and then process the user request (look at the switch at the page above).

Basically some sample code could be:

$choices = [Management.Automation.Host.ChoiceDescription[]] ( `
      (new-Object Management.Automation.Host.ChoiceDescription "&List","List of servers"),
      (new-Object Management.Automation.Host.ChoiceDescription "&One","One server"));
$answer = $host.ui.PromptForChoice("MicroTools","Run MicroTools?",$choices,0)
if ($answer -eq 0) {
  # get list of servers
} else {
  # get one server
}
Sign up to request clarification or add additional context in comments.

Comments

2

Here is another solution given by advanced functions. Put the following code into serv.ps1

param ([Parameter(mandatory=$true)]$Servers)

foreach($server in $Servers)
{
  Write-Host $Server
}

When you call it with no arguments it prompt you :

PS C:\temp> .\serv.ps1

applet de commande serv.ps1 à la position 1 du pipeline de la commande
Fournissez des valeurs pour les paramètres suivants :
Servers: Mach1
Mach1

For more informations about available parameters :

Get-Help about_Functions_Advanced

Comments

1

You can also simply write a script that asks users to enter the servers as part of the script. Then try to check if the entered text is a filepath. If so, then get the content and treat that as a list of servers. Otherwise parse the entered text - for example let's assume the individual server names will be space separated.

The script would then look like this:

#Ask for servers (either space separated or file path)
write-host -noNewLine "Enter servers: "
$answer = read-host

#Process answer
if ($answer -eq $null)
{
    write-host -foregroundColor Red "Error: You have to specify servers."
    exit
}

if (Test-Path $answer)
{
    $servers = get-content $answer
}
else
{
    $servers = $answer.Split(" ")
}

#Print results
write-host "Result:"
$servers

Hope it helps.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.