Kcleanup Really Slow with 3.6
Hello,
After our image deploys I have 3 post install tasks one to Join the domain and then,one to activate windows and one to activate office. All these tasks run fine and kcleanup starts after them. A black command prompt window comes up for kcleanup.exe and then it just sits there for a really long time like 20 to 30 minutes. Eventually it does work and the computer restarts and all the KACE files get properly deleted. But 30 minutes on that screen is ridiculous, that doubles my imaging time.
Anyone run into this before?
0 Comments
[ + ] Show comments
Answers (2)
Answer Summary:
Please log in to answer
Posted by:
SMal.tmcc
10 years ago
that task takes me seconds usually. it is this vbs script. maybe you need to do a chkdsk on your master or have other problems with it.
vbs file:
Dim objShell, cmd, errorCode, regKeyOsVersion, osVersion, version, osh, engineKey, value
Function GetOSVersion()
regKeyOsVersion = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion"
osVersion = objShell.RegRead(regKeyOsVersion)
GetOSVersion = osVersion
End Function
Function ServerIp()
Dim xmlDoc, configFile, expandedPath, serverNode
set osh = CreateObject("WScript.Shell")
set xmlDoc = CreateObject("Msxml2.DOMDocument")
configFile = "%systemdrive%\KACE\Engine\Config.xml"
expandedPath = osh.ExpandEnvironmentStrings(configFile)
xmlDoc.Load(expandedPath)
set serverNode = xmlDoc.SelectSingleNode("//Config/HostServer")
ServerIp = serverNode.Text
End Function
Function DeploymentType()
Dim xmlDoc, configFile, expandedPath, serverNode
set osh = CreateObject("WScript.Shell")
set xmlDoc = CreateObject("Msxml2.DOMDocument")
configFile = "%systemdrive%\KACE\Engine\Config.xml"
expandedPath = osh.ExpandEnvironmentStrings(configFile)
xmlDoc.Load(expandedPath)
set serverNode = xmlDoc.SelectSingleNode("//Config/DeploymentType")
DeploymentType = serverNode.Text
End Function
Function SystemImageId()
Dim xmlDoc, configFile, expandedPath, serverNode
set osh = CreateObject("WScript.Shell")
set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0")
configFile = "%systemdrive%\KACE\Engine\Config.xml"
expandedPath = osh.ExpandEnvironmentStrings(configFile)
xmlDoc.async = false
xmlDoc.Load(expandedPath)
set serverNode = xmlDoc.selectSingleNode("//Config")
SystemImageId = serverNode.getAttribute("DeploymentId")
End Function
Sub PushDeploymentInfo()
Dim server_ip, image_id, deployment_type, fetch_url, file_path, http_handle, file_handle, file_handle_handle
server_ip = ServerIp()
image_id = SystemImageId()
deployment_type = DeploymentType()
If deployment_type = "SI" Then
fetch_url = "http://" & server_ip & "/rpc/k1000_inventory.php?boot_image_id=" & image_id
Else
fetch_url = "http://" & server_ip & "/rpc/k1000_inventory.php?system_image_id=" & image_id
End If
set http_handle = CreateObject("Microsoft.XmlHttp")
http_handle.open "GET", fetch_url, FALSE
http_handle.send
file_path = "C:\ProgramData\Dell\KACE\k2000_deployment_info.conf"
set file_handle = CreateObject("Scripting.FileSystemObject")
set file_handle_handle = file_handle.CreateTextFile(file_path, True)
file_handle_handle.Write http_handle.responseText
file_handle_handle.Close
End Sub
'
' Multipurpose object thing ...
'
Set objShell = CreateObject("WScript.Shell")
'
' Delete the task engine run key if it exists, then, assert the Dell\KACE directory
'
On Error Resume Next
engineKey = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KACETaskEngine"
value = WSHShell.RegRead(engineKey)
If err.number = 0 Then
objShell.RegDelete engineKey
End If
cmd = "cmd /c md ""%allusersprofile%\Dell\KACE"""
errorCode = objShell.Run(cmd, 0, True)
'
' Has to run prior to kcleanup
'
call PushDeploymentInfo()
'
' Check for Windows 8
'
version = GetOSVersion
If Left(Version,3) >= "6.2" Then
objShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell", "explorer.exe", "REG_SZ"
End If
cmd = "cmd /c start /wait c:\kcleanup.exe"
errorCode = objShell.Run(cmd, 0, True)
cmd = "cmd /c del C:\kcleanup.exe /f"
errorCode = objShell.Run(cmd, 0, True)
vbs file:
Dim objShell, cmd, errorCode, regKeyOsVersion, osVersion, version, osh, engineKey, value
Function GetOSVersion()
regKeyOsVersion = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion"
osVersion = objShell.RegRead(regKeyOsVersion)
GetOSVersion = osVersion
End Function
Function ServerIp()
Dim xmlDoc, configFile, expandedPath, serverNode
set osh = CreateObject("WScript.Shell")
set xmlDoc = CreateObject("Msxml2.DOMDocument")
configFile = "%systemdrive%\KACE\Engine\Config.xml"
expandedPath = osh.ExpandEnvironmentStrings(configFile)
xmlDoc.Load(expandedPath)
set serverNode = xmlDoc.SelectSingleNode("//Config/HostServer")
ServerIp = serverNode.Text
End Function
Function DeploymentType()
Dim xmlDoc, configFile, expandedPath, serverNode
set osh = CreateObject("WScript.Shell")
set xmlDoc = CreateObject("Msxml2.DOMDocument")
configFile = "%systemdrive%\KACE\Engine\Config.xml"
expandedPath = osh.ExpandEnvironmentStrings(configFile)
xmlDoc.Load(expandedPath)
set serverNode = xmlDoc.SelectSingleNode("//Config/DeploymentType")
DeploymentType = serverNode.Text
End Function
Function SystemImageId()
Dim xmlDoc, configFile, expandedPath, serverNode
set osh = CreateObject("WScript.Shell")
set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0")
configFile = "%systemdrive%\KACE\Engine\Config.xml"
expandedPath = osh.ExpandEnvironmentStrings(configFile)
xmlDoc.async = false
xmlDoc.Load(expandedPath)
set serverNode = xmlDoc.selectSingleNode("//Config")
SystemImageId = serverNode.getAttribute("DeploymentId")
End Function
Sub PushDeploymentInfo()
Dim server_ip, image_id, deployment_type, fetch_url, file_path, http_handle, file_handle, file_handle_handle
server_ip = ServerIp()
image_id = SystemImageId()
deployment_type = DeploymentType()
If deployment_type = "SI" Then
fetch_url = "http://" & server_ip & "/rpc/k1000_inventory.php?boot_image_id=" & image_id
Else
fetch_url = "http://" & server_ip & "/rpc/k1000_inventory.php?system_image_id=" & image_id
End If
set http_handle = CreateObject("Microsoft.XmlHttp")
http_handle.open "GET", fetch_url, FALSE
http_handle.send
file_path = "C:\ProgramData\Dell\KACE\k2000_deployment_info.conf"
set file_handle = CreateObject("Scripting.FileSystemObject")
set file_handle_handle = file_handle.CreateTextFile(file_path, True)
file_handle_handle.Write http_handle.responseText
file_handle_handle.Close
End Sub
'
' Multipurpose object thing ...
'
Set objShell = CreateObject("WScript.Shell")
'
' Delete the task engine run key if it exists, then, assert the Dell\KACE directory
'
On Error Resume Next
engineKey = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KACETaskEngine"
value = WSHShell.RegRead(engineKey)
If err.number = 0 Then
objShell.RegDelete engineKey
End If
cmd = "cmd /c md ""%allusersprofile%\Dell\KACE"""
errorCode = objShell.Run(cmd, 0, True)
'
' Has to run prior to kcleanup
'
call PushDeploymentInfo()
'
' Check for Windows 8
'
version = GetOSVersion
If Left(Version,3) >= "6.2" Then
objShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell", "explorer.exe", "REG_SZ"
End If
cmd = "cmd /c start /wait c:\kcleanup.exe"
errorCode = objShell.Run(cmd, 0, True)
cmd = "cmd /c del C:\kcleanup.exe /f"
errorCode = objShell.Run(cmd, 0, True)
Comments:
-
chkdsk on the image looks fine. I'm guessing since I get stuck on the kcleanup.exe the issue is with it that file. The vbs should be running fine since it get up to that point fast. - DanGreenbrier 10 years ago
-
Also do I have to initiate my own restart? I don't have a restart task setup after all my post install tasks run. I didn't think that was required since it usually restarts on its own after all the tasks run. - DanGreenbrier 10 years ago
-
the cleanup will restart for you - SMal.tmcc 10 years ago
-
when it reboots, be ready and boot into safe mode so no 3rd party programs run including kcleanup.
See if this take a long time, if yes then it is a system file problem.
Use regedit and go to the runonce key and turn off the kcleanup task and reboot so all other third party apps run and see if it is slow.
Then manually run the vb line you remove from the run once.
this should help you narrow it down to what is causing the lag. it could be driver discovery happening or some other program doing tasks which are delaying the kcleanup, or just be something wrong with the cleanup task for your image. - SMal.tmcc 10 years ago-
ok so safemode after the image deploys? Also I checked a few machines that had kcleanup running and they all had kcleanup.exe in the task manager running at 50% CPU. Don't know if that's a clue to anything. - DanGreenbrier 10 years ago
-
tap f8 as it reboots prior to kcleanup running and choose safe mode and remove the run command for kcleanup from the registry - SMal.tmcc 10 years ago
Posted by:
Gavio
10 years ago
We found that SEP was causing the problem.
We added an exception to SEP policy to exclude the KACE directories and the cleanup task went back to a few seconds
Comments:
-
We are running SEP so I bet you this is the issue. Is there anyway to add the exclusion to the image without having to recreate them? Through the registry maybe with a post install task? - DanGreenbrier 10 years ago
-
We use a scripted installation. When SEP installs it updates its policy from the
SEP Manager which has the exclusion.
We excluded c:\kace\ and c:\kcleanup.exe.
Try adding the exclusions and see if when you image SEP updates policy.
I believe running the following forces a heartbeat which will update policy
smc.exe -updateconfig
The exclusions are in the registry so you could add them
but much better off letting policy do it.
Cheers
Gavin - Gavio 10 years ago-
I added the exclusion to the SEP Manager but it didn't seem to work. Maybe because since I have a WIM image. So I just setup a post install task to shut off SEP right at the start. kcleanup is almost instant right after that and SEP turns back on automatically on the restart. Seems like our issues are fixed. Thanks a ton Gavin! - DanGreenbrier 10 years ago
-
Dan - Can you elaborate on the postinstall tasks you created to shut off / turn on SEP to improve kcleanup process? I'm a scripting noob and could really use some guidence.
Thanks - paul.milton 10 years ago-
Hey Paul. Disabling Symantec is a simple one liner ran as a BAT script. "C:\Program Files\Symantec\Symantec Endpoint Protection\smc" -stop Symantec automatically turns back on after the machine restarts. - DanGreenbrier 10 years ago
-
Thanks for the response - I'll give it a shot - paul.milton 10 years ago
-
Also worth noting, most enterprises run SEP with a password. In the documentation from Symantec they say to call the commands as such: "...\smc" -stop -p XXXXXXX
That didn't work for us. What we had to do was call the password before the stop command like this: "...\smc" -p XXXXXXXX -stop
I hope this helps save others time trying to get that working, or rather, stopping. - shanksr 10 years ago