как разрешить ручной или автоматический выбор в powershell? - PullRequest
2 голосов
/ 02 сентября 2011

Я пишу сценарий, в котором я хочу, чтобы пользователи либо вводили данные на сервере вручную, либо они могли бы предоставить список серверов, скажем, c: \ temp \ servers.txt.

Единственная проблема в том, что я понятия не имею, как мне это сделать - то есть я знаю, что мог бы предложить пользователю ввести ниже - но я бы хотел, чтобы у них был выбор кнопки или что-то еще - возможно, они могут ввести ручной сервер или путь, а затем PowerShell выясняет, что это?

Есть идеи, как мне это обойти?

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

Спасибо

Ответы [ 4 ]

3 голосов
/ 02 сентября 2011

Посмотрите на PromptForChoice метод.В интернете много ресурсов.Например, http://scriptolog.blogspot.com/2007/09/make-choice.html от @ Shay.

Сначала вы должны показать подсказку для выбора (вот где вы звоните PromptForChoice), а затем обработать запрос пользователя (посмотрите на переключатель на странице выше).).

В основном пример кода может быть:

$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
}
2 голосов
/ 02 сентября 2011

Вот еще одно решение, предоставленное расширенными функциями.Поместите следующий код в serv.ps1

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

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

Когда вы вызываете его без аргументов, он предлагает вам:

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

Для получения дополнительной информации о доступных параметрах:

Get-Help about_Functions_Advanced
1 голос
/ 02 сентября 2011

Вы также можете просто написать скрипт, который просит пользователей ввести серверы как часть скрипта. Затем попробуйте проверить, является ли введенный текст файловым путем. Если это так, то получите контент и обработайте его как список серверов. В противном случае проанализируйте введенный текст - например, давайте предположим, что имена отдельных серверов будут разделены пробелом.

Тогда скрипт будет выглядеть так:

#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

Надеюсь, это поможет.

0 голосов
/ 02 сентября 2011

Эта ссылка мне очень помогла и использует очень знакомое приглашение типа vbscript:

http://gallery.technet.microsoft.com/scriptcenter/1a386b01-b1b8-4ac2-926c-a4986ac94fed

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...