Как автоматически добавить виртуальную машину в домен?

Для добавления виртуальной машины в домен необходимо установить в гостевую операционную систему модуль cloud-init. С более подробной информацией о модуле для Windows-based систем можно ознакомиться по ссылке.

Следует помнить, что помимо локально размещаемого скрипта, модуль cloud-init выполнит инструкции, заданные в параметре «Сценарий настройки» в подменю «Конфигурация» формы создания TRS проекта.

Подробнее о данном варианте настройки можно прочитать в соответствующем разделе инструкции Dashboard.

../../_images/trs_create_project_configuration.png

Вкладка «Конфигурация» формы создания TRS проекта

С помощью PowerShell

Важно

Необходимо использовать начальный тег <powershell> и, соответственно, закрывающий тег </powershell> в PowerShell скрипте.

  1. Задайте домен для добавления:

    $DomainToJoin = "accentos.loc"
    
  2. Задайте описание спецификации OU, в которую следует заводить аккаунт сервера:

    $OU = "OU=TestOU,DC=accentos,DC=loc"
    
  3. Для передачи пользователя с правами для введения объектов в домен выполните команду:

    $user = "Administrator"
    
  4. Для передачи пароля выполните команду:

    $password = "TestPass"
    $secure_password = ConvertTo-SecureString -String $password -AsPlainText -Force
    
  5. Сформируйте токен доступа:

    $credential = New-Object System.Management.Automation.PSCredential($user, $secure_password)
    
  6. Добавьте в домен:

    Add-Computer -DomainName $DomainToJoin -OUPath $OU -Credential $credential -Restart
    

Unattend Files не требует наличия клиента, использует средства SysPrep, но может быть включен в состав конфигурационного XML-файла для cloud-init.

Пример Unattend Files (небезопасное добавление):

-----------------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
    <settings pass="specialize">
        <component name="Microsoft-Windows-UnattendedJoin" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35"
language="neutral" versionScope="nonSxS" xmlns:wcm="https://schemas.microsoft.com/WMIConfig/2002/State"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <Identification>
                <UnsecureJoin>true</UnsecureJoin>
            </Identification>
        </component>
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35"
language="neutral" versionScope="nonSxS" xmlns:wcm="https://schemas.microsoft.com/WMIConfig/2002/State"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <ProductKey>XXXX-XXXX-XXXX-XXXX-XXXX</ProductKey>
        </component>
    </settings>
</unattend>
-----------------------------------------------------------------------------------------

Пример Unattend Files (безопасное добавление):

-----------------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
    <settings pass="specialize">
        <component name="Microsoft-Windows-UnattendedJoin" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35"
language="neutral" versionScope="nonSxS" xmlns:wcm="https://schemas.microsoft.com/WMIConfig/2002/State"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <Identification>
                <UnsecureJoin>false</UnsecureJoin>
                <Credentials>
                    <Domain>accentos.loc</Domain>
                    <Password>TestPass</Password>
                    <Username>Administrator</Username>
                </Credentials>
            </Identification>
        </component>
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35"
language="neutral" versionScope="nonSxS" xmlns:wcm="https://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <ComputerName>%MACHINENAME%</ComputerName>
        </component>
    </settings>
</unattend>
-----------------------------------------------------------------------------------------

С помощью xml и sysprep

Для добавления виртуальной машины в домен необходимо поместить 2 файла в нужные папки и запустить sysprep.

Файл ответов 2.xml нужно отредактировать и положить в папку c:\windows\system32\sysprep\.

Отредактировать необходимо ту часть, в которой указаны домен и учётные данные:

<Identification>
                <Credentials>
                    <Domain>demo.loc</Domain>
                    <Password>P@ssw0rd</Password>
                    <Username>administrator</Username>
                </Credentials>
                <JoinDomain>demo.loc</JoinDomain>
</Identification>

Где demo.loc – ваш домен, P@ssw0rd – ваш пароль, administrator – ваш пользователь.

Файл setupcomplete.cmd нужно положить в папку c:\windows\setup\scripts\. Если целевая папка отсутствует, то её необходимо создать. Файл нужен, чтобы удалить файл ответов после того, как отработает sysprep.

Далее открываем cmd от имени администратора и выполняем команду:

SYSPREP /GENERALIZE /OOBE /SHUTDOWN /UNATTEND:C:\Windows\System32\sysprep\2.xml

Возможно для выполнения команды sysprep необходимо будет перейти в папку.

В результате выполнения этой команды sysprep запакует Windows и выключит её.

При следующем включении sysprep будет разворачивать Windows согласно файлу ответов и соответственно вводить её в домен.

Пример файла 2.xml:

<?xml version="1.0" encoding="UTF-8"?>
 -<unattend xmlns="urn:schemas-microsoft-com:unattend">
 -<settings pass="oobeSystem">
 -<component language="neutral" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" versionScope="nonSxS" publicKeyToken="31bf3856ad364e35" processorArchitecture="amd64" name="Microsoft-Windows-Shell-Setup">
 -<OOBE>
    <NetworkLocation>Work</NetworkLocation>
    <HideEULAPage>true</HideEULAPage>
    <ProtectYourPC>1</ProtectYourPC>
    <SkipMachineOOBE>true</SkipMachineOOBE>
    <SkipUserOOBE>true</SkipUserOOBE>
   </OOBE>
     <TimeZone>Russian Standard Time</TimeZone>
     <RegisteredOwner>vdi</RegisteredOwner>
     <RegisteredOrganization>vdi</RegisteredOrganization>
   </component>
  -<component language="neutral" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" versionScope="nonSxS" publicKeyToken="31bf3856ad364e35" processorArchitecture="amd64" name="Microsoft-Windows-International-Core">
    <InputLocale>ru-RU</InputLocale>
    <SystemLocale>ru-RU</SystemLocale>
    <UILanguage>ru-RU</UILanguage>
    <UserLocale>ru-RU</UserLocale>
   </component>
  </settings>
 -<settings pass="specialize">
   -<component language="neutral" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" versionScope="nonSxS" publicKeyToken="31bf3856ad364e35" processorArchitecture="amd64" name="Microsoft-Windows-UnattendedJoin">
   -<Identification>
   -<Credentials>
   <Domain>demo.loc</Domain>
   <Password>P@ssw0rd</Password>
   <Username>administrator</Username>
  </Credentials>
   <JoinDomain>demo.loc</JoinDomain>
   </Identification>
  </component>
  </settings>
 -<settings pass="generalize">
   -<component language="neutral" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" versionScope="nonSxS" publicKeyToken="31bf3856ad364e35" processorArchitecture="amd64" name="Microsoft-Windows-PnpSysprep">
    <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
   </component>
 </settings>
 <cpi:offlineImage xmlns:cpi="urn:schemas-microsoft-com:cpi" cpi:source="catalog:e:/sources/install_windows 7 professional.clg"/>
</unattend>

Пример файла SetupComplete.cmd:

del /Q /F c:\windows\system32\sysprep\2.xml
del /Q /F c:\windows\panther\2.xml

Важно

Для того, чтобы воспользоваться тремя последними методами добавления в домен используя cloudbase-init, необходимо заключить команды в тег <script></script> или в начале указать rem cmd.

С помощью утилиты netdom

Для того, чтобы иметь возможность запустить утилиту в Windows 10, необходимо установить пакет утилит RSAT. Для добавления в домен выполните команду:

netdom.exe join %computername% /domain:DomainName /UserD:DomainName\UserName /PasswordD:Password

С помощью WMI

Примечание

Рекомендуется не использовать кириллические имена с этой утилитой.

Для добавления машины с Windows с помощью WMI выполните команду:

wmic computersystem where name="%computername%" call joindomainorworkgroup fjoinoptions=3 name="homelab.local" username="homelab\labadmin" Password="secret"

Расширенный сценарий с вводом в конкретную операционную группу домена

Расширенный сценарий с вводом машины в конкретную операционную группу домена:

<script>
wmic computersystem where name="%computername%" call joindomainorworkgroup fjoinoptions=3 name="homelab.local" username="homelab\labadmin" Password="secret" AccountOU="OU=TS_TEST1;OU=TS_Servers;OU=TS_FARM;OU=Servers-VDI;DC=homelab;DC=local"
gpupdate /force
shutdown /r
</script>

С помощью командлета PowerShell Get-WmiObject

Примечание

Для использования файла PowerShell необходимо следующее:

Выполнить в командной строке:

powershell -Command Set-ExecutionPolicy RemoteSigned

Для добавления машины с помощью командлета PowerShell Get-WmiObject выполните команду:

(Get-WMIObject -NameSpace "Root\Cimv2" -Class "Win32_ComputerSystem").JoinDomainOrWorkgroup("homelab.local","secret","homelab\labadmin",$null,3)

Также рекомендуется ознакомиться со следующей информацией:

  1. https://adamtheautomator.com/add-computer-to-domain/#Adding_a_Local_Computer_to_a_Domain_via_Settings_app;
  2. https://cloudbase-init.readthedocs.io/en/latest/userdata.html?highlight=powershell#powershell.