Автоматически присваивать имя компьютеру с помощью PowerShell, получать имя хоста и MDT
У меня вопрос: возможно ли получить доменное имя компьютера в корпоративной среде и использовать его в качестве имени компьютера при развертывании MDT.
Мне известно, что в MDT есть опция для установки имени компьютера: щелкните правой кнопкой мыши на Deployment Share - Rules
Мне бы очень хотелось использовать переменную $CNAME (имя компьютера), которую я могу успешно получить, используя следующие команды powershell, в качестве переменной для "OSDComputerName=" в настройках deploymentshare.
Этот сценарий PS дает мне правильное имя:
1 Получить IP
$IP=((ipconfig | findstr [0-9].\.)[0]).Split()[-1]
2 У НСЛООКУП ИП
$Lookup=NSLOOKUP $IP
3 Настройте вывод с помощью регулярных выражений и модификаторов -replace, чтобы они содержали только реальное имя компьютера без суффикса DNS
$regex=$Lookup -match "(^.*\bName\b\:?\s*\b)[\w\d\s\-]*"
$replace1=$regex -replace "Name: "
$CNAME=$replace1 -replace "*DNSSUFFIX*"
Это возможно? В противном случае можно ли каким-либо образом использовать сценарий PowerShell для переименования компьютера после завершения развертывания? Например, какую команду я могу использовать, чтобы использовать переменную $ CNAME в качестве имени нового компьютера?
1 ответ
Следующий скрипт будет использовать IP-адрес для запроса вашего DNS, получения имени компьютера в вашем домене и передачи его обратно в MDT как OSDComputerName
Это работает в среде, где компьютеры называются как name.xx.yournamespace.de
Добавьте nslookup.exe из Windows ISO в ваш загрузочный образ WinPE (смонтируйте WinPE WIM с DISM и скопируйте nslookup.exe в System32)
Настройте свои правила customsettings.ini, добавьте:
UserExit=Setname.vbs
OSDComputerName=#SetName("%IPAddress%")#
Добавьте сценарий UserExit в вашу папку сценариев Deploymentshare, назовите его Setname.vbs
Function UserExit(sType, sWhen, sDetail, bSkip)
UserExit = Success
End Function
Function SetName(sIP)
Dim rName
Set objShell = createobject("wscript.shell")
strParams = "%comspec% /c nslookup " & sIP & ""
Set objExecObj = objShell.exec(strParams)
Do While Not objExecObj.StdOut.AtEndOfStream
strText = objExecObj.StdOut.Readline()
If instr(strText, "dns-9") Then
strServer = trim(replace(strText,"(null):",""))
Elseif instr (strText, "xx.yournamespace.de") Then
strhost = trim(replace(strText,"(null)",""))
End if
Loop
rName = replace(strhost, ".xx.yournamespace.de", "")
SetName = rName
End Function
Отрегулируйте замены в вашей сети. SetName
будет передан обратно в MDT.
Надеюсь, это кому-нибудь поможет!