Методы переменной $Host. Часть 2.

В этой статье мы рассмотрим метод PromptForChoice объекта System.Management.Automation.Internal.Host.InternalHostUserInterface, содержащегося в свойстве UI объекта System.Management.Automation.Internal.Host.InternalHost, находящегося в переменной $Host. Вот таким непростым способом мы указали метод, вызываемый посредством команды $Host.UI.PromptForChoice().

Другие статьи серии:
Методы переменной $Host. Часть 1.
Методы переменной $Host. Часть 3.

Первую часть, где рассматривается метод $Host.UI.Prompt, можно найти по здесь.

$Host.UI.PromptForChoice

Метод дает нам возможность сделать выбор. Причем мы можем его использовать как для выбора одного из нескольких вариантов, так и для выбора нескольких вариантов из предложенного списка.

Сначала рассмотрим выбор одного варианта.

Если мы введем следующую команду

$host.ui.PromptForChoice

мы увидим, что метод PromptForChoice требует в качестве входных данных.

01

Итак, нам нужно указать заголовок – caption, сообщение – message, коллекцию объектов [System.Management.Automation.Host.ChoiceDescription], и вариант по умолчанию.

Так как все остальное мы можем указать непосредственно при вызове метода, начнем с создания коллекции. Создадим мы ее при помощи следующей команды.

$ChoiceDescriptionCollection=New-Object -TypeName System.Collections.ObjectModel.Collection[System.Management.Automation.Host.ChoiceDescription]

02

Как мы видим, это коллекция

 03

и пока что она пустая.

 04

Объект коллекции обладаем методом Add, при помощи которого мы может добавить нужные объекты в коллекцию.

 05

В качестве параметра метода Add нам нужно указать объект типа System.Management.Automation.Host.ChoiceDescription.

Создадим нужное нам количество этих объектов.

Описание конструктора для класса System.Management.Automation.Host.ChoiceDescription  мы можем найти на сайте MSDN.

Создадим первый вариант выбора.

$ChoiceDescriptionYes = New-Object -TypeName System.Management.Automation.Host.ChoiceDescription(«&Yes»,»Согласен»)

06

В качестве первого параметра мы указываем вариант выбора. Знак “&” ставится перед символом, который будет использован в качестве значения при выборе нужного варианта. Второй параметр содержит справочную информацию.

 07

Как мы видим переменная $ChoiceDescriptionYes содержит введенную нами информацию, и находящийся в ней объект – это объект типа System.Management.Automation.Host.ChoiceDescription.

Создадим еще два варианта выбора.

$ChoiceDescriptionNo = New-Object -TypeName System.Management.Automation.Host.ChoiceDescription(«&No»,»Не согласен»)

$ChoiceDescriptionIdontKnow = New-Object -TypeName System.Management.Automation.Host.ChoiceDescription(«I &don’t now»,»Я не знаю»)

 08

09

Теперь добавим созданные нами объекты в коллекцию.

$ChoiceDescriptionCollection.Add($ChoiceDescriptionYes)

$ChoiceDescriptionCollection.Add($ChoiceDescriptionNo)

$ChoiceDescriptionCollection.Add($ChoiceDescriptionIdontKnow)

10

 

Теперь, когда у нас есть коллекция объектов System.Management.Automation.Host.ChoiceDescription, мы можем вызвать метод $Host.UI.PromptForChoice().

$Host.UI.PromptForChoice(«Make a choice»,»Choose one of the specified variants:»,$ChoiceDescriptionCollection,2)

11

В качестве заголовка мы указали «Make a choice», в качестве сообщения — «Choose one of the specified variants:», третьим параметром становится переменная, содержащая варианты выбора, последним указывается вариант по умолчанию. Так как его нумерация начинается с нуля, в данном вариантом по умолчанию будет третий пункт.

12

Метод возвращает нам номер выбранного пункта, начиная с 0. То есть, если мы выберем первый вариант, метод вернет нам значение 1, если второй – значение 2 и так далее.

Теперь, когда мы сделали все наиболее длинным способом, давайте рассмотрим варианты, как можно несколько упростить процедуру подготовки вариантов выбора.

На самом деле нам вовсе не обязательно создавать объект коллекции. Вместо него мы может использовать массив, состоящий из объектов System.Management.Automation.Host.ChoiceDescription.

Создав объекты ChoiceDescription,

$ChoiceDescriptionYes = New-Object -TypeName System.Management.Automation.Host.ChoiceDescription(«&Yes»,»Согласен»)

$ChoiceDescriptionNo = New-Object -TypeName System.Management.Automation.Host.ChoiceDescription(«&No»,»Не согласен»)

$ChoiceDescriptionIdontKnow = New-Object -TypeName System.Management.Automation.Host.ChoiceDescription(«I &don’t now»,»Я не знаю»)

 мы можем добавить из в массив. Например, так.

[System.Management.Automation.Host.ChoiceDescription[]]$ChoiceDescriptionArray1 = $ChoiceDescriptionYes, $ChoiceDescriptionNo, $ChoiceDescriptionIdontKnow

 13

В этом примере мы задаем тип данных переменной $ChoiceDescriptionArray1 как массив объектов System.Management.Automation.Host.ChoiceDescription.

Мы также можем задать массив следующим способом:

$ChoiceDescriptionArray2 = [System.Management.Automation.Host.ChoiceDescription[]]($ChoiceDescriptionYes, $ChoiceDescriptionNo, $ChoiceDescriptionIdontKnow)

 14

В данном случае мы не ограничиваем переменную $ChoiceDescriptionArray2 в типе данных, которые она может содержать, как мы это делали в предыдущем случае, а задаем тип данных для указываемого значения.

Если мы посмотрим на тип данных, содержащихся в переменных массива, то увидим, что это массив объектов ChoiceDescription.

15

16

Но даже это не является обязательным. Мы можем просто задать массив, без указания типов данных.

$ChoiceDescriptionArray3 = $ChoiceDescriptionYes, $ChoiceDescriptionNo, $ChoiceDescriptionIdontKnow

 17

18

В этом случае тип содержимого массива будет указан как System.Object[], однако это никак не помешает нам использовать переменную в качестве аргумента метода PromptForChoice.

19

Теперь давайте рассмотрим выбор использование метода PromptForChoice для выбора нескольких вариантов.

Отличие заключается в том, что для того, чтобы метод предоставил возможность выбора нескольких вариантов, его четвертый параметр – defaultChoice должен представлять из себя массив, даже если он содержит всего одно значение.

[int[]]$defaultChoices = 1

20

Теперь, если мы вызовем метод PromptForChoice, у нас будет возможность выбрать несколько значений.

$Host.UI.PromptForChoice(«Make a choice»,»Choose one of the specified variants:»,$ChoiceDescriptionCollection,$defaultChoices)

 21

В этом случае метод вернет нам коллекцию, содержащую номера выбранных значений.

23

24

25


Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s