blob: 5cec3fbcf26ac9a33ddfca265357dd5888063ba5 [file] [log] [blame]
' Licensed to the Apache Software Foundation (ASF) under one or more
' contributor license agreements. See the NOTICE file distributed with
' this work for additional information regarding copyright ownership.
' The ASF licenses this file to You under the Apache License, Version 2.0
' (the "License"); you may not use this file except in compliance with
' the License. You may obtain a copy of the License at
'
' http://www.apache.org/licenses/LICENSE-2.0
'
' Unless required by applicable law or agreed to in writing, software
' distributed under the License is distributed on an "AS IS" BASIS,
' WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
' See the License for the specific language governing permissions and
' limitations under the License.
' NOTICE: This script relies on the wsname.exe utility which is no longer
' available. This script will be rewritten for the 2.2 release of VCL. In the
' meantime, this script is being left intact in case you have a previously
' released version of wsname.exe or are able to obtain it from another source. You
' should not encounter problems if you do not have wsname.exe, however, computers
' will be given random names. This script only applies to Windows images.
strCurrentImagePath = "C:\Cygwin\home\root\currentimage.txt"
strSetnameLogfile = "C:\Cygwin\home\root\VCL\Logs\sysprep_cmdlines\wsname_output.log"
strWSNamePath = "C:\Cygwin\home\root\VCL\Utilities\WSName\wsname.exe"
Set objShell = WScript.CreateObject("WScript.Shell")
'----------------------------------------------------------------------------
WScript.Echo "Attempting to retrieve image information from currentimage.txt"
' Read the currentimage.txt file and find the prettyname= line
strImagePrettyname = GetKeyValue(strCurrentImagePath, "prettyname", "=")
' If image pretty name wasn't found use the computer name for My Computer
If Len(strImagePrettyname) > 0 Then
WScript.Echo "Image prettyname found in currentimage.txt: " & strImagePrettyname
strComputerDescription = strImagePrettyname
Else
WScript.Echo "Image prettyname could not be retrieved from currentimage.txt"
End If
'----------------------------------------------------------------------------
' Read the currentimage.txt file and get the image name
strImageName = GetImageName(strCurrentImagePath)
' Check if image name was found
If Len(strImageName) > 0 Then
WScript.Echo "Image name found in currentimage.txt: " & strImageName
strComputerDescription = strComputerDescription & " (" & strImageName & ")"
Else
WScript.Echo "Image name could not be retrieved from currentimage.txt"
End If
'----------------------------------------------------------------------------
' Read the currentimage.txt file and find the id= line
strImageID = GetKeyValue(strCurrentImagePath, "id", "=")
' Check if image ID wasn found
If Len(strImageID) > 0 Then
WScript.Echo "Image ID found in currentimage.txt: " & strImageID
strComputerName = "$DNS-" & strImageID
Else
WScript.Echo "Image ID could not be retrieved from currentimage.txt"
strComputerName = "$DNS"
End If
'----------------------------------------------------------------------------
print_hr
WScript.Echo "Attempting to rename the computer using wsname.exe"
' Execute the wsname.exe utility
' Set the computer name to the hostname ($DNS) followed by the image ID
strWsnameCommand = strWSNamePath & " /N:" & strComputerName & " /LOGFILE:" & strSetnameLogfile & " /IGNOREMEMBERSHIP /ADR /NOSTRICTNAMECHECKING /LONGDNSHOST 2>&1"
WScript.Echo "wsname.exe command: " & strWsnameCommand
On Error Resume Next
objShell.Exec(strWsnameCommand)
if not err.number=0 then
WScript.Echo "Error running wsname.exe: " & err.Description
vbCritical err.clear
else
WScript.Echo "Successfully ran wsname.exe"
end if
'----------------------------------------------------------------------------
print_hr
WScript.Echo "Attempting to set the computer description to: " & strComputerDescription
' Modify the registry key that controls how My Computer is displayed
' Set it to the image prettyname
strComputerDescriptionReg = "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\"
objShell.RegWrite strComputerDescriptionReg & "srvcomment", strComputerDescription, "REG_SZ"
if not err.number=0 then
WScript.Echo "Error occurred setting computer description: " & err.Description
vbCritical err.clear
else
WScript.Echo "Successfully set computer description"
end if
WScript.Quit
'----------------------------------------------------------
Function GetKeyValue(strFilePath, strKey, strDeliminator)
Set objShell = WScript.CreateObject("WScript.Shell")
strCommand = "%comspec% /c type " & strFilePath
Set objExecObject = objShell.Exec(strCommand)
if not err.number=0 then
WScript.Echo "Error running command: " & strCommand & ", " & err.Description
vbCritical err.clear
GetKeyValue = ""
else
strPattern = "^" & strKey & strDeliminator & "(.*)$"
Do While Not (objExecObject.StdOut.atEndOfStream) And Len(strValue)=0
strLine = objExecObject.StdOut.ReadLine()
strValue = RegExpVal(strPattern, strLine, 0)
Loop
GetKeyValue = strValue
end if
End Function
'----------------------------------------------------------
Function GetImageName(strFilePath)
Set objShell = WScript.CreateObject("WScript.Shell")
strCommand = "%comspec% /c type " & strFilePath
Set objExecObject = objShell.Exec(strCommand)
if not err.number=0 then
WScript.Echo "Error running command: " & strCommand & ", " & err.Description
vbCritical err.clear
GetKeyValue = ""
else
strLine = objExecObject.StdOut.ReadLine
GetImageName = strLine
end if
End Function
'----------------------------------------------------------
Function RegExpVal(strPattern, strString, idx)
On Error Resume Next
Dim regEx, Match, Matches, RetStr
Set regEx = New RegExp
regEx.Pattern = strPattern
regEx.IgnoreCase = True
regEx.Global = True
Set Matches = regEx.Execute( strString )
RegExpVal = Matches( 0 ).SubMatches( idx )
End Function
'----------------------------------------------------------
Function print_hr
WScript.Echo "----------------------------------------------------------------------"
End Function