Переименовать компьютер и присоединиться к домену за один шаг с помощью PowerShell

Цель: На компьютере под управлением Windows Server 2008 R2 используйте PowerShell 2.0, чтобы:

  1. Переименовать компьютер
  2. Присоедините компьютер к домену

Условие: Шаги 1 и 2 должны выполняться вместе, т. е. без перезагрузки компьютера между ними.

Функции, которые я использую

Это Функции PowerShell, которые я создал для каждого шага.

Rename Computer

Согласно моим исследованиям в Интернете, PowerShell 2.0 в какой-то момент перед выпуском имел встроенный командлет под названием Rename-Computer , но он была удалена по причинам, неизвестным в CTP 3. В моей версии используется 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
        }
    }
}

Присоединить компьютер к домену

Как видите, эта функция на самом деле всего лишь оболочка для встроенного командлета Add-Computer , который собирает доменное имя и создает некоторые учетные данные для использования.

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
        }
    }
}

Шаги, которые я пробовал

Попытка 1

  1. Вызов Rename-Computer
  2. Вызов Join-ComputerToDomain
  3. Restart

Результат: Вывод из Rename-Computer указывает, что имя было изменено, но после перезапуска имя не изменилось , но компьютер был присоединен к домену

Попытка 2

  1. Вызов Join-ComputerToDomain
  2. Вызов Rename-Computer
  3. Restart

Результат: Возвращаемое значение Rename-Computer - 1326 (Ошибка входа: неизвестное имя пользователя или неверный пароль). Я предполагаю, что это связано с тем, что учетные данные домена требуются для переименования после присоединения к домену. Я попытался использовать учетные данные с вызовом Get-WmiObject в Rename-Computer, но возникла ошибка о невозможности использовать другие учетные данные в локальной системе.

Попытка 3

  1. Вызов Rename-Computer
  2. Restart
  3. Call Join-ComputerToDomain
  4. Restart

Результат: Все работает должным образом, но требуется дополнительный перезапуск . Работает, но я хочу отменить перезапуск на шаге 2.

29
задан brett rogers 9 June 2011 в 04:12
поделиться

5 ответов

Если вы сначала создаете учетную запись компьютера на контроллере домена, вы можете изменить имя и присоединиться к домену за одну перезагрузку.

0
ответ дан 28 November 2019 в 01:35
поделиться

Поскольку никто не отвечает, я что-то пробую:

Мне кажется, я понимаю, почему не работает Attent one. Это потому, что присоединение компьютера к домену так или иначе переименовывает компьютер (часть имени домена, введите имя машины).

Итак, вы пытаетесь сделать это полностью WMI, у вас есть метод в классе Win32_ComputerSystem, который называется JoinDomainOrWorkgroup. Выполнение этого на том же уровне, возможно, даст вам больше шансов заставить его работать.

0
ответ дан 28 November 2019 в 01:35
поделиться

Я искал то же самое сегодня и, наконец, нашел способ сделать это. Мне подсказали, что это стало возможным благодаря использованию sconfig, который спрашивает вас, хотите ли вы изменить имя компьютера после присоединения его к домену. Вот моя строка исходного кода. Это может быть улучшено, но надоело думать об этом сейчас.

$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
ответ дан 28 November 2019 в 01:35
поделиться

Параметры JoinWithNewName в Add-Computer могут выполнять эту работу.

- JoinWithNewName: переименовывает имя компьютера в новом домене в имя, указанное параметром NewName. Когда вы используете параметр NewName, эта опция устанавливается автоматически. Этот параметр предназначен для использования с командлетом Rename-Computer. Если вы используете командлет Rename-Computer для переименования компьютера, но не перезагружаете компьютер, чтобы изменения вступили в силу, вы можете использовать этот параметр, чтобы присоединить компьютер к домену с его новым именем.

$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
3
ответ дан 28 November 2019 в 01:35
поделиться

Это решение работает:

  • Введите компьютер в домен Active Directory с проверкой подлинности (без перезагрузки)
  • Переименуйте компьютер с проверкой подлинности (без перезагрузки)
  • после, перезапустите

В коде:

# 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
ответ дан 28 November 2019 в 01:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: