使用PowerShell自动命名计算机获取主机名和MDT

时间:2015-10-16 08:47:54

标签: powershell deployment mdt

我的问题是,是否可以在企业环境中获取计算机的域名,并将其用作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用作新计算机名?

1 个答案:

答案 0 :(得分:0)

以下脚本将使用IP地址查询您的DNS,并在您的域中获取计算机的名称,并将其作为OSDComputerName

传回MDT

这适用于计算机名为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。

希望这有助于某人!