В предыдущей части этого цикла мы рассмотрели, как настраивать и использовать базу данных MDT для установки Lite Touch. Например, в 16 части мы посмотрели, как использовать Deployment Workbench для добавления новых целевых компьютеров в базу, чтобы можно было изменять установку Windows 7 на основе MAC адреса или UUID каждого целевого компьютера. Делать это вручную в Deployment Workbench будет не очень сложно, однако, что, если у вас есть десятки сотен компьютеров, которые вы хотите добавить в базу данных?
Именно здесь на помощь может прийти Windows PowerShell, поскольку она позволяет писать сценарии для автоматизации утомительных задач. Хотя MDT 2010 теперь включает встроенную PowerShell поддержку, он не включает команды для работы с базой данных MDT. Но Майкл Нихаус (Michael Niehaus), разработчик MDT, создал отдельный PowerShell модуль, который вы можете использовать для добавления поддержки PowerShell для работы с базой данных MDT. В этой статье мы посмотрим, как импортировать этот модуль и использовать PowerShell для того, чтобы брать таблицы с информацией о целевых компьютерах и массово импортировать эту информацию в MDT базу данных в качестве новых элементов компьютеров.
Примечание: эта статья предполагает, что вы новичок в PowerShell с минимальным предварительным опытом работы написания сценариев PowerShell, и с небольшим опытом в программировании.
Установка модуля PowerShell для MDT
Начинаем с загрузки архивного файла модуля PowerShell под названием MDTDB.zip отсюда, или используя эту прямую ссылку. Нажимаем правой клавишей на загруженном файле, выбираем опцию Свойства (Properties) и выбираем Разблокировать (Unblock). Затем разархивируем файл MDTDB.psm1 сценария и копируем его в папку (в этом примере в папку C:\Scripts) на вашем MDT сервере.
Теперь открываем командную оболочку PowerShell и вводим Get-ExecutionPolicy, чтобы отобразить текущую политику выполнения на вашем сервере (дополнительную информацию смотрите здесь):
Рисунок 1: Просмотр текущей политики выполнения
Если текущая политика выполнения Ограничена (Restricted), сценарий MDTDB.psm1 не запуститься, поэтому используем команду Set-ExecutionPolicy Unrestricted, чтобы изменить состояние политики выполнения на Неограниченная (Unrestricted) следующим образом:
Рисунок 2: Изменение политики выполнения на неограниченную.
Теперь вводим Import-Module 'name C:\Scripts\MDTDB.psm1, чтобы добавить MDT PowerShell модуль в текущий сеанс PowerShell, как показано здесь:
Рисунок 3: Импортирование MDT PowerShell модуля.
Обратите внимание, что результат выполнения команды Import-Module выдает список всех новых команд PowerShell, которые теперь доступны нам для работы с базой MDT. Например, на рисунке выше показана команда New-MDTComputer, которую мы будем использовать позже в этой статье для добавления новых компьютеров в базу данных.
Чтобы убедиться, что модуль был импортирован, введите Get-Module, как показано здесь:
Увеличить
Рисунок 4: Проверка того, что модуль импортирован
Подключение к базе данных MDT
Теперь нам нужно подключить наш сеанс PowerShell к базе MDT. Для этого мы воспользуемся командой Connect-MDTDatabase. Чтобы посмотреть синтаксис этой команды, введите Get-Help Connect-MDTDatabase, как показано здесь:
Рисунок 5: Просмотр синтаксиса команды Connect-MDTDatabase
Подсказка: можно также найти дополнительную информацию об использовании этой команды в этом посте.
Для подключения к базе MDT под названием MDT на сервере SQL Server с именем SQLEXPRESS, установленном на сервере MDT под названием SEA-MDT-01, введите следующую команду:
Connect-MDTDatabase 'sqlServer SEA-MDT-01 'instance SQLEXPRESS 'database MDT
Увеличить
Рисунок 6: Подключение к MDT базе данных
Работа с элементами компьютера
Давайте начнем с проверки того, есть ли в нашей MDT базе записи компьютеров. Для этого мы воспользуемся командой Get-MDTComputer, поэтому давайте используем Get-Help для просмотра синтаксиса этой команды:
Увеличить
Рисунок 7: Просмотр синтаксиса команды Get-MDTComputer
Чтобы вывести список всех существующих элементов компьютеров в базе данных, просто вводим команду Get-MDTComputer следующим образом:
Увеличить
Рисунок 8: Список компьютеров в базе MDT
Команда Get-MDTComputer показывает, что в нашей базе есть один элемент компьютера, и что этот компьютер имеет MAC адрес EE:EE:EE:FF:FF:FF и ID номер 2. ID номер – это ключевое поле для компьютерных элементов. Другими словами, каждый компьютер в базе будет иметь уникальный ID номер.
Если мы откроем Deployment Workbench, мы увидим этот компьютер:
Увеличить
Рисунок 9: Просмотр записи компьютера с помощью Workbench
Мы могли бы удалить эту запись компьютера с помощью Workbench, но давайте сделаем это в PowerShell. При необходимости введите Get-Help Remove-MDTComputer, чтобы посмотреть синтаксис команды удаления компьютеров, затем введите Remove-MDTComputer 'id 2 'verbose, чтобы удалить элемент компьютера и отобразить подробности операции:
Рисунок 10: Удаление элемента компьютера из базы данных
Импорт компьютеров в базу данных
Теперь давайте массово импортируем несколько компьютеров в базу данных. Начнем с создания таблицы Excel с несколькими столбцами для имен, UUID, MAC адресов и прочих свойств этих компьютеров. Каждая строка таблицы будет соответствовать одному компьютеру. Для этого примера я создал таблицу с несколькими компьютерами в моей тестовой среде:
Рисунок 11: Создание таблицы для целевых компьютеров
Теперь экспортируем эту таблицу в формат текстового файла CSV (под названием C:\Data\machines.txt), который можно будет открыть в блокноте для просмотра:
Рисунок 12: CSV файл для целевых компьютеров
Затем используем команду Import-Csv cmdlet для импортирования CSV файла и назначения ему переменной $machines следующим образом:
$machines = Import-Csv C:\Data\machines.txt
Увеличить
Рисунок 13: Импортирование CSV файла в переменную
Ввод $machines отображает импортированную информацию, которая храниться в виде массива:
Увеличить
Рисунок 14: Информация о компьютерах храниться в виде массива
Можно ввести $machines.count, чтобы отобразить количество элементов в массиве:
Увеличить
Рисунок 15: Этот массив содержит 3 элемента по одному для каждого компьютера
Чтобы отобразить первый элемент массива, можно ввести $machines[0] следующим образом:
Увеличить
Рисунок 16: Отображение первого элемента массива
Как видно из рисунка выше, первый элемент массива содержит информацию о первом компьютере. Для отображения только имени этого компьютера, введите $machines[0].name следующим образом:
Рисунок 17: Отображение имени первого компьютера
Добавление импортированных компьютеров в базу данных
Теперь, когда мы немного знаем о работе с массивом, мы можем импортировать информацию, хранящуюся в $machines переменной массива, в нашу MDT базу. Для этого мы будем использовать команду New-MDTComputer, поэтому давайте рассмотрим синтаксис этой команды:
Увеличить
Рисунок 18: Просмотр синтаксиса команды New-MDTComputer
Вы должны помнить из 16 части, что элементы компьютера должны иметь уникальные идентификаторы в базе данных в одном или нескольких следующих полях:
- Universally Unique Identifier (UUID)
- Asset tag (номер ярлыка)
- Serial number (серийный номер)
- MAC address (физический адрес)
Давайте добавим элемент компьютера для нашего первого компьютера в таблице, используя MAC адреса в качестве идентификатора. Для этого вводим следующую команду:
New-MDTComputer 'macAddress $machines[0].mac 'settings @{OSInstall='YES'}
Увеличить
Рисунок 19: Добавление первого компьютера в базу данных с помощью его MAC адреса в качестве идентификатора
Закрываем и снова открываем Workbench для ее обновления, после чего у нас должен появиться новый элемент компьютера:
Рисунок 20: Новый элемент компьютера добавлен в базу данных
Если дважды нажать на этом элементе компьютера, можно посмотреть его свойства:
Увеличить
Рисунок 21: Свойства нового элемента компьютера
Переход в закладку Подробно (Details) покажет, что OSinstall свойство установлено на YES, как и ожидалось:
Рисунок 22: Подробные свойства нового элемента компьютера
Однако обратите внимание на рисунке выше, что OSDComputerName свойство нового элемента компьютера не имеет назначенного для него значения. Свойство OSDComptuerName указывает имя, которое MDT назначит целевой машине, и если вы еще раз посмотрите на рисунок 11, вы увидите, что мы хотели установить это свойство на DESK-A для данной машины.
Давайте посмотрим, как добавлять новый компьютер в базу данных с указанием имени компьютера. Чтобы посмотреть, как это делается, давайте добавим элемент компьютера для второй машины в нашу таблицу, используя ее MAC адрес в качестве идентификатора, а также укажем имя компьютера (которым, как показано на рисунке 11, будет DESK-B). Для этого мы вводим следующую команду:
New-MDTComputer 'macAddress $machines[1].mac 'settings @{OSInstall='YES';OSDComputerName=$machines[1].name}
Рисунок 23: Добавление второго компьютера в базу данных с использованием его MAC адреса в качестве идентификатора и указанием его имени
Если вы закроете и снова откроете Workbench, откроете свойства нового компьютера и выберите закладку подробностей (Details), вы увидите, что в этот раз свойство OSDComputerName, как и ожидалось, имеет значение DESK-B:
Увеличить
Рисунок 24: Подробные свойства нового элемента компьютера
Давайте попробуем еще один пример и добавим элемент компьютера для третьей машины в нашу таблицу, используя MAC адрес в качестве идентификатора и указав имя этого компьютера, название организации и полное имя пользователя. Для этого вводим одну команду PowerShell, но дополняем ее несколькими строками, чтобы было удобнее ее читать:
New-MDTComputer 'macAddress $machines[2].mac 'settings @{
OSInstall='YES';
OSDComputerName=$machines[2].name;
FullName='Michael Allen';
OrgName='Contoso Ltd.'}
Увеличить
Рисунок 25: Добавление третьего компьютера в базу данных с указанием нескольких свойств
Обратите внимание, что в PowerShell вам не обязательно указывать какие-то специальные символы командной строки, если команда делится на строки в массиве, и это указано фигурными скобками.
Закройте и снова откройте Workbench, откройте свойства нового компьютера и выберите закладку подробностей, чтобы увидеть настроенные свойства:
Увеличить
Рисунок 26: Подробные свойства нового элемента компьютера
Массовое создание элементов компьютеров в базе данных
Теперь мы знаем, как использовать одну PowerShell команду для создания нового элемента компьютера в базе MDT и настройки свойств этого элемента. Теперь давайте посмотрим, как использовать командный сценарий для автоматизации этого процесса, чтобы можно было массово создавать несколько компьютеров в базе данных в один шаг.
Сначала, вместо ввода отдельных команд для создания каждого компьютера в базе данных, давайте воспользуемся петлей For, чтобы осуществить повтор для элементов массива $machines следующим образом:
For ($i=1; $i -le $machines.count; $i++) { New-MDTComputer -macAddress $machines[$i-1].mac -settings @{ OSInstall='YES'; OSDComputerName=$machines[$i-1].name;} }
Увеличить
Рисунок 27: Использование петли For для добавления компьютеров в базу данных
Обратите внимание, что петля не выполняется до тех пор, пока вы закончите ввод закрывающейся скобкой ' вам не нужно использовать никаких знаков продолжения строки, как в сценариях VBScript.
Результат выполнения этой команды можно посмотреть, открыв Workbench:
Увеличить
Рисунок 28: Три элемента компьютера были созданы с помощью одной команды
Теперь давайте преобразуем все это в командный сценарий, который выполнит следующие задачи:
- установит модуль MDT PowerShell
- подключится к базе данных MDT
- импортирует CSV файл с информацией о целевых компьютерах
- создаст элементы компьютеров в базе данных, включая имена компьютеров и названия организации Contoso Ltd.
Для этого вводим следующий PowerShell сценарий в блокнот:
Import-Module 'name C:\Scripts\MDTDB.psm1
Connect-MDTDatabase 'sqlServer SEA-MDT-01 'instance SQLEXPRESS 'database MDT
$machines = Import-Csv C;\Data\machines.txt
For ($i=1; $i -le $machines.count; $i++)
{
New-MDTComputer -macAddress $machines[$i-1].mac -settings @{
OSInstall='YES';
OSDComputerName=$machines[$i-1].name;
OrgName='Contoso Ltd.'
}
}
Теперь сохраняем этот текстовый файл в формате Create.ps1, поскольку PowerShell сценарии должны иметь расширение файлов формата .ps1. Откройте Workbench и удалите все существующие элементы компьютеров в базе данных, а затем закройте Workbench.
Теперь найдите свой Create.ps1 файл, нажмите на нем правой клавишей и вберите команду «Открыть с помощью PowerShell (Run With PowerShell)». Оболочка интерпретатора команд PowerShell будет отображена и затем закроется. В качестве альтернативы двойному нажатию на .ps1 файле вы можете открыть интерпретатор команд PowerShell, перейти в каталог, в котором расположен Create.ps1 файл, и ввести Create.ps1 для выполнения вашего командного сценария.
Теперь откройте Workbench, где у вас должны быть новые элементы компьютеров. Мы достигли своей цели – возможности заполнить MDT базу несколькими элементами компьютеров в один шаг.
А вот небольшой бонус. Администраторы часто хотят называть компьютеры, используя общепринятые стандарты именования, например, мы хотим назвать эти три компьютера SEA-CLI-001, SEA-CLI-002 и SEA-CLI-003, а не DESK-A, DESK-B и DESK-E. Мы можем сделать это, слегка изменив вышеприведенный сценарий:
Import-Module 'name C:\Scripts\MDTDB.psm1
Connect-MDTDatabase 'sqlServer SEA-MDT-01 'instance SQLEXPRESS 'database MDT
$machines = Import-Csv C;\Data\machines.txt
For ($i=1; $i -le $machines.count; $i++)
{ $n = "{0:D3}" -f $i New-MDTComputer -macAddress $machines[$i-1].mac -settings @{ OSInstall='YES'; OSDComputerName='SEA-CLI-' + $n OrgName='Contoso Ltd.' } }
Сохраняем этот сценарий в качестве файла Create2.ps1, а затем выполняем его. Когда вы посмотрите подробности свойств элементов компьютеров, созданных этим сценарием, вы увидите, что компьютеры названы с помощью общепринятой системы именований:
Увеличить
Рисунок 29: Создание элементов компьютеров с помощью системы именований
Дополнительные ресурсы
Существует множество полезных ресурсов по PowerShell, но новичкам я советую посмотреть главу 13 набора ресурсов Windows 7 Resource Kit, который содержит отличное вводное руководство, написанное Эдом Уилсоном, так же известным, как The Scripting Guy.