На самом деле есть несколько причин, по которым вам нужно перезагрузить компьютер после переименования компьютера или при присоединении к домену (что по сути является той же самой операцией с проверкой AD). Во-первых, на компьютерах на базе NT (я полагаю, это началось с Windows 2000), приложения и сетевые службы читают имя компьютера при запуске. Это только раз, когда они читают имя компьютера, поэтому, если вы переименуете компьютер без перезагрузки, сетевые службы и службы приложений не будут отвечать на новое имя компьютера. Это особенно важно, когда вы сначала переименовываете компьютер, а затем пытаетесь присоединиться к домену, поскольку рукопожатие 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 (при условии, что вы работаете в Vista / 7/2008) с именем "joinDomain" со значением "C: \ scripts \ joinDomain.ps1"
Если это не сработает, попробуйте изменить вторую строку следующим образом:
Set-ItemProperty -Path . -Name joinDomain -Value 'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe "C:\scripts\joinDomain.ps1"'
Дайте мне знать, если у вас возникли проблемы.