| ' 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 |