Big task - Kace K2000 - Deploy two windows-partitions with separate post-installationtasks
Hallo Everyone,
it seems that I
got a really big client-installation-requirement and -task for the Kace K2000
appliance. I didn’t find a solution with
google for my specific task. Maybe someone’s got some tips and ideas.
Sorry for my very basic english.
Overview:
We are using
clients with two windows-partitions because of software-requirements. Partition
1 is a windows-7-x86-partition and partition 2 is a windows-7-x64-partition.
The clients have the windows-boot-menue to choose which partition should be
booted. Both partitions are specific
pre-configured-images with sysprep.
Task:
The task is not
really simple. We want use the K2000 appliance to install a client with the two in the
overview described windows-partitions, configure the boot-menue and do post-installation-tasks
for each partition. That’s where the problem starts. We want to do automated
post-installation-tasks on both partitions.
What we got working:
We captured both
partitions with sysprep at the same time from a masterclient with the
k2000-KBE. Deploying this image is
working fine. K2000 has successfully deployed both partitions. Also we got a
post-installation-task working to edit the boot-menue-sequence and do a reboot
to start from partition 2, normally it would start from partition 1. Here is where
the problem really starts.
After booting
from partition 2 we want to continue the post-installation-tasks from the k2000
but it doesn’t work,
ofcourse. So we are looking for a solution to move the post-installation tasks
from partition 1 to partition 2 and continue the final-tasks.
Maybe there is a
windows-directory on partition 1 from the k2000-deployment which could be moved
to partition 2 or some other solutions.
I really hope
for some tips and ideas, maybe a solution.
Thank you.
Answers (3)
So here is the loaded gun, have fun experimenting with it.
If this is gonna work this is what you most likely will need to do. If you get really creative you can extend the current kace engine to the other partition and inject yourself a different set of post calls for the kace engine to run instead of just copying. That is what I would look at doing ultimately.
The Kace post tasks are put into c:\kace and deleted in the final task. To start I would copy that structure from C: to D: and see what happens. The biggest problem I see with this is the OS type changes, no idea how it will handle that.
Installing programs post could be accomplished by calling a bat that checks the OS and either use the x86 or x64 installer.
If you have any good VBS knowledge you can dissect the VB scripts that do the post setup and create some of your own to run as the first post task and create a second post setup. Use a dummy image with the x64 post tasks and fool the vb script to exam that image xml settings instead of the current images xml settings.
connect to your K2 from your tech station (ex \\ikbox)
use admin for the user and your samba share password.
Change the \\ikbox to be \\ikbox\peinst and you will see where all the goodies are put.
the scripts dir contain the xml and conf files for the images, the applications dir are the tasks by number you will find listed in the xml file for that image.
as an example. point your mouse at an image you will see its id in the bottom corner
in scripts you will find files with this number
ImagingConfig_371.xml
ImagingTasks_371.xml
opening the task xml looks like this
you can then go to applications\## and see the files used in the task
we will look at id 24 since its commandline is copy_post_install_files.vbs
the vbs file contains this code
Option Explicit
Dim xmlDoc
Dim envVarFile
Dim configFile
Dim varList, varNode
Dim name
Dim value
Dim usbNode, usbValue, usbDeployment
Dim objShell, objFSO, objTextFile
Dim command
Dim strErrorCode
Dim dictionary
Dim tasksFile, taskList, taskNode, taskType, taskId
Dim postTaskDir, currentPostTaskDir, utility_dir, check_img_vbs_dir, dest_dir, notepad_dir
' Environment variables file will be in the same place each time.
envVarFile = "X:\KACE\Engine\EnvVars.xml"
Set xmlDoc = CreateObject("Msxml2.DOMDocument")
xmlDoc.Load(envVarFile)
Set varList = xmlDoc.SelectNodes("//BootAction/EnvironmentVariables/EnvironmentVariable")
Set dictionary = CreateObject("Scripting.Dictionary")
For Each varNode in varList
name = varNode.SelectSingleNode("Name").Text
value = varNode.SelectSingleNode("Value").Text
dictionary.add name, value
Next
' Config file will be in the same place each time.
configFile = "X:\KACE\Engine\Config.xml"
xmlDoc.Load(configFile)
Set usbNode = xmlDoc.SelectSingleNode("//Config/USBDeployment")
usbValue = usbNode.Text
If UCase(usbValue) = "TRUE" Then
usbDeployment = True
Else
usbDeployment = False
End If
Set objShell = CreateObject("WScript.Shell")
If usbDeployment Then
postTaskDir = objShell.ExpandEnvironmentStrings("%UFDPATH%\KACE\applications")
utility_dir = objShell.ExpandEnvironmentStrings("%UFDPATH%\KACE")
check_img_vbs_dir = objShell.ExpandEnvironmentStrings("%UFDPATH%\KACE")
notepad_dir = objShell.ExpandEnvironmentStrings("%UFDPATH%\KACE\bin")
Else
postTaskDir = "Y:\applications"
utility_dir = objShell.ExpandEnvironmentStrings("Y:\hta\%PROCESSOR_ARCHITECTURE%")
check_img_vbs_dir = "Y:\hta"
notepad_dir = objShell.ExpandEnvironmentStrings("Y:\hta\%PROCESSOR_ARCHITECTURE%")
End If
Set objFSO = CreateObject("Scripting.FileSystemObject")
command = "cmd /c md " & dictionary.Item("IMG_SYSTEM_DRIVE") & "\KACE"
strErrorCode = objShell.Run(command, 0, True)
command = "cmd /c md " & dictionary.Item("IMG_SYSTEM_DRIVE") & "\KACE\bin"
strErrorCode = objShell.Run(command, 0, True)
command = "cmd /c md " & dictionary.Item("IMG_SYSTEM_DRIVE") & "\KACE\Applications"
strErrorCode = objShell.Run(command, 0, True)
command = "cmd /c copy /Y " & check_img_vbs_dir & "\check_image.vbs " & dictionary.Item("IMG_SYSTEM_DRIVE") & "\KACE\bin"
strErrorCode = objShell.Run(command, 0, True)
command = "cmd /c copy /Y " & notepad_dir & "\kgetfilename.exe " & dictionary.Item("IMG_SYSTEM_DRIVE") & "\KACE\bin"
strErrorCode = objShell.Run(command, 0, True)
command = "cmd /c copy /Y " & utility_dir & "\kcleanup.exe " & dictionary.Item("IMG_SYSTEM_DRIVE") & "\"
strErrorCode = objShell.Run(command, 0, True)
' Tasks file will be in the same place each time.
tasksFile = "X:\KACE\Engine\Tasks.xml"
xmlDoc.Load(tasksFile)
Set taskList = xmlDoc.SelectNodes("//Tasks/Task")
For Each taskNode in taskList
taskType = taskNode.SelectSingleNode("Type").Text
If taskType = "PO" Then
taskId = taskNode.Attributes.getNamedItem("ID").Text
dest_dir = dictionary.Item("IMG_SYSTEM_DRIVE") & "\KACE\Applications\" & taskId
command = "cmd /c md " & dest_dir
strErrorCode = objShell.Run(command, 0, True)
currentPostTaskDir = postTaskDir & "\" & taskId
If objFSO.FolderExists(currentPostTaskDir & "\contents\") Then
currentPostTaskDir = currentPostTaskDir & "\contents"
End If
command = "cmd /c xcopy /y /f /s /h /e " & currentPostTaskDir & "\* " & dest_dir
strErrorCode = objShell.Run(command, 0, True)
End If
Next
Set dictionary = Nothing
Set xmlDoc = Nothing
Set objShell = Nothing
Set objFSO = Nothing
Happy Hunting! stay in touch.
Comments:
-
That was an AWESOME tutorial. It really helped to get my feet under me as I'm learning this KACE stuff. Thanks muchly! - kentwest 8 years ago
Top Answer
Kace sets triggers to start the post from local drive and sequence the other post tasks. If you copy the tasks prior to triggering them (first task) you will have trigger system intact so it will be the same point on both drives. If you check restart after the first task, both should start at the next post task.
the xml 371 starting at the local calls
Comments:
-
edited with the key needed to run the trigger system - SMal.tmcc 8 years ago
-
that it setup via one of the vb scripts they call mid level - SMal.tmcc 8 years ago
-
you will want to go open the two vbs files they use to set the triggers to local
updateconfig.vbs
set_engine_run_key.vbs
you can find the path to them in the mid level area of the xml, see first answer - SMal.tmcc 8 years ago