Создаем сценарий управления квотами

Одно из преимуществ макропрограммирования заключается в том, что оно позволяет запускать функции операционной системы недостижимыми с помощью графических инструментов способами. Возьмем для примера дисковые квоты. В Windows 2000 появилась возможность устанавливать дисковые квоты для файловой системы NTFS. Это отличная функция за исключением одного недостатка: квоты назначаются на основе пользовательского имени, а не на основе членства в группах. Это ограничение усложняет обслуживание дисковых квот — приходится создавать и удалять квоты для индивидуальных пользователей; кроме того, нельзя управлять квотами для групп пользователей. Если учетных записей достаточно много, управлять ими становится нелегко. Однако это ограничение можно обойти, используя макропрограммирование.

Сценарий groupquota.vbs, который я для этого написала (см. листинг 1), создает записи дисковых квот для пользователей согласно их текущей принадлежности к группам. Это решение демонстрирует превосходство над графическим интерфейсом, но имеет и ряд ограничений. Например, несмотря на то что в процессе работы сценарий запрашивает текущее членство в группах, он не может отражать изменения в составе групп. Если кто-то удаляется из группы или добавляется в нее, это изменение не отражается автоматически на распределении дисковых квот. Хотя groupquota.vbs не является сложным средством управления дисковыми квотами, сценарий позволяет упростить управление дисковыми квотами Windows с помощью ограниченного набора инструментов. В этой статье я покажу, как выполнять некоторые действия над всеми членами группы, устанавливать дисковые квоты для компьютера и применять новые параметры квот на основе принадлежности к группам.

Внимание: если установить и ввести в действие дисковую квоту для пользователя, который уже превысил квоту на данном диске, такой пользователь не сможет выполнять запись на этот диск — даже временные файлы. Будьте очень осмотрительны при использовании сценария.

Выбор группы и составление списка членов

Первая часть groupquota.vbs может пригодиться при любом действии, которое необходимо выполнить над всеми членами группы пользователей, организационной единицы (OU) или домена в Active Directory (AD). Сценарии, которые я пишу для этой рубрики, в основном имеют дело с учетными записями пользователей или компьютеров, поэтому они плохо подходят для данной ситуации — мы хотим работать с группами, а не с индивидуальными учетными записями. Кроме того, я не хотела запускать этот сценарий как сценарий для регистрации в системе; мне хотелось один раз настроить дисковые квоты для членов группы файлового сервера или другого компьютера общего использования и потом забыть об этом. Таким образом, в процессе работы сценарий подключается к определенной группе в конкретном домене, затем выполняет ряд команд для каждого члена этой группы.

Я могла бы жестко зафиксировать в сценарии имя домена и название группы, но этот подход неуместен. Напротив, я оставляю администратору, исполняющему данный сценарий, возможность ввода в виде аргументов имени группы и буквы диска, для которых он хочет настроить дисковые квоты.

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

groupquota.vbs group x:

где group — это название группы, к которой требуется подключиться, а x — буква, представляющая диск, на котором следует задать квоты. Если название группы содержит пробелы, необходимо заключить его в кавычки.

Для извлечения информации о названии группы и букве диска сценарий использует свойство Arguments объекта WScript, который является корневым объектом Windows Script Host (WSH). Затем сценарий присваивает эти значения переменным sGroup и sDrive соответственно.

Имя домена сценарий получает от компьютера, на котором исполняется сценарий. Как показано в метке A листинга 1, сценарий создает экземпляр объекта WSH WshNetwork, затем использует свойство UserDomain этого объекта для извлечения имени домена. Поскольку мы можем задействовать объект дисковой квоты только на локальном, а не на удаленном компьютере, сценарий получает правильное имя домена.

Настройка дисковых квот

Разобравшись с членством в группах данного пользователя, можно запустить программу настройки дисковых квот. Для работы с любым свойством дисковых квот — будь то персональная настройка квот, перечень свойств квот и даже проверка, включены ли квоты, — используется объект DiskQuotaControl, создающий своего рода прототип дисковой квоты. После того как в нашем распоряжении появилась настраиваемая дисковая квота, метод Initialize объекта DiskQuotaControl позволяет указать диск, к которому требуется применить квоты, и подключиться к системе квотирования этого диска. Если планируется настроить квоты более чем для одного диска, необходимо инициировать подключение для каждого диска индивидуально. Windows управляет дисковыми квотами для каждого диска отдельно, и мы можем работать с подключением только к одной букве диска в данный момент. Например, если ввести аргумент командной строки C:, то код листинга в метке B инициирует подключение к диску C. Значение True разрешает подключение для доступа с правами чтения/записи.

Далее требуется включить дисковые квоты — они отключены по умолчанию, в чем можно убедиться, если вывести на экран значение свойства QuotaState объекта DiskQuotaControl. В таблице перечислены возможные значения свойства QuotaState. Для включения квот и установления ограничений нужно сделать значение QuotaState равным 2, как показано в листинге 1 в метке C.

В процессе настройки параметров квотирования по умолчанию можно также предусмотреть включение записи в журнал событий и отправку предупреждений при достижении пороговых значений. Для этого следует использовать свойства LogQuotaLimit и LogQuotaThreshold объекта DiskQuotaControl.

Создание записи о квоте

Создать запись о квоте очень просто. После инициализации подключения с правами чтения/записи groupquota.vbs использует метод AddUser объекта DiskQuotaControl. Как видно из метки D листинга 1, этому методу нужен только один аргумент: имя того пользователя, для которого устанавливается квота. В данном случае имя пользователя содержит переменная sUsername. Затем сценарий находит квоту нового пользователя — даже если дисковая квота только что создана, необходимо еще найти ее — и задает предупреждение и значение квоты.

Расширяя сценарий

Groupquota.vbs — это удобный автоматизированный интерфейс, который позволяет настраивать дисковые квоты сразу для многих пользователей на основе их принадлежности к группе. Этот сценарий можно дополнить. Например, вы могли бы расширить сценарий и считывать список групп домена, затем использовать команду VBScript Select Case, создавая дисковые квоты для каждой группы. Кроме того, можно проверить диски системы и настроить квоты сразу на нескольких дисках. Так или иначе, главное — возможность задействовать макропрограммирование для настройки Windows на выполнение задач — в данном случае для настройки дисковых квот для групп, — которые невозможно выполнить через графический интерфейс.

Криста Андерсон — независимый автор и консультант журнала Windows NT Magazine. С ней можно связаться по адресу: candersn@adelphia.net