37 Stimmen

Umbenennen des Computers und Beitreten zur Domäne in einem Schritt mit PowerShell

Das Ziel: Verwenden Sie PowerShell 2.0 auf einem Computer mit Windows Server 2008 R2, um:

  1. Den Computer umbenennen
  2. Beitritt des Computers zu einer Domäne

Zustand: Die Schritte 1 und 2 müssen zusammen durchgeführt werden, d. h. ohne einen Neustart des Computers dazwischen.

Funktionen, die ich benutze

Dies sind die PowerShell-Funktionen, die ich für jeden Schritt erstellt habe.

Computer umbenennen

Meinen Internetrecherchen zufolge hatte PowerShell 2.0 zu einem Zeitpunkt vor der Veröffentlichung ein integriertes Cmdlet namens Umbenennen-Computer aber es wurde aus unbekannten Gründen in CTP 3 entfernt. Meine Version verwendet WMI.

function Rename-Computer
{
    param ( [Parameter(Mandatory=$true)][string]$name )

    process
    {
        try
        {
            $computer = Get-WmiObject -Class Win32_ComputerSystem
            $result = $computer.Rename($name)

            switch($result.ReturnValue)
            {       
                0 { Write-Host "Success" }
                5 
                {
                    Write-Error "You need administrative rights to execute this cmdlet" 
                    exit
                }
                default 
                {
                    Write-Host "Error - return value of " $result.ReturnValue
                    exit
                }
            }
        }
        catch
        {
            Write-Host "Exception occurred in Rename-Computer " $Error
        }
    }
}

Computer an Domäne anschließen

Wie Sie sehen können, ist diese Funktion eigentlich nur ein Wrapper für das integrierte Cmdlet Computer hinzufügen die den Domänennamen erfasst und einige zu verwendende Anmeldedaten erstellt.

function Join-ComputerToDomain
{
    param ( [Parameter(Mandatory=$true)][string]$domain )

    process
    {
        try
        {
            $_domainCredential = $Host.UI.PromptForCredential("Enter domain credentials", "Enter domain credentials to be used when joining computer to the domain", "", "NetBiosUserName")
            Add-Computer -DomainName $_domain -cred $_domainCredential
        }
        catch
        {
            Write-Error "Exception occurred in Join-ComputerToDomain " $Error
        }
    }
}

Schritte, die ich ausprobiert habe

Versuch 1

  1. Rufen Sie an. Umbenennen-Computer
  2. Rufen Sie an. Join-ComputerToDomain
  3. Neustart

Ergebnis: Die Ausgabe von Rename-Computer zeigt an, dass der Name geändert wurde, aber nach dem Neustart ist der Name hat nicht ändern, aber Computer war verbunden mit der Domäne

Versuch 2

  1. Rufen Sie an. Join-ComputerToDomain
  2. Rufen Sie an. Umbenennen-Computer
  3. Neustart

Ergebnis: Der Rückgabewert von Rename-Computer ist 1326 (Anmeldefehler: unbekannter Benutzername oder falsches Kennwort). Ich nehme an, dass dies darauf zurückzuführen ist, dass für die Umbenennung Anmeldeinformationen für die Domäne erforderlich sind, sobald sie mit der Domäne verbunden ist. Ich habe versucht, die Anmeldeinformationen mit dem Get-WmiObject-Aufruf in Rename-Computer zu verwenden, aber es wurde eine Fehlermeldung ausgegeben, dass auf dem lokalen System keine anderen Anmeldeinformationen verwendet werden können.

Versuch 3

  1. Rufen Sie an. Umbenennungs-Computer
  2. Neustart
  3. Rufen Sie an. Join-ComputerToDomain
  4. Neustart

Ergebnis: Alles funktioniert wie erwartet, aber ein zusätzlicher Neustart ist erforderlich. Funktioniert, aber ich möchte den Neustart bei Schritt 2 vermeiden.

42voto

Francois-Xavier Cat Punkte 517

Sie können einfach Add-Computer verwenden, es gibt einen Parameter für "-NewName".

Ejemplo: Add-Computer -DomainName MYLAB.Local -ComputerName TARGETCOMPUTER -newname NewTARGETCOMPUTER

Sie sollten auch den Parameter "-OPTIONS" überprüfen.

http://technet.microsoft.com/en-us/library/hh849798.aspx

7voto

Laurent Kling Punkte 71

Diese Lösung funktioniert:

  • Eingabe des Computers in die Active Directory-Domäne mit Authentifizierung (kein Neustart)
  • Umbenennen des Computers mit Authentifizierung (kein Neustart)
  • nach, Neustart

Im Code:

# get the credential 
$cred = get-credential

# enter the computer in the right place
Add-Computer -DomainName EPFL -Credential $cred -OUPath "...,DC=epfl,DC=ch"

# rename the computer with credential (because we are in the domain)
$Computer = Get-WmiObject Win32_ComputerSystem
$r = $Computer.Rename("NewComputerName", $cred.GetNetworkCredential().Password, $cred.Username)

5voto

JoeG Punkte 3997

Es gibt mehrere Gründe, warum Sie nach der Umbenennung eines Computers oder beim Beitritt zu einer Domäne (was im Grunde derselbe Vorgang mit Validierung durch AD ist) einen Neustart durchführen müssen. Einer davon ist, dass auf NT-basierten Computern (ich glaube, das begann mit Windows 2000) die Anwendungs- und Netzwerkdienste den Computernamen lesen, wenn sie gestartet werden. Das ist der sólo Wenn Sie also den Computer ohne Neustart umbenennen würden, würden die Netzwerk- und Anwendungsdienste nicht auf den neuen Computernamen reagieren. Dies ist besonders wichtig, wenn Sie den Computer zunächst umbenennen und dann versuchen, einer Domäne beizutreten, da der Kerberos-Handshake nicht abgeschlossen werden kann, ohne dass der Netzwerkstapel auf den richtigen Computernamen reagiert.

Ein weiterer Grund ist, dass mehrere Registrierungsschlüssel den Computernamen verwenden, und diese Schlüssel können nicht geändert werden, solange sie in den Speicher geladen sind (dies ist übrigens auch der Grund, warum einige Programme einen Neustart erfordern, um die Installation oder Deinstallation abzuschließen).

Sie können den RunOnce-Registrierungsschlüssel (msdn.microsoft.com/en-us/library/aa376977%28v=vs.85%29.aspx) verwenden, um Ihr Skript für den Domänenbeitritt automatisch beim Neustart auszuführen, aber Sie müssen trotzdem für beide Vorgänge neu starten.

Wenn Sie wirklich trickreich vorgehen möchten, könnten Sie Ihrem Umbenennungsskript einen Code hinzufügen, der den Registrierungsschlüssel RunOnce so einstellt, dass das Skript für den Domänenbeitritt beim Neustart gestartet wird. Beachten Sie dabei jedoch, dass das Skript, das in die HKLM-Hive geschrieben wird, als Administrator ausgeführt werden muss (besonders wichtig, wenn Sie UAC aktiviert haben).

Wenn Sie das tun wollen, müssen Sie am Ende der Funktion "Rename-Computer" etwas wie das folgende eingeben:

Set-Location -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce'
Set-ItemProperty -Path . -Name joinDomain -Value "C:\scripts\joinDomain.ps1"
Restart-Computer

Dadurch wird ein Unterschlüssel im RunOnce-Registrierungsschlüssel (vorausgesetzt, Sie verwenden Vista/7/2008) mit dem Namen "joinDomain" und dem Wert " C:\scripts\joinDomain.ps1 "

Wenn das bei Ihnen nicht funktioniert, ändern Sie die zweite Zeile wie folgt:

Set-ItemProperty -Path . -Name joinDomain -Value 'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe "C:\scripts\joinDomain.ps1"'

Lassen Sie mich wissen, wenn Sie Probleme haben.

3voto

titoFlying Punkte 31

Die Option JoinWithNewName in Add-Computer kann diese Arbeit übernehmen.

-- JoinWithNewName: Benennt den Computernamen in der neuen Domäne in den mit dem Parameter NewName angegebenen Namen um. Wenn Sie den NewName-Parameter verwenden, wird diese Option automatisch gesetzt. Diese Option ist für die Verwendung mit dem Cmdlet "Rename-Computer" vorgesehen. Wenn Sie den Computer mit dem Cmdlet "Rename-Computer" umbenennen, aber den Computer nicht neu starten, damit die Änderung wirksam wird, können Sie diesen Parameter verwenden, um den Computer mit seinem neuen Namen einer Domäne beizutreten.

$oldName = Read-Host -Prompt "Enter Original Computer Name"
$newName = Read-Host -Prompt "Enter New Computer Name"
$domain = Read-Host -Prompt "Enter Domain Name to be added"
$user = Read-Host -Prompt "Enter Domain user name"
$password = Read-Host -Prompt "Enter password for $user" -AsSecureString 
$username = "$domain\$user" 
$credential = New-Object System.Management.Automation.PSCredential($username,$password) 
Rename-Computer -NewName $newName -LocalCredential admin -Force
Write-Host "Please waiting for a moment to change Domain and then restart" -ForegroundColor Red
Add-Computer -ComputerName $oldName -DomainName $domain -Options JoinWithNewName -Credential $credential -Restart

1voto

Alan Inman Punkte 15

In einem Schritt mit Admin-Anmeldedaten:

Add-Computer -DomainName xxxx -ComputerName xxxx -NewName xxxx -Credential Domain\Admin -Restart

-DomainName = Ihr Domänenname (z. B. corp.local)

-ComputerName = Name des lokalen Computers (z. B. der Computer, auf dem Sie sich befinden; verwenden Sie "Hostname" in PS, um den Namen herauszufinden).

-NeuerName = Wie Sie den Computer umbenennen möchten (z. B. CORP-ANNE-TX)

-Credentials = Ihre Admin-Anmeldedaten, die Ihnen die Berechtigung zur Durchführung dieser Aktion geben (z. B. Domain \Admin = Beispiel Corp \JSmith. Es erscheint ein Dialogfeld, in das Sie Ihr Passwort eingeben müssen)

In zwei Schritten:

Schritt 1

Rename-Computer -NewName xxxx -Restart

Hier müssen Sie -ComputerName nicht angeben, da davon ausgegangen wird, dass Sie sich auf dem lokalen Computer befinden. Wenn Sie dies aus der Ferne tun, sieht die Sache anders aus.

Schritt 2

Add-Computer -DomainName xxxx -Credential xxxx\xxxxx -Restart

xxxx \xxxx = Ihre Domäne und Ihr Administrator-Benutzername (z. B. Corp \Jsmith )

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X