我的问题是,是否可以在企业环境中获取计算机的域名,并将其用作MDT部署中的计算机名称。
我知道MDT有一个在这里设置计算机名称的选项:右键单击部署共享 - 规则
我很想使用变量$ CNAME(计算机名称),我可以使用以下powershell命令作为deploymentshare设置中“OSDComputerName =”的变量成功获取该变量。
这个ps脚本为我命名正确:
1获取IP
$Lookup=NSLOOKUP $IP
2执行IP的NSLOOKUP
$regex=$Lookup -match "(^.*\bName\b\:?\s*\b)[\w\d\s\-]*"
$replace1=$regex -replace "Name: "
$CNAME=$replace1 -replace "*DNSSUFFIX*"
3使用正则表达式和-replace修饰符调整输出,以仅包含不带DNS后缀的实际计算机名
Fuc<double, double> Parse(string Expression)
{
MathParser P = new MathParser();
Variable V = new Variable("x", 0); // The Variable you use with default value
P.Variables.Add(V);
P.Parse(Expression);
return (Input) =>
{
V.Value = Input;
return P.Evaluate();
}
}
这可能吗?否则,我可以以任何方式使用PowerShell脚本在部署完成后重命名计算机吗?例如。我可以使用哪个命令将变量$ CNAME用作新计算机名?
答案 0 :(得分:0)
以下脚本将使用IP地址查询您的DNS,并在您的域中获取计算机的名称,并将其作为OSDComputerName
这适用于计算机名为name.xx.yournamespace.de
将Windows ISO中的nslookup.exe添加到WinPE启动映像(使用DISM挂载WinPE WIM并将nslookup.exe复制到System32中)
调整customsettings.ini规则,添加:
UserExit=Setname.vbs
OSDComputerName=#SetName("%IPAddress%")#
将UserExit脚本添加到Deploymentshare Scripts-Folder,将其命名为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。
希望这有助于某人!