it-source

PowerShell로 한 번에 컴퓨터 이름 변경 및 도메인 가입

criticalcode 2023. 9. 8. 21:34
반응형

PowerShell로 한 번에 컴퓨터 이름 변경 및 도메인 가입

목표: Windows Server 2008 R2를 실행하는 컴퓨터에서 PowerShell 2.0을 사용하여 다음을 수행합니다.

  1. 컴퓨터 이름 바꾸기
  2. 컴퓨터를 도메인에 가입시키기

상태:1단계와 2단계를 함께 수행해야 합니다. 즉, 두 단계 사이에 컴퓨터를 다시 시작하지 않고 수행해야 합니다.

사용중인 기능

이것은 제가 각 단계별로 만든 PowerShell 기능입니다.

컴퓨터 이름 바꾸기

내 인터넷 조사에 따르면, 출시 전 한 시점에 PowerShell 2.0에 Rename-Computer라는 cmdlet이 내장되어 있었지만 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
        }
    }
}

컴퓨터를 도메인에 가입하기

보시다시피 이 함수는 도메인 이름을 수집하고 사용할 자격 증명을 생성하는 내장 cmdlet 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. 호출 이름 바꾸기-컴퓨터
  2. 가입-컴퓨터를 도메인에 호출
  3. 다시 시작

결과: Rename-Computer의 출력은 이름이 변경되었음을 나타내지만 재시작 후 이름이 변경되지 않았지만 컴퓨터가 도메인에 가입되었음을 나타냅니다.

시도2

  1. 가입-컴퓨터를 도메인에 호출
  2. 호출 이름 바꾸기-컴퓨터
  3. 다시 시작

결과: Rename-Computer의 반환 값은 1326(로그온 실패: 알 수 없는 사용자 이름 또는 잘못된 암호)입니다.도메인에 가입하면 이름을 바꾸려면 도메인 자격 증명이 필요하기 때문이라고 생각합니다.Rename-Computer에서 Get-WmiObject 호출로 자격 증명을 사용하려고 했지만 로컬 시스템에서 다른 자격 증명을 사용할 수 없다는 오류가 발생했습니다.

시도 3

  1. 호출 이름 바꾸기-컴퓨터
  2. 다시 시작
  3. 가입-컴퓨터를 도메인에 호출
  4. 다시 시작

결과: 모든 것이 예상대로 작동하지만 추가적인 재시작이 필요합니다.작동하지만 2단계에서 다시 시작하는 것을 없애고 싶습니다.

Add-Computer를 사용하면 됩니다. "-NewName"에 대한 매개 변수가 있습니다.

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

매개 변수 "-OPTIONS"도 확인할 수 있습니다.

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

이 솔루션은 효과가 있습니다.

  • 인증을 사용하여 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)

컴퓨터 이름을 바꾼 후 또는 도메인에 가입할 때 재부팅해야 하는 몇 가지 이유가 있습니다(기본적으로 AD에 의한 유효성 검사와 동일한 작업임).NT 기반 컴퓨터에서 애플리케이션 및 네트워크 서비스는 시작할 때 컴퓨터 이름을 읽습니다.컴퓨터 이름을 읽을 때는 이 시간이 유일하므로 재시작하지 않고 컴퓨터 이름을 변경하면 네트워크 및 응용 프로그램 서비스가 새 컴퓨터 이름에 응답하지 않습니다.네트워크 스택이 올바른 컴퓨터 이름에 응답하지 않으면 kerberos 핸드셰이크를 완료할 수 없기 때문에 처음 컴퓨터 이름을 변경한 후 도메인에 가입하려고 할 때 특히 중요합니다.

또 다른 이유는 여러 개의 레지스트리 키가 컴퓨터 이름을 사용하기 때문이며, 이러한 키는 메모리에 로드되는 동안 변경할 수 없기 때문입니다. 이는 부수적으로 일부 프로그램에서 설치 또는 제거를 완료하려면 재부팅이 필요한 이유이기도 합니다.

RunOnce 레지스트리 키(msdn.microsoft.com/en-us/library/aa376977%28v=vs.85%29.aspx) 를 사용하여 재부팅 시 도메인 가입 스크립트를 자동으로 실행할 수 있지만 두 작업 모두를 재부팅해야 합니다.

정말 까다롭기를 원한다면 재부팅할 때 도메인 가입 스크립트를 시작하도록 RunOnce 레지스트리 키를 설정하는 코드를 이름 변경 스크립트에 추가할 수 있습니다.이렇게 하려면 HKLM 하이브에 쓸 스크립트를 관리자로 실행해야 합니다(특히 UAC가 켜져 있는 경우 중요).

이렇게 하려면 Rename-Computer(컴퓨터 이름 바꾸기) 기능이 끝날 때 다음과 같은 것을 사용해야 합니다.

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

이렇게 하면 RunOnce 레지스트리 키에 "joinDomain"이라는 이름의 하위 키가 생성됩니다(Vista/7/2008을 실행 중이라고 가정). 값은 "C:\scripts\joinDomain.ps1"입니다.

만약 그것이 당신에게 도움이 되지 않는다면, 두번째 줄을 다음과 같이 바꾸도록 시도해 보세요.

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

혹시 고민이 있으시면 말씀해주세요.

Add-Computer에서 새 이름으로 가입 옵션을 사용하면 이 작업을 수행할 수 있습니다.

-- 새 이름으로 참여하기:새 도메인의 컴퓨터 이름을 새 이름 매개 변수로 지정한 이름으로 바꿉니다.NewName 매개 변수를 사용하면 이 옵션이 자동으로 설정됩니다.이 옵션은 시스템 이름 바꾸기 cmdlet과 함께 사용하도록 설계되었습니다.시스템 이름 바꾸기 cmdlet을 사용하여 시스템 이름을 변경하지만 시스템을 재시작하지 않은 경우 이 매개 변수를 사용하여 시스템을 새 이름의 도메인에 가입시킬 수 있습니다.

$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

저는 다음과 같은 방법으로 한 번의 재부팅으로 두 가지 작업을 모두 수행할 수 있었고 다음과 같은 JoinDomainOrWorkGroup 플래그와 함께 작동했습니다.이것은 Windows 2008 R2 Enterprise를 사용하는 새로운 빌드였습니다.컴퓨터 계정도 새 이름으로 AD에 생성이 된다는 것을 확인했습니다.

1 (0x1) 기본값입니다.컴퓨터를 도메인에 가입시킵니다.이 값을 지정하지 않으면 작업 그룹에 가입하는 컴퓨터가 됩니다.

32 (0x20) 컴퓨터가 이미 도메인에 가입되어 있는 경우에도 새 도메인에 가입 허용

$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)

오늘도 같은 걸 찾다가 드디어 방법을 찾았어요.도메인에 가입한 후 컴퓨터 이름을 변경할 것인지 묻는 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

관리자 자격 증명을 사용한 원스텝에서:

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

-DomainName = 도메인 이름(예: corp.local)

-ComputerName = 로컬 컴퓨터의 이름(예:현재 사용 중인 컴퓨터입니다.PS에서 "Hostname"을 사용하면 이름을 알 수 있습니다.

-NewName = 컴퓨터 이름을 변경할 대상(예: CORP-ANN-TX)

-Credentials = 이 작업을 수행할 수 있는 권한을 부여하는 관리자 자격 증명(예: Domain\Admin = example Corp\)제이스미스.비밀번호 입력을 위한 대화상자가 나타납니다.)

두 단계로:

1단계

Rename-Computer -NewName xxxx -Restart

여기서는 로컬 컴퓨터에 있는 것으로 가정하여 -ComputerName을 입력할 필요가 없습니다.이것을 원격으로 한다면 다른 이야기.

2단계

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

xxxxx\xxxx = 도메인 및 관리자 사용자 이름(예: Corp\Jsmith)

$domain = "domain.local"
$password = "Passw@rd" | 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

나를 위해 일함 ^^

아무도 대답하지 않기 때문에, 나는 무언가를 시도합니다.

왜 어텐션 원이 작동하지 않는지 알 것 같습니다.컴퓨터를 도메인에 가입시키는 것은 컴퓨터 이름을 바꾸는 것이기 때문입니다(도메인 이름 부분, 기계 이름으로 입력).

방식으로 하나요, WMI 으로 하려고 에 메소드가 있는 요? 방법이 있습니다.Win32_ComputerSystem부름반JoinDomainOrWorkgroup시킬 수 더 를 줄 입니다. 같은 수준에서 하는 것은 아마도 당신이 그것을 작동시킬 수 있는 더 많은 기회를 줄 것입니다.

컴퓨터 이름을 바꿀 때 많은 작업이 수행되고 MS가 해당 프로세스를 재생성하지 않으려 하거나 필요한 모든 비트를 포함할 수 없었기 때문에 컴퓨터 이름 바꾸기가 CTP3에서 제거되었습니다.제프리 스노버가 넷돔을 쓰라고 한 것 같아요명령행에서 컴퓨터 이름을 바꾸는 최선의 방법이기 때문에 대신 exe를 실행합니다.찾고 있던 답이 아니라 올바른 방향을 가리켜야 합니다.

DC에 시스템 계정을 먼저 생성하면 이름을 변경하고 한 번의 재부팅으로 도메인에 가입할 수 있습니다.

저는 자동화된 용량으로 작동한 다음을 제안하고 싶습니다.이름을 먼저 설정한 후 도메인에 가입하는 사이의 관계와 단계의 순서를 보여줍니다.스크립트에서 EC2용 Scalr CMP 및 Openstack 클라우드 인스턴스를 통해 Win2008r2 및 Win2012r2의 오케스트레이션 포인트로 사용합니다.

$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

한 가지 주의해야 할 사항은 자격 증명을 여기에 나와 있는 것처럼 하드 코드화된 것이 아니라 키 저장소에서 가져오는 것입니다. 그러나 이는 다른 주제입니다.

여러분, 답변 감사합니다.

컴퓨터 이름을 입력하라는 메시지가 표시되고 도메인에 가입한 다음 다시 시작합니다.

$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

또한 로컬 계정 추가 + 프롬프트에서 컴퓨터 이름 변경 + 프롬프트에서 도메인에 가입

#Set A local admin account
$computername = $env:computername   # place computername here for remote access
$username = 'localadmin'
$password = 'P@ssw0rd1'
$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

도메인에 가입하고 컴퓨터 이름을 서비스 태그로 변경하기 위해 테스트된 코드가 있습니다.

코드:

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

DOMAIN\USER= 컴퓨터를 도메인에 가입시킬 수 있는 도메인의 사용자에게 편집합니다.예:

mydomain\admin

DOMAIN= 가입할 도메인에 편집합니다.예:

mydomain.local

시스템 속성의 Windows(윈도우)에서 "컴퓨터 이름/도메인 변경"을 수행하는 또 다른 방법이 있습니다.

즉, 시스템 속성 | 컴퓨터 이름 탭을 실행한 다음 전원 셸을 사용하여 변경을 클릭합니다.그것은 다른 접근법이고, 내 상황에서 유용하고 다른 사람에게 도움이 될 수 있습니다.

add-type -AssemblyName 마이크로소프트.VisualBasic add-type - AssemblyName 시스템.Windows.양식

시스템 속성컴퓨터 이름 시작-슬립 –초 1

[마이크로소프트.비주얼 베이직.상호작용]::AppActivate("시스템 속성")

[시스템.창문들.Forms.SendKey]::보내기 대기("{TAB}") 시작-절전 –초 1

[시스템.창문들.Forms.SendKey]::보내기Wait("{ENTER}")

저는 조금 더 강화된 문제가 있었습니다.나는 기계의 이름을 바꾸고 나서 그것이 이미 회원으로 있던 도메인에 재-조(RE-JO)해야 했지만 어디서 해야 할지 찾지 못했지만 여기 있는 것과 매우 가까운 것 같습니다.위의 개별적인 해결책들은 그것을 하지 않지만, 어느 정도의 함께라면...이름을 바꾸려고 하면 거부됩니다.이름을 변경한 후 다시 가입하면 계정이 이미 있습니다.작업 그룹에 가입하여 도메인에서 탈퇴한 다음 이름 바꾸기를 실행하고 하나의 명령에 가입할 수 있습니다.

$Chops = Get-Credential 
# Or bring in a stored credential
$NewComputerName = "WhoImGonnaBe" 
# or value from CSV
$MyDomainName = "MyDomain"
Add-Computer -WorkgroupName NotADomain -force -DomainCredential $Chops
Add-Computer -DomainName $MyDomainName -Computername $ENV:Computername -NewName $NewComputerName -DomainCredential $Chops -Force -Restart
#  If running locally you really only need the -NewName and can omit the -Computername

언급URL : https://stackoverflow.com/questions/6217799/rename-computer-and-join-to-domain-in-one-step-with-powershell

반응형