Совет недели (2014-03-2): Выключаем звук при старте системы

В последнее время мне на почту от посетителей блога приходит все больше предложений о рассмотрении определенных ситуаций, в которых администраторам для решения конкретной задачи могут помочь функциональные возможности групповой политики. Меня это очень радует, и я обязательно постараюсь рассмотреть в своих пятничных советах как можно больше интересных «живых» ситуаций, с которыми вы можете столкнуться во время выполнения своей работы и поддержки конечных пользователей. Сегодня я продолжу вас знакомить с решением нешаблонных задач, когда нужно либо локализовать и изменять параметры в системном реестре, либо использовать скрипты, или же искать какие-то обходные пути.

Собственно, по делу: у меня спросили, можно ли сделать так, чтобы на пользовательском компьютере при выполнении входа в систему регулировался уровень громкости динамика и на весь офис не «орали» звуки включения компьютера. Ситуация знакома всем, но ее решение, к величайшему сожалению, нельзя назвать штатным и простым. Давайте посмотрим, что нужно сделать для реализации такой задачи.

Как можно централизованно регулировать громкость динамиков

Каждый пользователь, независимо от того, если ли у него гарнитура или же он использует у себя колонки (как, кстати, любят делать многие сотрудники из различных приемных), за время рабочего дня может не один раз изменять у себя уровень громкости. Ну а если он перед уходом домой выставил себе громкость, скажем, процентов на 70, то утром все сотрудники такого кабинета однозначно услышат звуки входа в систему, что может отвлечь уже работающих. Что же можно сделать в таком случае? Можно попробовать максимально уменьшить уровень громкости на компьютерах, чтобы пользователь уже на протяжении своего рабочего времени регулировал звук так, как посчитает нужным.

Прежде всего, хотелось бы отметить, что, к величайшему сожалению, за уровень громкости системный реестр не отвечает и не существует такого параметра, который мог бы управлять уровнем издаваемых звуков. Это означает, что следует воспользоваться обходными путями, то есть обратиться к возможностям Windows PowerShell.

По изучению предоставляемых операционной системой Windows командлетов выяснится то, что командлета типа «Set-VolumeLevel» или чего-то в этом духе не существует. А это означает то, что нужно будет самостоятельно создать функцию, управляющую звуками на компьютере.

Возможно, я еще не на 100% углубился в поставленную задачу, но создать функцию с полноценным управлением уровнем громкости у меня не вышло. Далее я вам расскажу о скрипте, который можно найти на блоге «Hey, Scripting Guy! Blog» и который позволит лишь полностью отключать громкость и возвращать ее к установленному ранее значению (буду крайне признателен, если вы в комментариях исправите мой подход и подскажете, как можно усовершенствовать такой скрипт).

Для начала создается функция Set-SpeakerVolume с параметрами для переключения громкости. В данном примере это выглядит следующим образом:

Function Set-SpeakerVolume

{ Param (

[switch]$min,

[switch]$max)

Далее будет создана переменная wsSpkVol, благодаря которой будет использоваться объект WScript.Shell, отвечающий за запуск внешних приложений из самого сценария. По сути, этот объект позволит скрипту выполнять действия на основе использования полноценных операторов If/Else. Другими словами, сгенерированный скрипт сможет выполнять конкретный набор команд в том случае, если указанное в сценарии условие будет истинно, или, наоборот, какой-то альтернативный набор, если такое условие ложно. Чтобы начать использовать возможности этого объекта, нужно будет следующей строчкой нашего скрипта указать

$wshShell = new-object -com wscript.shell

Далее следует условие, которое будет выполняться для управления громкостью. Теперь, чтобы мы могли изменить (в данном случае отключить и повторно включить) звук, я предлагаю воспользоваться методом SendKeys, который эмулирует клавиатурный ввод. Получается следующее:

If ($min)

{1 | % {$wshShell.SendKeys([char]174)}}

ElseIf ($max)

{2 | % {$wshShell.SendKeys([char]175)}}

Else

{$wshShell.SendKeys([char]173)}

}

И теперь, чтобы данный сценарий отключил звук, достаточно вызвать данную команду. Иначе говоря, последней строкой скрипта будет собственно

Set-SpeakerVolume

Сценарий написан. Проверим его выполнение при помощи оснастки интегрированной среды сценариев Windows PowerShell. Как видно на следующей иллюстрации, скрипт выполнен успешно:

Рис. 1. Выполнение скрипта

Распространение скрипта на пользователей компании

После того как мы написали и протестировали скрипт, позволяющий полностью отключить звук на целевом компьютере, следует его сохранить как .ps1-файл, а затем распространить при помощи функциональных возможностей групповой политики. Другими словами, следует выполнить следующие действия:

  1. Для начала скопируйте файл со скриптом в буфер обмена;
  2. Откройте оснастку «Управление групповой политикой» (Group Policy Management) и создайте новый объект групповой политики или воспользуйтесь подготовленным ранее объектом. Например, в данном случае такой объект будет называться «Volume Control». Свяжите его с требуемым подразделением (в этом примере объект будет связан с уровнем домена), а затем откройте для него консоль редактора управления групповыми политиками;
  3. В отобразившейся консоли перейдите к узлу Конфигурация компьютера\Политики\Конфигурация Windows\Сценарии (запуск/завершение) (Computer Configuration/Windows Settings/Scripts (Startup/Shutdown)) и дважды щелкните по объекту «Автозагрузка» (Startup);
  4. Как видно на следующей иллюстрации, вам сейчас следует перейти ко вкладке «Сценарии PowerShell» (PowerShell Scripts). Здесь, чтобы добавить файл со скриптом, следует нажать на кнопку «Добавить» (Add), а в отобразившемся диалоговом окне добавления сценария нажмите на кнопку «Обзор» (Browse) и вставьте из буфера обмена в появившееся окно обзора скопированный ранее файл. В конечном счете у вас диалоговое окно параметра политики должно выглядеть следующим образом:

    Рис. 2. Диалоговое окно свойств выбранного параметра политики

  5. Все требуемые действия выполнены, можно сохранять параметр политики и < редактор управления групповыми политиками.

Как вариант, вы также можете полностью отключить звук входа в операционную систему средствами административных шаблонов. Для этого в оснастке редактора управления групповыми политиками вам нужно будет перейти к узлу Конфигурация компьютера\Политики\Административные шаблоны\Система\Вход в систему (Computer configuration\Policies\Administrative templates\System\Logon) и выбрать параметр политики «Отключить звук запуска Windows» (Turn off Windows Startup Sound), в диалоговом окне свойств которого нужно только установить переключатель на опцию «Включено» (Enabled), как показано ниже:

Рис 3. Диалоговое окно параметра политики

Остается лишь проверить, получится ли у системы выполнить требуемый скрипт. Для этого включаем звук, перезагружаем целевой компьютер и смотрим на результат. Все хорошо, звук отключен.

Заключение

В этом небольшом совете недели вы узнали о том, как можно отключить на клиентском компьютере звук при загрузке операционной системы. В принципе, я не считаю данный метод идеальным, поэтому буду искать более удобные методы и, в случае успеха, обязательно их опубликую в этой статье в качестве обновления материала. Если у вас есть какие-либо предложения по улучшению скрипта, пожалуйста, напишите в комментариях к этой статье, и мы с вами общими усилиями его усовершенствуем. Под конец мне хотелось бы напомнить, что если у вас возникают вопросы по решению какой-то конкретной задачи – пишите мне об этом через форму обратной связи, и я вам постараюсь помочь в одном из следующих советов недели. До встреч!

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)

3 комментария

  1. Дмитрий, а зачем все-таки возиться с регулировкой громкости и применять из-за этого скрипт, когда можно просто взять и отключить звук запуска Windows параметром групповой политики (Конфигурация компьютера-Политики-Административные шаблоны-Вход в систему-Отключить звук запуска Windows) ?

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
    1. Можно и так, ест-но. В принципе, тут даже важнее попробовать сделать так, чтобы звук отключился не полностью, а, скажем, чтобы было выставлено значение в 2-5%. В для того, чтобы прийти к этому рез-тату скрипт будет еще обязательно дорабатываться…

      VN:F [1.9.22_1171]
      Rating: 0 (from 0 votes)
      1. Вполне прикладная задача. У меня школьный компьютерный кабинет. Необходимо, чтобы в начале урока, когда все компьютеры включают, на всех была громкость одного определённого уровня. Иначе возникают трудности с тем, что у кого-то компьютер «орёт» на весь класс, а у кого-то громкость отключена полностью. Со старшеклассниками проще — они сами выставят, но работают и младшие классы. Учителю приходится бегать по кабинету. Так что смысл вполне есть.

        VA:F [1.9.22_1171]
        Rating: +1 (from 1 vote)

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *