ESXi : Clone SQL Server

ESXi : Clone SQL Server

When cloning an SQL VM guest you’ll find that the server itself is unaware of the change in hostname. This can be verified using the command:


If you find that your cloned SQL server displays the wrong @@servername use the following commands to fix it:



Finally restart the SQL service using services.msc. verify the name has changed using the same command as above, SELECT @@SERVERNAME.


ESXi : Clone Windows 2008 R2

ESXi : Clone Windows 2008 R2

I ran into some issue recently when cloning an existing Windows 2008 R2 system, when manually using sysprep or using VMware to customise it I eventually ended up with the clone failing to boot with a C0000021C BSOD error.

The get around this I performed the following steps:

  1. Power off Source
  2. Change Windows 2008 R2 source type to Windows 2008 64-bit
  3. Clone VM
  4. Change source back to Windows 2008 R2 and power on
  5. Power on Clone allow to run sysprep
  6. Shutdown Clone
  7. Change clone to Windows 2008 R2

Don’t ask me why it works, it just does….

Windows : Uninstalling a hotfix from the Recovery Console

Windows : Uninstalling a hotfix from the Recovery Console

Use the following steps to remove a hotfix from a Windows Operating system whilst running from the recovery console:
1) Ensure you have a record of installed hotfixes/patches (the KB numbers are the important bit!) that you wish to remove.
2) Boot to the recovery console
3) Check for installed patches/hotfixes; dir $*
4) Change to the directory of the hotfix/patch you wish to remove, change text in red to match the KB number: CHDIR $NTUninstallKBXXXXXXXXX
5) To uninstall execute the spunist.txt file; BATCH spuninst.txt

DNS Scavenging : Existing Environment

DNS Scavenging : Existing Environment

Many peopple are wary of the impact of enabling DNS scavenging on an existing environment. Th following command/script will allow you to identify all of the records that will be deleted if you were to enable scavenging.

First execute the command: dnscmd SRV /enumrecords zone @ /continue > DNS_Records.txt

Save the text below into a file names DNSScavenge.vbs, then execute the command: cscript.exe /nologo DNSScavengeTest.vbs DNS_Records.txt >> DNS.csv


Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Const AGING_TOKEN = “[Aging:”

Const DDNS_NO_REFRESH = 7        ‘ The dynamic DNS no refresh period, where an update classified as a refresh will not be accepted for the record
Const DDNS_REFRESH = 7            ‘ The dynamic DNS refresh period, during which an update will be accepted for the record
Const GMT_OFFSET = +10            ‘ Offset in hours to adjust the resultant times based on the current GMT timezone

Set objFSO = CreateObject(“Scripting.FileSystemObject”)

If WScript.Arguments.Count = 1 Then
    strFileName = WScript.Arguments(0)
    wscript.echo “Specify a filename containing the output of dnscmd. eg DNSScavengeTest.vbs DNS_Records.txt”
End If

If Not objFSO.FileExists(strFileName) Then
    WScript.Echo “Error: ” & strFileName & ” file not found.”
End If

Set objTextStream = objFSO.OpenTextFile(strFileName, ForReading)
strZoneRecords = objTextStream.ReadAll
WScript.Echo “name,timestamp,wouldBeScavengedIn”

For Each strLine in Split(strZoneRecords, vbCRLF)
    intStart = InStr(1, strLine, AGING_TOKEN, 1)
    If intStart 0 Then                                ‘ Does this line contain an aging value?
        intStart = intStart + Len(AGING_TOKEN)
        intEnd = InStr(intStart, strLine, “]”)
        If intEnd 0 Then intLength = intEnd – intStart
        strHost = Left(strLine, InStr(strLine, ” “)-1)                ‘ Yes, extract the host

        intAging = Mid(strLine, intStart, intLength)                ‘ Extract the aging value, expressed in the decimal number of hours since 01/01/1601
        dtmDate = DateAdd(“h”, intAging, “01/01/1601 00:00:00 AM”)        ‘ Convert to a date timestamp
        dtmDate = DateAdd(“h”, GMT_OFFSET, dtmDate)                ‘ Add the current GMT offset

        intDiff = DateDiff(“h”, dtmDate, Now)                    ‘ The difference between now and the timestampe
        intHourDiff = intDiff – ((DDNS_NO_REFRESH * 24) + (DDNS_REFRESH * 24))    ‘ Based on the dynamic DNS no-refresh and refresh periods combined
        If intHourDiff > 0 Then                            ‘ Is this a positive number, indicating the record will be scavenged
            intDay = CInt(intHourDiff / 24)                    ‘ Yes, convert to a number of days for output
            WScript.Echo strHost & “, ” & dtmDate & “, ” & intDay + DDNS_NO_REFRESH + DDNS_REFRESH    ‘This record would be scavenged
            WScript.Echo “*” & strHost & “, ” & dtmDate            ‘ This record won’t be scavenged
            intDay = 0
        End If
    End If

SQL 2008 : Move Databae Files to Differnet Path

SQL 2008 : Move Databae Files to Differnet Path

The following commands can be used to move the log/data files for a SQL database Note this is an OFFLUINE process!

/* Find file locations for your database */
SELECT name, dbid FROM sysdatabases WHERE name = ‘lansweeperdb’
SELECT * FROM sys.master_files WHERE database_id  = 16

/* Offline the Database */

/* Now move files, use the file names gather in step 1*/
ALTER DATABASE lansweeperdb
MODIFY FILE ( NAME = lansweeperdb, FILENAME = ‘E:\SQLDB\lansweeperdb.mdf’ );

ALTER DATABASE lansweeperdb

MODIFY FILE ( NAME = lansweeperdb_log, FILENAME = ‘E:\SQLDB\lansweeperdb_log.ldf’ );

/* Now online the database */



Windows 7 : Dial-in tab Missing

Windows 7 : Dial-in tab Missing

Copy the following files from a Windows Server 2008 R2 installation to a folder on your computer:


Execute the following commands to enable the functionality within dsa.msc:

copy mprsnap.dll C:\Windows\system32\
copy rasuser.dll C:\Windows\system32\
copy rtrfiltr.dll C:\Windows\system32\
copy mprsnap.dll.mui C:\Windows\system32\en-us\
copy rasuser.dll.mui C:\Windows\system32\en-us\
copy rtrfiltr.dll.mui C:\Windows\system32\en-us\
regsvr32.exe C:\Windows\system32\rasuser.dll

Windows 2003 : Certificate Services – Repair CA Virtual Directories

Windows 2003 : Certificate Services – Repair CA Virtual Directories

Today I had an issue with a subordinate CA, its AIA/CDP/CRL HTTP locations were showing as down. On further investigation I noted that the virtual directories for the CA had in fact vanished out of IIS. The files themselves for the CA were present in the CertEnroll directory, so it was an IIS issue.

To restore the Virtual Directory configuration use the following command: certutil -vroot

AD CS : Change the RootCA Validity Period

Change the RootCA Validity Period

certutil -setreg ca\ValidityPeriod “Years”
certutil -setreg ca\ValidityPeriodUnits “10”

When new certificates are generated for the subordinate this will cause the default lifetime for the subordinates to have the same vailidity period as the root CA, therefore change the vailidity period on the subordinate.

Change the subordinateCA Validity Period

certutil -setreg ca\ValidityPeriod “Years”
certutil -setreg ca\ValidityPeriodUnits “1”