Скрипт изменения имени компьютера

Обновлено: 05.07.2024

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

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

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

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

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

Переименовать компьютер

Согласно моим исследованиям в Интернете, PowerShell 2.0 в один момент перед выпуском имел встроенный командлет с именем Rename-Computer, но он был удален по причинам, неизвестным в CTP 3. Моя версия использует WMI.

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

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

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

Попытка 1

  • Вызов Переименовать-компьютер
  • Вызов Join-ComputerToDomain
  • Restart

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

Попытка 2

  • Вызов Join-ComputerToDomain
  • Вызов Переименовать-компьютер
  • Restart

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

Попытка 3

  • Вызов Переименовать-компьютер
  • Restart
  • Вызов Join-ComputerToDomain
  • Restart

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

ОТВЕТЫ

Ответ 1

Вы можете просто использовать Add-Computer, есть параметр для "-NewName"

Пример: Add-Computer -DomainName MYLAB.Local -ComputerName TARGETCOMPUTER -newname NewTARGETCOMPUTER

Возможно, вы захотите также проверить параметр "-OPTIONS"

Ответ 2

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

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

Ответ 3

Существует несколько причин, по которым вам необходимо перезагрузить компьютер после переименования компьютера или при подключении к домену (который в основном является той же операцией с проверкой AD). Один из них заключается в том, что на компьютерах, работающих на NT (я думаю, что это началось с Windows 2000), службы приложений и сети считывают имя компьютера при запуске. Это единственный раз, когда они читают имя компьютера, поэтому, если вы переименуете компьютер без перезагрузки, сетевые службы и приложения не будут реагировать на новое имя компьютера. Это особенно важно, когда вы сначала переименовываете компьютер, а затем пытаетесь присоединиться к домену, поскольку рукопожатие kerberos не может быть завершено без сетевого стека, отвечающего на правильное имя компьютера.

Другая причина заключается в том, что несколько ключей реестра используют имя компьютера, и эти ключи не могут быть изменены во время их загрузки в память (это, кстати, также почему некоторые программы требуют перезагрузки для завершения установки или удаления).

Если вы действительно хотите получить сложную задачу, вы можете добавить код в свой rename script, который установил бы раздел реестра RunOnce для запуска соединения домена script при перезагрузке. Имейте в виду, что если вы сделаете это, то script, который будет записывать в улей HKLM, должен запускаться как администратор (особенно важно, если вы включили UAC).

Если вы хотите сделать это, вы должны использовать что-то вроде этого в конце своей функции Rename-Computer:

Это создаст подраздел в разделе реестра RunOnce (при условии, что вы используете Vista/7/2008) с именем "joinDomain" со значением "C:\scripts\joinDomain.ps1"

Если это не сработает для вас, попробуйте изменить вторую строку следующим образом:

Сообщите мне, есть ли у вас проблемы.

Ответ 4

Я смог выполнить обе задачи с одной перезагрузкой, используя следующий метод, и работал со следующими флагами JoinDomainOrWorkGroup. Это была новая сборка и использование Windows 2008 R2 Enterprise. Я подтвердил, что он также создает учетную запись компьютера в AD с новым именем.

1 (0x1) По умолчанию. Присоединяется к компьютеру в домене. Если это значение не указано, объединение - это компьютер для рабочей группы

32 (0x20) Позволяет присоединиться к новому домену, даже если компьютер уже подключен к домену

Ответ 5

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

Ответ 6

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

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

Ответ 7

Как никто не отвечает, я что-то пробую:

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

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

Ответ 8

Переименовать-компьютер был удален из CTP3, потому что многое произошло при переименовании компьютера и MS, либо не хотели воссоздавать этот процесс, либо не могли включать все необходимые бит. Я думаю, Jefferey Snover сказал, что просто использует netdom.exe вместо этого, так как это лучшая практика для переименования компьютера в командной строке. Не тот ответ, который вы искали, но должен указать вам в правильном направлении.

Ответ 9

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

Ответ 10

Я хотел бы предложить следующее, которое работало в автоматическом режиме для меня. Он показывает последовательность шагов и взаимосвязь между установкой имени сначала, а затем присоединением к домену. Я использую это в script как точку оркестровки для Win2008r2 и win2012r2 через Scalr CMP для экземпляров облаков EC2 и Openstack.

Одно предостережение состоит в том, чтобы быть осторожным с учетными данными, вытаскивать их из хранилища ключей, а не жестко закодировать, как показано здесь. но это другая тема.

Спасибо, всем, за ваши ответы.

Ответ 11

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

Ответ 12

Также добавьте локальную учетную запись + переименуйте компьютер в приглашение + присоединиться к домену в promt

Ответ 13

У меня есть проверенный код, чтобы присоединиться к домену и переименовать компьютер в servicetag.

DOMAIN\USER = редактировать пользователю домена, который может присоединиться к компьютерам в домене. Пример:

DOMAIN = изменить домен, к которому вы хотите присоединиться. Пример:

Ответ 14

В одноэтапных учетных данных w/admin:

-DomainName = Ваше доменное имя (например, corp.local)

-ComputerName = Имя вашего локального компьютера (например, компьютер, на котором вы находитесь. Используйте "Имя хоста" в PS, чтобы узнать имя).

-NewName = Что вы хотите переименовать на компьютере (например, CORP-ANNE-TX)

-Credentials = Ваши учетные данные администратора, которые дают вам авторизацию для выполнения этого действия (например, Domain\Admin = example Corp\JSmith. Появится диалоговое окно для ввода вашего пароля)

Здесь вам не нужно указывать -ComputerName, так как предполагается, что вы находитесь на локальном компьютере. Если вы делаете это дистанционно; другой рассказ.

xxxx\xxxx = Ваш домен и имя пользователя admin (например, Corp\Jsmith)

Ответ 15

Вот еще один способ сделать с Windows "Свойства компьютера" "Изменение имени компьютера/домена".

Другими словами, поднимите Свойства системы | Вкладка "Имя компьютера" , затем нажмите Изменить с помощью powershell. Это другой подход, он полезен в моей ситуации, и это может быть полезно для кого-то другого.

Удалённое переименование доменных компьютеров по списку из CSV


Для возможности удалённого централизованного переименования выборочного множества компьютеров под управлением Windows 10 в домене Active Directory сначала потребуется подготовить список компьютеров, подлежащих переименованию, в формате CSV в файл, например, с именем Rename-Computers-List.csv . Файл будет содержать в каждой отдельной строке старое и новое имя компьютера через разделитель - запятую. Первая строка файла должна остаться пустой.

Пример заполненного файла Rename-Computers-List.csv :


Рядом с файлом разместим сам скрипт следующего содержания:

Процедура переименования компьютеров в домене Active Directory подразумевает наличие административных прав, как на уровне компьютера, который переименовывается, так и на уровне объекта компьютера в каталоге AD. На практике встречаются организации, где эти разные уровни прав разделены между отдельными административными учётными записями. Данный скрипт учитывает такое разделение и отдельно запрашивает учётную запись уровня администратора объектов в домене …


… а затем учётную запись администратора рабочих станций для возможности удалённого подключения к ним …


После запроса учётных данных выполняется проверка наличия файла Rename-Computers-List.csv , затем по полученному из этого файла списка компьютеров (перед попыткой переименования) проверяется доступность каждого отдельного компьютера в сети.


Если компьютер окажется недоступен (или имя компьютера не сможет быть разрешено в DNS в IP-адрес), мы получим ошибку о недоступности хоста:


Обратите внимание на то, что скрипт не инициирует перезагрузки удалённых компьютеров после переименования, хотя командлет Rename-Computer такую возможность имеет при добавлении параметра -Restart .

Перед более массовым переименованием рекомендуется протестировать работу скрипта на небольшой группе компьютеров.

Проверено на следующих конфигурациях:

Версия PS на сервере Версия ОС на клиентах
PowerShell 5.1.18362.752 Windows 10 Pro 10.0.18363


Автор первичной редакции:
Алексей Максимов
Время публикации: 11.09.2020 16:43

В статье представлены распространенные способы смены имени компьютера:

Данные рекомендации подойдут для разных версий операционной системы Windows от XP до 10.

Универсальный через графический интерфейс

Открываем свойства компьютера. Для этого открываем проводник и кликаем правой кнопкой мыши по Компьютер и выбираем Свойства:

Открываем свойства компьютера

. или вводим команду:

control /name microsoft.system

В открывшемся окне в разделе «Имя компьютера, имя домена и параметры рабочей группы» нажимаем Изменить параметры:

Переходим к изменению имени компьютера

В следующем окне на вкладке Имя компьютера нажимаем Изменить:

На вкладке Имя компьютера кликаем Изменить

Вводим имя компьютера:

Новое имя для компьютера

* если кликнуть по кнопке Дополнительно, мы сможем добавить DNS-суффикс и поменять NetBIOS-имя компьютера.

Нажимаем OK два раза и перезагружаем компьютер.

Графический интерфейс Windows 10

В Windows 10 появился дополнительный вид панели управления. Ее также можно использовать для смены имени компьютера.

Кликаем по Пуск и нажимаем на изображение шестеренки:

Кликаем по Пуск и переходим к настройке параметров

Кликаем по Система:

Переходим к настройка системы

В разделе О системе:

Раздел параметров О системе

. кликаем по Переименовать этот ПК:

Переход к переименовыванию ПК

Вводим новое имя и нажимаем Далее:

Вводим новое имя для компьютера

Через командную строку

Запускаем командную строку от имени администратора и вводим следующую команду:

> netdom renamecomputer %COMPUTERNAME% /Newname "computername"

* computername — новое имя компьютера

После ввода система запросит подтверждение — отвечаем Y и нажимаем Enter.

Для вступления изменений в силу, перезагружаем компьютер.

С помощью Powershell

Запускаем Powershell от имени администратора и вводим следующую команду:

> netdom renamecomputer "$env:COMPUTERNAME" /Newname "computername"

Как и с командной строкой, система запросит подтверждение операции, на которое отвечаем Y.

После перезагружаем компьютер для завершения операции.

Через реестр

Для изменения компьютера в реестре нам нужно отредактироват два параметра:

  1. Ветка HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName, параметр ComputerName, значение — имя компьютера.
  2. Ветка HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters, параметр NV HostName, значение — имя компьютера.

Для внесения изменений можно воспользоваться утилитой regedit или командами:

reg add "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d "Office-3" /f

reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v ComputerName /t REG_SZ /d "Office-3" /f

* в данном примере мы задаем имя компьютеру Office-3.

date

20.12.2019

directory

Active Directory, PowerShell

comments

комментариев 11

Командлет Set-ADComputer позволяет изменить атрибуты учетной записи компьютера в Active Directory. В этой статье мы покажем, как с помощью логон скриптов и командлета Set-ADComputer записать имя текущего пользователя и IP адрес в свойства компьютера в AD. Такой скрипт может быть полезен, когда вам нужно найти в домене компьютер, за которым работает конкретный пользователь.

Использование Set-ADComputer для изменения атрибутов компьютера в AD

Командлет Set-ADComputer входит в состав модуля Active Directory для PowerShell и требует наличие установленного модуля на компьютере. Рассмотрим как пользоваться командлетом Set-ADComputer. Попробуем добавить в свойства компьютера в AD наименование компании и департамента. Сначала с помощью Get-ADComputer проверим, что указано у конкретного компьютера домена в полях company, department и description.

Get-ADComputer dNSHostName,operatingSystem,company,department, description

Get-ADComputer SRV-MAN01 -properties *|select-object dNSHostName,operatingSystem,company,department, description|ft -wrap -auto

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

Попробуем изменить описание компьютера командой:

Set-ADComputer -Identity SRV-MAN01 -Add @

Можно указать местоположение компьютера:

Set-ADComputer –Identity SRV-MAN01–Location “Spb/Russia”

Если нужно задать несколько параметров компьютера, воспользуйтесь такой конуструкцией PowerShell:

$Server = Get-ADComputer -Identity SRV-MAN01
$Server.company = "contoso"
$Server.department = "IT"

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

Get-ADComputer SRV-MAN01 -properties *|select-object dNSHostName,operatingSystem,company,department, description|ft -wrap -auto

Set-ADComputer изменить свойства компьютера в AD

Как вы видите, теперь в атрибутах компьютера содержится нужная нам информация. Теперь мы можем выбирать компьютеры в AD на основе этих критериев. Например, я хочу выбрать все компьютеры департамента IT компании Contoso. Команда для выборки может выглядеть так:

Get-ADComputer -Filter -properties *|select-object dNSHostName,operatingSystem,company,department, description|ft -wrap -auto

Командлет Set-ADComputer также позволяет заблокировать (разблокировать)учетную запись компьютера в AD:

Set-ADComputer pc-name -Enabled $false

Set-ADComputer - заблокировать компьютер

Как добавить имя пользователя в свойства компьютера в AD?

Рассмотрим более интересный и полезный пример использования командлета Set-ADComputer. Допустим, вы решили хранить в атрибутах каждого компьютера в Active Directory его текущий IP адрес и имя последнего залогиненого пользователя.

IP адрес компьютера мы будем хранить в атрибуте description, а имя пользователя, который работает за компьютером – в атрибуте ManagedBy.

В первую очередь необходимо делегировать права группе Domain Users (или другой группе безопасности пользователей) на OU с компьютерами на изменение значений в полях объктов типа Computer: ManagedBy и description (Write Description + Write Managed By).

делегирование прав Write Description + Write Managed By в AD на компьютеры

Теперь создаем новую политику со следующим Logon скриптом PowerShell (User Configuration -> Policies -> Windows Settings -> Scripts -> Logon), который должен запускаться при входе пользователя в систему:

$curhostname=$env:computername
$env:HostIP = (
Get-NetIPConfiguration |
Where-Object $_.IPv4DefaultGateway -ne $null -and
$_.NetAdapter.Status -ne "Disconnected"
>
).IPv4Address.IPAddress
$currus_cn=(get-aduser $env:UserName -properties *).DistinguishedName
$ADComp = Get-ADComputer -Identity $curhostname
$ADComp.ManagedBy = $currus_cn
$ADComp.description = $env:HostIP
Set-ADComputer -Instance $ADComp

Данный PowerShell скрипт запускается под пользователем, определяет имя и IP адрес текущего компьютера, CN пользователя и сохраняет их в учетной записи компьютера в AD.

Эту политику нужно прилинковать на контейнер с компьютерами и включить замыкание групповой политики Configure user Group Policy Loopback Processing mode (см. здесь).

Теперь при входе пользователя в систему на компьютере отрабатывает данный скрипт и обновляет описание компьютера в AD.

В консоли ADUC теперь отображаются IP адреса компьютеров, а в свойствах компьютера на вкладке Managed By теперь есть активная ссылка на учетную запись пользователя, который последним регистрировался на данном компьютере.

имя пользователя в свойствах компьютера ad

Теперь вы можете быстро найти компьютеры в домене по IP адресу:

get-adcomputer -filter -properties *|select name,description,managedBy

Или можно найти все компьютеры в домене, на которых залогинен конкретный пользователь (командлет Get-AdUser испоьзуется для получения DistinguishedName пользователя):

$user='daivanov'
$user_cn=(get-aduser $user -properties *).DistinguishedName
Get-ADComputer -Filter "ManagedBy -eq '$user_cn'" -properties *|select name,description,managedBy|ft

поиск компьютеров в ad по имени пользователя

Аналогичным образом вы можете записать в свойства аккаунтов компьютеров в AD любую информацию о рабочей станции или пользователе, и использовать ее для поиска (выборки) компьютеров в AD.

Читайте также: