ConfigMgr 2012 Name Computer During OSD Task Sequence
Problem
I needed a way to prompt for computer name during the OSD
sequence. I found an old post by texasmcse found here
that got me started. The second part that was needed was to get some
validation around the name that is input so it would follow our naming
standards.
Resolution
I created a new script with parts of code from the post
above to prompt for a site code, then prompt for computer role, and finally it
takes the last 7 characters of the serial to form the computer name. It uses a
csv file to validate the site code and role are correct before moving on. If
there is an incorrect configuration it will respond and start over. It will
check the computer name that is stored in the task sequence variable
_SMSTSMachineName. If the variable is set to MININT it will prompt for
computer naming. If it is set to something else, it will utilize what
ConfigMgr is passing it. I hope this is useful to others. I am sure the code
could be cleaner but it works well. In the code the CSV file is named Win10OUMap.csv.
The Win10OUMap.csv file has 5 columns in the following order;
Name,OU,BusinessUnit,SiteCode,Role. This is a ; delimited file. The Name
column is what is used to validate the name of the computer as it will contain
the site and role format to ensure it is valid. When you modify the script
file remember that when you import a CSV file in VB the first column is 0 not
1. Again hope this helps.
Code:
'On Error Resume Next
Set WshShell =
WScript.CreateObject("WScript.Shell")
Set NetworkObject = CreateObject("WScript.Network")
Set objFSO =
CreateObject("Scripting.FileSystemObject")
set SCCMenv =
CreateObject("Microsoft.SMS.TSEnvironment")
'Find if known in SCCM
NameLookup = SCCMenv("_SMSTSMachineName")
'NameLookup = "MININT-234343"
SearchChar = "MININT"
'msgbox NameLookup
StrComputer = "."
IF inStr(NameLookup , SearchChar) Then
SiteCodeMatch = 10
SiteRoleMatch = 10
PCNameMatch = 10
Validated = False
'Get Computer Serial Number
Set objWMIService =
GetObject("winmgmts:" &
"{impersonationLevel=impersonate}!\\" & strComputer &
"\root\cimv2")
Set colSMBIOS = objWMIService.ExecQuery
("Select * from Win32_SystemEnclosure")
For Each objSMBIOS in colSMBIOS
SNStr = objSMBIOS.SerialNumber
SNShort = RIGHT(SNStr,7)
'msgbox snshort
Do While answer <> vbYes
Do While Validated = False
Do while
SiteCodeMatch < 20
set
SiteCodeFile = objFSO.OpenTextFile("Win10OUMap.csv")
SiteCode
= InputBox ("Enter the 4 Character Site Code" & vbCrLf &
"I.e. CORP=Corporate, OLME=Mesa, INDY=Indianapolis etc..",
"Prompt for Site Code:",,0,0)
SiteCode
= UCase(SiteCode)
'msgbox
SiteCode
Do
while NOT SiteCodeFile.AtEndOfStream
arrStrSiteCode
= split(sitecodefile.ReadLine,";")
strSiteCode
= arrStrSiteCode(3)
IF
SiteCode = strSiteCode Then
'msgbox
"EQUALS " & strSiteCode & " " & SiteCode
'msgbox
"I Match"
SiteCodeMatch
= 20
Exit
Do
Else
'msgbox
"Not Equal " & strSiteCode & " " & SiteCode
'msgbox
"I dont match"
End
IF
loop
SiteCodeFile.Close
IF
SiteCodeMatch < 20 Then
MsgBox
"Invalid Site Code! Site Codes are defined as a 4 Character Location,
I.e. CORP=Corporate, OLME=Mesa OpenLane, INDY=Indianapolis, BOST=Boston,
OLTO=Toronto Openlane etc.. If you do not know your site code please contact
the ServiceDesk.", 69680
Else
End
IF
Loop
'wscript.echo
SiteCode
'wscript.echo
SiteCodeMatch
Do while
RoleCodeMatch < 20
set
RoleCodeFile = objFSO.OpenTextFile("Win10OUMap.csv")
RoleCode
= InputBox ("Enter the Single Character function role of the
Computer," & vbCrLf & "i.e. W=Workstation L=Laptop K=Kiosk,
B=Block, D=Digital Arb etc...", "Enter the Computer Role for "
& sitecode & ":",,0,0)
RoleCode
= UCase(RoleCode)
'msgbox
RoleCode
Do
while NOT RoleCodeFile.AtEndOfStream
arrStrRoleCode
= split(RoleCodefile.ReadLine,";")
strRoleCode
= arrStrRoleCode(4)
IF
RoleCode = strRoleCode Then
'msgbox
"EQUALS " & strRoleCode & " " & RoleCode
'msgbox
"I Match"
RoleCodeMatch
= 20
Exit
Do
Else
'msgbox
"Not Equal " & strRoleCode & " " & RoleCode
'msgbox
"I dont match"
End
IF
loop
RoleCodeFile.Close
IF
RoleCodeMatch < 20 Then
MsgBox
"Invalid Role Code! Roles are Defined as a single character for the
function of the Computer i.e. W=Workstation L=Laptop, K=Kiosk, B=Block,
D=Digital Arb etc.. If you do not know the Function codes for site " &
SiteCode & " please contact the ServiceDesk.", 69680
Else
End
IF
Loop
'wscript.echo
RoleCode
'wscript.echo
RoleCodeMatch
PCName =
SiteCode & "-" & RoleCode & "-" & SNShort
set PCNameFile
= objFSO.OpenTextFile("Win10OUMap.csv")
Do while NOT
PCNameFile.AtEndOfStream
arrStrPCName
= split(PCNamefile.ReadLine,";")
strPCName
= arrStrPCName(0)
IF
inStr(PCName , strPCName) Then
'msgbox
"EQUALS " & strPCName & " " & PCName
'msgbox
"I Match"
PCNameMatch
= 20
' Exit
Do
Else
'msgbox
"Not Equal " & strPCName & " " & PCName
'msgbox
"I dont match"
End
IF
loop
PCNameFile.Close
IF PCNameMatch
< 20 Then
MsgBox
"PC Name is Invalid! PC Name does not meet the standards in the PC Name
to OU Map file. If you do not know the naming standards for the site "
& SiteCode & " please contact the ServiceDesk.", 69680
Validated =
False
SiteCodeMatch
= 10
RoleCodeMatch
= 10
Else
'MsgBox
"PCNameValid"
Validated =
True
End IF
Loop
If PCNameMatch
= 20 Then
answer
= MsgBox("Are you sure this correct?" & vbCrLf & PCName,
69668, "Verify Name")
IF
answer = vbNo then
SiteCodeMatch
= 10
RoleCodeMatch
= 10
Validated
= False
Else
PCNameFinal
= PCName
'msgbox
PCNameFinal
SCCMenv("OSDComputerName")
= PCNameFinal
End
If
Else
answer = vbNo
End IF
loop
Next
Else
'msgbox "Did not match"
End IF