'Ctx_RecreateLhc
'01.03.2012 : V1.0
'04.03.2012 : V1.1 Adding 64 bits compatibility
Set wshnetwork = WScript.CreateObject("WScript.Network" )
user = wshnetwork.username
domain = wshnetwork.userdomain
computer = wshnetwork.computername
Vers = "1.1"
'Fomat Date and time
DateFil = DAY(Now()) & "-" & MONTH (Now()) & "-" & YEAR(Now())
HoursFil = Right("00" & Hour(now), 2) & Right("00" & Minute(now), 2) & Right("00" & Second(now), 2)
'Create Log file
Set objFSO = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Set Flog = objfso.CreateTextFile("RecreateLHC_Log-" & DateFil & "--" & HoursFil & ".html")
Flog.Close
Set Flog = objfso.OpenTextFile("RecreateLHC_Log-" & DateFil & "--" & HoursFil & ".html", 2)
'Add title and date
Flog.Write "
"
Flog.Write ""
Flog.Write "RecreateLHC : " & Vers & " | "
Flog.Write "
"
Flog.Write "Date : " & Now & "
| "
Flog.Write "
"
Flog.Write "Launch by : " & domain & "\" & user & " on : " & computer & "
| "
Flog.Write "
"
Flog.Write "
|
"
Flog.Write " |
"
Flog.Write "Serveur(s) : | "
Flog.Write " |
"
Flog.Write ""
'Open File server
Set FServers = objfso.OpenTextFile("servers.txt")
'LHC path
LHCPath =""
LHC32Path = "\C$\Program Files\Citrix\Independent Management Architecture\imalhc.mdb"
LHC64Path = "\c$\Program Files (x86)\Citrix\Independent Management Architecture\imalhc.mdb"
'DSMAINT path
DsmaintPath = ""
Dsmaint32Path = "c:\Program Files\Citrix\System32\Citrix\IMA\DSMAINT recreatelhc"
Dsmaint64Path = "c:\Program Files (x86)\Citrix\System32\Citrix\IMA\DSMAINT recreatelhc"
'Testing architecture OS (2/3)
const HKEY_LOCAL_MACHINE = &H80000002
strValueName = "PROCESSOR_ARCHITECTURE"
'--------------------------
'Read each line on Fservs
'--------------------------
Count = 0
Do While Not Fservers.AtEndOfStream
strComputer = Fservers.Readline
Count = Count + 1
'Testing architecture OS (1/3)
Set oReg=GetObject( "winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "SYSTEM\CurrentControlSet\Control\Session Manager\Environment\"
oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\cimv2")
Flog.Write "" & strComputer & " | "
Flog.Write "
"
Set objIMAService = objWMIService.Get("Win32_Service.Name='IMAService'")
'Stop IMA service and dependancies
Flog.Write "IMAService service state : " & objIMAService.State & " | "
Flog.Write "
"
Flog.Write "Stopping IMAService service | "
Flog.Write "
"
Return = objIMAService.StopService()
Set colServiceList = objWMIService.ExecQuery("Associators of " _
& "{Win32_Service.Name='IMAService'} Where " _
& "AssocClass=Win32_DependentService " & _
"Role=Antecedent" )
For Each objService in colServiceList
Flog.Write "Dependent service : " & objService.Name & " State : " & objService.State & " | "
Flog.Write "
"
Flog.Write "Stopping dependent service " & objService.Name & " | "
Flog.Write "
"
objService.StopService()
Next
Wscript.Sleep 20000
Return = objIMAService.StopService()
Flog.Write "Stopping IMAService service (return value): " & Return & " | "
Flog.Write "
"
Wscript.Sleep 20000
'Testing architecture OS 3/3
If strValue = "AMD64" then
LHCPath = LHC64Path
DsmaintPath = Dsmaint64Path
elseif strValue = "x86" then
LHCPath = LHC32Path
DsmaintPath = Dsmaint32Path
end if
Flog.Write "OS architecture : " & strValue & " | "
Flog.Write "
"
'Read properties LHC file before recreate LHC
Set Flhc = objFSO.GetFile("\\" & StrComputer & LHCPath)
Flog.Write "Read properties LHC file before recreate LHC : | "
Flog.Write "
"
Flog.Write "LHC Size: " & Flhc.Size & " | "
Flog.Write "
"
Wscript.Sleep 5000
'Launch DSMAINT RecreateLCH
Set objProcess = objWMIService.Get("Win32_Process")
errReturn = objProcess.Create(DsmaintPath, null, null, intProcessID)
If errReturn = 0 Then
Flog.Write "RecreateLHC was started | "
Flog.Write "
"
Else
Flog.Write "RecreateLHC error: " & errReturn & " | "
Flog.Write "
"
End If
Wscript.Sleep 10000
'Read properties LHC file After recreate LHC
Flog.Write "Read properties LHC file after recreate LHC : | "
Flog.Write "
"
Flog.Write "LHC Size: " & Flhc.Size & " | "
Flog.Write "
"
'Restart Services
Flog.Write "Starting IMAService service | "
Flog.Write "
"
Return = objIMAService.StartService()
Set colServiceList = objWMIService.ExecQuery("Associators of " _
& "{Win32_Service.Name='IMAService'} Where " _
& "AssocClass=Win32_DependentService " & _
"Role=Antecedent" )
For Each objService in colServiceList
Flog.Write "Dependent service : " & objService.Name & " State : " & objService.State & " | "
Flog.Write "
"
Flog.Write "Starting dependent service " & objService.Name & " | "
Flog.Write "
"
objService.StartService()
Next
Return = objIMAService.StartService()
Flog.Write "Return value IMA service : " & Return & " | "
Flog.Write "
"
Flog.Write "
|
"
Loop
Flog.Write "Total Server(s) : " & Count & " | "
Flog.Write ""
Flog.Close
Wscript.echo "End process"