Большая часть самых мощных инструментов 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.