Скрипт изменения имени компьютера
Цель: На компьютере под управлением 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.
После перезагружаем компьютер для завершения операции.
Через реестр
Для изменения компьютера в реестре нам нужно отредактироват два параметра:
- Ветка HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName, параметр ComputerName, значение — имя компьютера.
- Ветка 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.
Командлет 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 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
Как вы видите, теперь в атрибутах компьютера содержится нужная нам информация. Теперь мы можем выбирать компьютеры в 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
Как добавить имя пользователя в свойства компьютера в AD?
Рассмотрим более интересный и полезный пример использования командлета Set-ADComputer. Допустим, вы решили хранить в атрибутах каждого компьютера в Active Directory его текущий IP адрес и имя последнего залогиненого пользователя.
IP адрес компьютера мы будем хранить в атрибуте description, а имя пользователя, который работает за компьютером – в атрибуте ManagedBy.
В первую очередь необходимо делегировать права группе Domain Users (или другой группе безопасности пользователей) на OU с компьютерами на изменение значений в полях объктов типа Computer: ManagedBy и description (Write Description + Write Managed By).
Теперь создаем новую политику со следующим 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 теперь есть активная ссылка на учетную запись пользователя, который последним регистрировался на данном компьютере.
Теперь вы можете быстро найти компьютеры в домене по 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.
Читайте также: