Sie können das folgende Beispielskript anpassen und verwenden, um geklonte virtuelle Maschinen (VMs) zu einer Active Directory-Domäne (AD-Domäne) hinzuzufügen.

Sie müssen dieses Skript ausführen, wenn Sie die Winbind-Lösung für die AD-Integration verwenden, weil dabei der Schritt des Hinzufügens zur Domäne für geklonte VMs fehlschlägt. Dieses Skript führt einen Befehl zum Hinzufügen zur Domäne auf jeder VM aus. Sie müssen dieses Skript nicht ausführen, wenn Sie die OpenLDAP-Lösung verwenden.

Für das Kopieren und Einfügen des Skriptinhalts ohne Seitenumbrüche verwenden Sie die HTML-Version dieses Themas, die auf der Dokumentationsseite von Horizon 7 unter https://www.vmware.com/support/pubs/view_pubs.html verfügbar ist.

Skripteingabe

Dieses Skript liest eine Eingabedatei, die im Kapitel Eingabedatei für die PowerCLI-Beispielskripts zur Bereitstellung von Linux-Desktops beschrieben ist. Es gibt verschiedene Eingabeaufforderungen für die folgenden Informationen aus:

  • IP-Adresse von vCenter Server

  • Anmeldename des Administrators für vCenter Server

  • Kennwort des Administrators für vCenter Server

  • Anmeldename des Administrators für den ESXi-Host

  • Kennwort des Administrators für den ESXi-Host

  • Benutzeranmeldename für die Linux-VM

  • Benutzerkennwort für die Linux-VM

  • Anmeldename eines AD-Benutzers, der autorisiert ist, Maschinen zur Domäne hinzuzufügen

  • Kennwort des autorisierten AD-Benutzers

Skriptinhalt

<#
.SYNOPSIS
run command "sudo /usr/bin/net ads join"

.DESCRIPTION
The tool is to run the command "sudo /usr/bin/net ads join" to join Linux to AD

.NOTES
#>
#------------------------- Functions -------------------------
function GetInput
{
    Param($prompt, $IsPassword = $false)
    $prompt = $prompt + ": "
    Write-Host $prompt -NoNewLine
    [Console]::ForegroundColor = "Blue"
    if ($IsPassword)
    {
        $input = Read-Host -AsSecureString
        $input = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($input))
    }
    else
    {
        $input = Read-Host
    }
    
    [Console]::ResetColor()
    return $input
}
#------------------------- Handle input -------------------------
"-----------------------------------------------------"
$vcAddress = GetInput -prompt "Your vCenter address" -IsPassword $false
$vcAdmin = GetInput -prompt "Your vCenter admin user name" -IsPassword $false
$vcPassword = GetInput -prompt "Your vCenter admin user password" -IsPassword $true
"-----------------------------------------------------"
$hostAdmin = GetInput -prompt 'Your ESXi host admin user name, such as root' -IsPassword $false
$hostPassword = GetInput -prompt "Your ESXi admin user password" -IsPassword $true
"-----------------------------------------------------"
$guestUser = GetInput -prompt 'Your VM guest OS user name' -IsPassword $false
$guestPassword = GetInput -prompt 'Your VM guest OS user password' -IsPassword $true
"-----------------------------------------------------"
$adUser = GetInput -prompt 'Type the AD user name to join the AD' -IsPassword $false
""
"`nPlease type the AD user password."
"Plase note that special character in password may not work with the script"
$adUserPassword = GetInput -prompt 'Your AD user password' -IsPassword $true
"-----------------------------------------------------"

#$csvFile = Read-Host 'Csv File '
$csvFile = '.\CloneVMs.csv'

#------------------------- Main Script -------------------------

#Connect to vCenter
#Connect to vCenter
$VC_Conn_State = Connect-VIServer $vcAddress -user $vcAdmin -password $vcPassword
if([string]::IsNullOrEmpty($VC_Conn_State))
{
   Write-Host 'Exit since failed to login vCenter'
   exit
}
else
{
  Write-Host 'vCenter is connected'
}

#Read input CSV file
$csvData = Import-CSV $csvFile

$destFolder = "/home/$guestUser/"

#Handle VMs one by one
foreach ($line in $csvData)
{
    "`n-----------------------------------------------------"
    $VMName = $line.VMName
    write-host -ForeGroundColor Yellow "VM: $VMName`n"
    
    $cmd = "sudo /usr/bin/net ads join -U $adUser%$adUserPassword"
    Write-Host "Run cmd 'sudo /usr/bin/net ads join' in VM '$VMName' with user '$guestUser'"
    Invoke-VMScript  -HostUser $hostAdmin -HostPassword $hostPassword -VM $VMName -GuestUser $guestUser -GuestPassword $guestPassword -Confirm:$false -ScriptType Bash -ScriptText $cmd
}

Disconnect-VIServer $vcAddress -Confirm:$false
exit

Skriptausführung

Die folgenden Meldungen resultieren aus einer Ausführung des Skripts:

PowerCLI C:\scripts> .\ClonedVMs_JoinDomain.ps1
--------------------------------------------------
Your vCenter address: 10.117.44.17
Your vCenter admin user name: administrator
Your vCenter admin user password: *******
--------------------------------------------------
Your ESXi host admin user name, such as root: root
Your ESXi host admin user password: *******
--------------------------------------------------
Your VM guest OS user name: ViewUser
Your VM guest OS user password: *******
--------------------------------------------------
Type the AD user name to join the AD: viewadmin
Please type the AD user password.
Please note that special character in password may not work with the script.
Your AD user password: *******