У нас есть инфраструктура домена Windows, развернутая на инстансах AWS EC2. Чего мы хотим добиться, так это создать собственный sysprepped образ, который при запуске новых экземпляров автоматически присоединится к домену, а затем переименует себя в зависимости от региона, зоны доступности и имени сервера, определенных в консоли AWS.
Первый шаг уже реализован с использованием компонента домена присоединения, добавленного в sysprep2008.xml, как показано ниже:
<component name="Microsoft-Windows-UnattendedJoin" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Identification>
<UnsecureJoin>False</UnsecureJoin>
<Credentials>
<Domain>dc.connatix.com</Domain>
<Password>####</Password>
<Username>####</Username>
</Credentials>
<JoinDomain>####</JoinDomain>
<MachineObjectOU>OU=Servers,DC=dc,DC=####,DC=com</MachineObjectOU>
</Identification>
</component>
Для операции переименования мы пробовали множество вариантов: 1. выполнить сценарий powershell после sysprep, который извлечет список сценариев, которые должны быть применены с контроллера домена, и выполнит их один за другим, но Get-AdDomainController ничего не возвращает на этом шаге 2. Добавьте запланированную задачу через групповую политику, которая будет выполнять этот сценарий: это не работает, так как мы не можем добавить задачу, которая будет выполняться под учетной записью администратора домена через групповую политику 3. Добавьте сценарий запуска через групповую политику, но опять же, это не выполняется под учетная запись администратора домена.
Сценарий, используемый во всех этих сценариях, приведен ниже, и он отлично работает при запуске от пользователя, прошедшего проверку подлинности.
$mypwd = ConvertTo-SecureString -String "####" -Force -AsPlainText
$mycreds = New-Object System.Management.Automation.PSCredential ("####", $mypwd)
Set-AWSCredentials -AccessKey #### -SecretKey #### -StoreAs default
$InstanceId = (Invoke-RestMethod 'http://169.254.169.254/latest/meta-data/instance-id').ToString()
$AvailabilityZone = (Invoke-RestMethod 'http://169.254.169.254/latest/meta-data/placement/availability-zone').ToString().ToLower()
$Region = $AvailabilityZone.Substring(0,$AvailabilityZone.Length-1)
$computer = Get-WmiObject Win32_ComputerSystem
$Tags = Get-EC2Tag -Filters @{Name='resource-id';Value=$InstanceId} -Region $Region
$InstanceName = $AvailabilityZone + '-' + ($Tags | Where-Object {$_.Key -eq 'Name'}).Value.ToLower()
$computerName = $computer.Name.ToLower();
If($InstanceName -ne $null) {
If ($computerName -ne $InstanceName) {
Rename-Computer -NewName $InstanceName -DomainCredential $mycreds -Restart
}
}
Как вы думаете, как мы можем этого добиться? заранее спасибо