Большая часть самых мощных инструментов Windows — это средства командной строки и написания сценариев. Однако многие администраторы ими не пользуются. Почему? Потому что непросто отыскать информацию о том, как их применять. В данной статье я продемонстрирую два простых способа выяснить, как работают объекты. NET и их методы и как их применять со средствами PowerShell.
Краткий обзор
Мы уже имеем представление о методах и их синтаксисе. Например, в статье «Использование объектных методов PowerShell» (опубликована в Windows IT Pro/RE № 7 за 2015 год) было показано, как с помощью метода AddDays команда Get-Date позволяет узнать дату, отстоящую на 2000 дней от настоящего момента:
(get-date).AddDays (2000)
У объектов PowerShell имеются методы. Кроме того, есть действия, которые можно с ними производить. Синтаксис выглядит следующим образом:
объект.имя метода (аргумент-передаваемый-методу)
Многим методам аргументы не нужны, но и в этом случае должны стоять круглые скобки, например:
(get-date).IsDaylightSavingTime ()
Методы объекта можно увидеть с помощью Get-Member, например:
(get-date) | get-member -MemberType Method.
В предыдущей статье мы пошли дальше и создали объект, наделяющий компьютер способностью говорить посредством. NET класса по имени SpeechSynthesizer:
Add-Type -AssemblyName System.speech $talker = New-Object System.Speech.Synthesis.SpeechSynthesizer $talker.speak (“hello there”)
В ответ на запрос о существующих методах
$talker | get-method -MemberType Method
выдается довольно скудная информация. Потенциально полезными представляются некоторые методы, такие как Speak, SpeakAsync, SetOutputToWaveFile, SetOutputToDefaultAudioDevice, SelectVoice, SelectVoiceByHints и GetInstalledVoices. Но как узнать больше, например, о SetOutputToWaveFile?
Список свойств
Первый способ предусматривает вывод списка свойств. Вводим просто имя метода без круглых скобок и получаем результат:
PS C:\> $talker.SetOutputToWaveFile OverloadDefinitions —————————- void SetOutputToWaveFile (string path) void SetOutputToWaveFile (string path, System.Speech. AudioFormat.SpeechAudioFormatInfo formatInfo)
Эта информация дает важные ориентиры, так как позволяет узнать, какие виды данных требует метод, а также имя, назначенное программистом этим входным данным. Итак, string — это тип требуемых данных, а path — имя, назначенное программистом. Вооружившись этим знанием, можно догадаться, что для правильного функционирования метода требуется полное описание файла (путь и имя). Существует два способа вызова этого метода: с указанием только пути либо с указанием пути и данных некоторого вида, определяющих кодирование звука (например, дискретизация, алгоритм сжатия). Попробуем указать просто описание файла:
$talker.SetOutputToWaveFile ("C:\scripts\test2.wav")
Если после этого ввести несколько команд $talker.speak (произвольный текст), Windows создаст файл Test2.wav, заполняя его вводимыми речевыми сообщениями.
Таким образом, можно создавать файлы WAV с каким угодно текстом. Для передачи речевого сообщения на динамик воспользуемся методом SetOutputToDefaultAudioDevice. Какой тип аргументов требуется для этого метода? Вводим $talker.SetOutputToDefaultAudioDevice, нажимаем Enter и получаем только одно описание свойства:
void SetOutputToDefaultAudioDevice ()
В скобках ничего нет, поэтому достаточно набрать следующее:
$talker.SetOutputToDefaultAudioDevice ()
Начиная с этого момента речь будет звучать из динамика.
Изучение документации разработчика
В предыдущей статье мы рассматривали метод GetInstalledVoices. Запрос $talker.GetInstalledVoices без круглых скобок возвращает два свойства: пару круглых скобок и cultureinfo. Что такое cultureinfo? Чтобы это выяснить, можно воспользоваться другим методом: прочитать документацию разработчика.
Зная имя. NET класса SpeechSynthesizer, можно набрать в поисковой строке Google «Windows SpeechSynthesizer class». Это приведет нас на страницу MSDN «SpeechSynthesizer — класс», где есть ссылка SpeechSynthesizer Methods, по которой открывается таблица методов, где, помимо прочего, предусмотрен GetInstalledVoices — метод (CultureInfo).
Страница начинается с заметок, в которых предлагаются примеры cultureinfo, в частности en-US. Это сокращение нам уже знакомо. В моей системе Windows 8.1 установлено два американских голоса и один британский, поэтому я ввожу следующее:
$talker.GetInstalledVoices ("en-gb").voiceinfo.name
Просмотрев предыдущую статью, вы вспомните, почему в конце стоит. voiceinfo.name. Эта команда возвращает лишь один голос: Microsoft Hazel.
Итак, мы узнали два основных способа извлечения полезных сведений о применении методов из большого объема неупорядоченной информации, а именно: вывод списка свойств и изучение документации MSDN. Однако нельзя не упомянуть и об основном методе, доступном каждому: простом поиске в Google.