На самом деле, технически правильнее было бы назвать статью — «Методы объекта System.Management.Automation.Internal.Host.InternalHost, содержащегося в автоматической переменной $Host», но в этом случае название получилось бы более громоздким и менее понятным, так что оставим его как оно есть.
Другие статьи серии:
Методы переменной $Host. Часть 2.
Методы переменной $Host. Часть 3.
Автоматическая переменная $host содержит в себе объект типа System.Management.Automation.Internal.Host.InternalHost, представляющий текущее приложение Windows PowerShell.
Этот объект обладает некоторыми свойствами, например:
$Host.Name – имя приложения, ConsoleHost – для консоли Windows PowerShell, Windows PowerShell ISE Host – для ISE
$Host.Version – версия Windows PowerShell
$Host.CurrentCulture – текущие языковые настройки
$Host.CurrentUICulture – языковые параметры интерфейса
$Host.PrivateData — набор цветовых настроек, применяемых при отображении различных сообщений, таких как сообщения об ошибках — Error, отладочные сообщения – Debug, или отображение прогресса выполнения какой-либо задачи – Progress.
$Host.UI.RawUI – набор настроек окна консоли, таких как цвет консоли и текста, размер и положение окна консоли, а также заголовок окна.
Многие из этих свойств можно изменить.
Допустим, чтобы изменить заголовок окна консоли Windows PowerShell, нужно задать новое значение свойству $Host.UI.RawUI.WindowTitle.
Кроме свойств, объект обладает набором методов. Мы рассмотрим работу некоторых из них.
Вторая часть, где рассматривается метод PromptForChoice находится здесь.
$Host.UI.Prompt
Этот метод позволяет нам запросить необходимую информацию у пользователя и представляет ее в виде объекта Dictionary: System.Collections.Generic.Dictionary.
Как мы видим из скриншота, метод требует следующие параметры: строку заголовка – caption, строку сообщения – message, и коллекцию объектов типа System.Management.Automation.Host.FieldDescription.
Создадим объект коллекции и сохраним его в переменной $FieldDescriptionCollection. Обратите внимание, что вся команда — это одна строка.
$FieldDescriptionCollection = New-Object -TypeName System.Collections.ObjectModel.Collection[System.Management.Automation.Host.FieldDescription]
Запросив значение переменной $FieldDescriptionCollection, мы видим, что коллекция пока пустая.
Воспользовавшись командлетом Get-Member, мы узнаем, какими свойствами и методами обладает объект коллекции.
Get-Member -InputObject $FieldDescriptionCollection
Почему мы воспользовались этой формой командлета Get-Member, а не передали переменную $FieldDescriptionCollection по конвейеру, например, так: $FieldDescriptionCollection | Get-Member.
Потому что в этом случае командлет Get-Member показал бы нам свойства и методы объектов, входящих в эту коллекцию, а не самого объекта коллекции. Кроме того, в нашем случае, так как коллекция еще пустая, эта команда вернула бы нам сообщение об ошибке.
В списке доступных методов мы можем заметить метод Add. Он нам и нужен.
Как видно из вывода, в качестве параметра метод требует объект типа System.Management.Automation.Host.FieldDescription.
Создадим его при помощи следующей команды.
$FieldDescriptionOne = New-Object -TypeName System.Management.Automation.Host.FieldDescription(«Parameter_1»)
Для отображения созданного нами объекта запросим содержимое переменной $FieldDescriptionOne.
Создадим еще один объект System.Management.Automation.Host.FieldDescription.
$FieldDescriptionTwo = New-Object -TypeName System.Management.Automation.Host.FieldDescription(«Parameter_2»)
Добавим созданные нами объекты в коллекцию.
$FieldDescriptionCollection.Add($FieldDescriptionOne)
$FieldDescriptionCollection.Add($FieldDescriptionTwo)
Запросив переменную $FieldDescriptionCollection, мы увидим, что она содержит два объекта.
Теперь мы можем воспользоваться методом $Host.UI.Prompt.
В качестве параметров зададим заголовок окна, текст сообщения и созданную нами коллекцию объектов FieldDescription.
$Host.UI.Prompt(«Enter Data»,»Specify Information:»,$FieldDescriptionCollection)
Мы можем сохранить вывод этого метода в переменной для дальнейшего использования.
$PromptResults = $Host.UI.Prompt(«Enter Data»,»Specify Information:»,$FieldDescriptionCollection)
Запросив значение переменной $PromptResults мы получим названия параметров и указанные нами значения.
Передав содержимое переменной $PromptResults командлету Get-Member, мы получим название типа объекта, возвращаемого методом Prompt — System.Collections.Generic.Dictionary, а также его свойства и методы.
Страницы в социальных сетях:
Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell