it-swarm.com.de

Mit PowerShell können Sie den Computer in einem Schritt umbenennen und der Domäne beitreten

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

  1. Benennen Sie den Computer um
  2. Verbinden Sie den Computer mit einer Domäne

Bedingung: Die Schritte 1 und 2 müssen zusammen ausgeführt werden, d. H. Ohne dass ein Computer neu gestartet wird

Funktionen, die ich verwende

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

Computer umbenennen

Laut meiner Internetrecherche hatte PowerShell 2.0 vor dem Release ein eingebautes Cmdlet namens Rename-Computer , das jedoch aus unbekannten Gründen in CTP 3 entfernt wurde. 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 zur Domäne hinzufügen

Wie Sie sehen, handelt es sich bei dieser Funktion eigentlich nur um einen Wrapper für das integrierte Cmdlet Add-Computer , das den Domänennamen sammelt und einige zu verwendende Anmeldeinformationen 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 probiert habe

Versuch 1

  1. Anruf Umbenennen-Computer
  2. Call Join-ComputerToDomain
  3. Neustart

Ergebnis: Die Ausgabe von Rename-Computer zeigt an, dass der Name geändert wurde, aber nach dem Neustart wurde der Name nicht geändert geändert, aber der Computer wurde zur Domäne hinzugefügt

Versuch 2

  1. Call Join-ComputerToDomain
  2. Anruf Umbenennen-Computer
  3. Neustart

Ergebnis: Rückgabewert von Rename-Computer ist 1326 (Anmeldefehler: unbekannter Benutzername oder falsches Kennwort). Ich gehe davon aus, dass die Anmeldeinformationen der Domäne für die Umbenennung erforderlich sind, sobald sie der Domäne hinzugefügt wurde. Ich habe versucht, Anmeldeinformationen mit dem Aufruf Get-WmiObject in Rename-Computer zu verwenden, aber es wurde ein Fehler ausgegeben, weil auf dem lokalen System keine unterschiedlichen Anmeldeinformationen verwendet werden können. 

Versuch 3

  1. Anruf Umbenennen-Computer
  2. Neustart
  3. Call Join-ComputerToDomain
  4. Neustart

Ergebnis: Alles funktioniert wie erwartet, aber zusätzlicher Neustart erforderlich. Funktioniert aber ich möchte den Neustart in Schritt 2 beseitigen. 

26
brett rogers

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

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

Vielleicht möchten Sie auch den Parameter "-OPTIONS" überprüfen.

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

31

Diese Lösung funktioniert:

  • Geben Sie den Computer in der Active Directory-Domäne mit Authentifizierung ein (kein Neustart).
  • Umbenennen des Computers mit Authentifizierung (kein Neustart)
  • nach Neustart

In 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)
6
Laurent Kling

Es gibt mehrere Gründe, aus denen Sie einen Neustart durchführen müssen, nachdem Sie einen Computer umbenannt haben oder wenn Sie einer Domäne beitreten (was im Wesentlichen der gleiche Vorgang ist, bei dem die Validierung durch AD erfolgt). Eines davon ist, dass auf NT-basierten Computern (ich glaube, dass dies mit Windows 2000 begann), die Anwendungs- und Netzwerkdienste den Computernamen lesen, wenn sie gestartet werden. Dies ist die only-Zeit, zu der sie den Computernamen lesen. Wenn Sie den Computer ohne Neustart umbenennen, reagieren die Netzwerk- und Anwendungsdienste nicht auf den neuen Computernamen. Dies ist besonders wichtig, wenn Sie den Computer zuerst 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. Diese Schlüssel können nicht geändert werden, während sie in den Arbeitsspeicher geladen werden (dies ist im Übrigen auch der Grund, warum einige Programme einen Neustart erfordern, um die Installation oder Deinstallation abzuschließen).

Sie können den Registrierungsschlüssel RunOnce (msdn.Microsoft.com/de-de/library/aa376977%28v=vs.85%29.aspx) verwenden, um das Domänen-Beitrittsskript beim Neustart automatisch auszuführen. Dies ist jedoch weiterhin der Fall für beide Vorgänge neu starten.

Wenn Sie wirklich knifflig werden möchten, können Sie Ihrem Umbenennungsskript Code hinzufügen, mit dem der RunOnce-Registrierungsschlüssel so eingestellt wird, dass das Domänen-Beitrittsskript beim Neustart gestartet wird. Beachten Sie jedoch, dass das Skript, das in die HKLM-Struktur geschrieben wird, als Administrator ausgeführt werden muss (besonders wichtig, wenn Sie die Benutzerkontensteuerung aktiviert haben).

Wenn Sie dies tun möchten, verwenden Sie am Ende Ihrer Rename-Computer-Funktion etwas Ähnliches:

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

Dies erstellt einen Unterschlüssel im Registrierungsschlüssel RunOnce (vorausgesetzt, Sie führen Vista/7/2008) mit dem Namen "joinDomain" mit dem Wert "C:\scripts\joinDomain.ps1" aus.

Wenn dies für Sie nicht funktioniert, ändern Sie die zweite Zeile folgendermaßen:

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.

5
JoeG

die Optionen JoinWithNewName in Add-Computer können diese Arbeit ausführen.

- JoinWithNewName: Benennt den Computernamen in der neuen Domäne in den Namen um, der im Parameter NewName angegeben ist. Wenn Sie den NewName-Parameter verwenden, wird diese Option automatisch festgelegt. Diese Option kann mit dem Cmdlet Rename-Computer verwendet werden. Wenn Sie das Cmdlet Rename-Computer verwenden, um den Computer umzubenennen, den Computer jedoch nicht neu starten, um die Änderung wirksam zu machen, können Sie diesen Parameter verwenden, um den Computer mit seinem neuen Namen einer Domäne hinzuzufügen.

$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
2
titoFlying

Ich habe heute das Gleiche gesucht und endlich einen Weg gefunden, es zu tun. Ich wurde darauf hingewiesen, dass dies aufgrund der Verwendung von sconfig möglich ist. Sie werden gefragt, ob Sie den Computernamen nach dem Beitritt zu einer Domäne ändern möchten. Hier ist meine Rohcodezeile. Es könnte verbessert werden, aber zu müde, jetzt darüber nachzudenken.

$strCompName = Read-Host 'Name '
$strAdmin = read-Host "Authorized user for this operation "
$strDomain = read-Host "Name of the domain to be joined "
add-computer -DomainName $strDomain -Credential $strAdmin
Rename-computer -newname $strCompName -DomainCredential $strAdmin
1
Chriz-tian

Ich konnte beide Aufgaben mit einem Neustart mit der folgenden Methode ausführen und funktionierte mit den folgenden JoinDomainOrWorkGroup-Flags. Dies war ein neuer Build und verwendete Windows 2008 R2 Enterprise. Ich habe bestätigt, dass das Computerkonto auch in AD mit dem neuen Namen erstellt wird.

1 (0x1) Standardeinstellung. Fügt einen Computer einer Domäne hinzu. Wenn dieser Wert nicht angegeben ist, handelt es sich bei dem Join um einen Computer zu einer Arbeitsgruppe

32 (0x20) Erlaubt einen Beitritt zu einer neuen Domäne, auch wenn der Computer bereits einer Domäne angehört

$comp=gwmi win32_computersystem
$cred=get-credential
$newname="*newcomputername*"
$domain="*domainname*"
$OU="OU=Servers, DC=domain, DC=Domain, DC=com"
$comp.JoinDomainOrWorkGroup($domain ,($cred.getnetworkcredential()).password, $cred.username, $OU, 33)
$comp.rename($newname,$cred.getnetworkcredential()).password,$cred.username)
1
OGWANKENOBI

In einem Schritt mit Administratorrechten: 

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

-DomainName = Ihr Domainname (z. B. corp.local)

-ComputerName = Name Ihres lokalen Computers (z. B. Der Computer, auf dem Sie sich befinden. Verwenden Sie "Hostname" in PS, um den Namen herauszufinden).

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

-Credentials = Ihre Administrator-Anmeldeinformationen, mit denen Sie zur Ausführung dieser Aktion berechtigt sind (z. B. Domäne\Admin = Beispiel Corp\JSmith. Ein Dialogfeld wird angezeigt, in das Sie Ihr Kennwort eingeben.

In zwei Schritten: 

Schritt 1

Rename-Computer -NewName xxxx -Restart

Hier muss nicht -ComputerName angegeben werden, da davon ausgegangen wird, dass Sie sich auf dem lokalen Computer befinden. Wenn Sie dies aus der Ferne tun; andere Geschichte. 

Schritt 2

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

xxxx\xxxx = Ihr Domain- und Admin-Benutzername (z. B. Corp\Jsmith)

1
Alan Inman

Ich habe einen getesteten Code, um der Domäne beizutreten und den Computer in den Servicetag umzubenennen.

code:

$servicetag = Get-WmiObject win32_bios | Select-Object -ExpandProperty SerialNumber
Add-Computer -Credential DOMAIN\USER -DomainName DOMAIN -NewName $servicetag

DOMAIN\USER = Bearbeiten Sie einen Benutzer in der Domäne, der Computer mit der Domäne verbinden kann. Beispiel: 

mydomain\admin

DOMAIN = Bearbeiten Sie die Domäne, der Sie beitreten möchten. Beispiel: 

mydomain.local
0
Krudus

Da niemand antwortet, versuche ich etwas:

Ich denke ich verstehe warum Attent man nicht funktioniert. Dies liegt daran, dass der Beitritt eines Computers zu einer Domäne in gewisser Weise auch den Computer umbenennt (den Teil des Domänennamens, geben Sie den Namen des Computers ein).

Versuchen Sie es also auf WMI-Basis, Sie haben eine Methode in der Klasse Win32_ComputerSystem, die JoinDomainOrWorkgroup heißt. Wenn Sie es auf derselben Ebene tun, haben Sie vielleicht mehr Chancen, damit es funktioniert.

0
JPBlanc

Wenn Sie das Computerkonto zuerst unter DC erstellen, können Sie den Namen ändern und der Domäne bei einem Neustart beitreten. 

0
boclark

Hier ist eine weitere Möglichkeit, mit Windows-Systemeigenschaften "Computername/Domänenänderung" zu tun. 

Mit anderen Worten: Systemeigenschaften | Registerkarte Computername dann klicken Sie auf Ändern mit Powershell. Es ist eine andere Herangehensweise, es ist in meiner Situation nützlich und könnte für andere hilfreich sein.

add-type -AssemblyName Microsoft.VisualBasic add-type -AssemblyName System.Windows.Forms

SystemPropertiesComputerName start-sleep - Sekunden 1

[Microsoft.VisualBasic.Interaction] :: AppActivate ("Systemeigenschaften")

[System.Windows.Forms.SendKeys] :: SendWait ("{TAB}") start-sleep –Sekunden 1

[System.Windows.Forms.SendKeys] :: SendWait ("{ENTER}")

0
Feedback

Fügen Sie außerdem ein lokales Konto hinzu + Umbenennen des Computers bei Prompt + Join zur Domäne bei Promt

#Set A local admin account
$computername = $env:computername   # place computername here for remote access
$username = 'localadmin'
$password = '[email protected]'
$desc = 'Local admin account'
$computer = [ADSI]"WinNT://$computername,computer"
$user = $computer.Create("user", $username)
$user.SetPassword($password)
$user.Setinfo()
$user.description = $desc
$user.setinfo()
$user.UserFlags = 65536
$user.SetInfo()
$group = [ADSI]("WinNT://$computername/administrators,group")
$group.add("WinNT://$username,user")

# Set computer name 
$computerName = Get-WmiObject Win32_ComputerSystem 
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') | Out-Null 
$name = [Microsoft.VisualBasic.Interaction]::InputBox("Enter Desired Computer Name ")
$computername.rename("$name")

#Now Join to Domain
Add-Computer -DomainName [domainname] -Credential [user\domain]  -Verbose
Restart-Computer
0
DisplayName

Rename-Computer wurde von CTP3 entfernt, da beim Umbenennen eines Computers viele Dinge getan wurden und MS diesen Prozess entweder nicht neu erstellen wollte oder nicht alle erforderlichen Bits enthalten konnte. Ich denke, Jefferey Snover sagte, dass stattdessen nur netdom.exe verwendet wird, da dies die beste Vorgehensweise ist, um einen Computer in der Befehlszeile umzubenennen. Nicht die Antwort, die Sie gesucht haben, aber Sie sollten in die richtige Richtung weisen

0
Arposh
$domain = "domain.local"
$password = "[email protected]" | ConvertTo-SecureString -asPlainText -Force
$username = "$domain\Administrator"
$hostname=hostname
$credential = New-Object System.Management.Automation.PSCredential($username,$password)
Add-Computer -DomainName $domain -ComputerName $hostname -NewName alrootca -Credential $credential -Restart

Funktioniert für mich ^^

0

Dadurch werden Sie zur Eingabe des Computernamens und zum Beitritt zur Domäne aufgefordert und anschließend neu gestartet.

$computerName = Get-WmiObject Win32_ComputerSystem 
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') | Out-Null 
$name = [Microsoft.VisualBasic.Interaction]::InputBox("Enter Desired Computer Name ")
$computername.rename("$name")
Add-Computer -DomainName [domainname] -Credential [user\domain]  -Verbose
Restart-Computer
0
DisplayName

Ich möchte folgendes anbieten, das automatisiert funktioniert. Es zeigt die Reihenfolge der Schritte und die Beziehung zwischen dem Festlegen des Namens und dem Beitritt zur Domäne. Ich verwende dies in einem Skript als Orchestrierungspunkt für Win2008r2 und Win2012r2 über Scalr CMP für EC2- und Openstack-Cloud-Instanzen. 

$userid="$DOMAIN\$USERNAME"
$secure_string_pwd = convertto-securestring "SECRET_PASSWORD" -asplaintext -force
$creds = New-Object System.Management.Automation.PSCredential $userid,$secure_string_pwd

Rename-Computer "newhostname" -DomainCredential $creds -Force
WARNING: The changes will take effect after you restart the computer OLDHOSTNAME.

Add-Computer -NewName "newhostname" -DomainName $DOMAIN -Credential $creds \
-OUPath "OU=MYORG,OU=MYSUBORG,DC=THEDOMAIN,DC=Net" -Force
WARNING: The changes will take effect after you restart the computer OLDHOSTNAME.

Restart-Computer

Ein Vorbehalt besteht darin, vorsichtig mit den Anmeldeinformationen zu sein, sie aus einem Schlüsselgeschäft zu ziehen und nicht wie in der Abbildung dargestellt, hart zu codieren. Dies ist jedoch ein anderes Thema.

Vielen Dank an alle für Ihre Antworten. 

0
havoc1