ZCM 11 imaging megapost – part 5 (Bundle installation)

windows 7 novell blog banner

OK looks like my initial prediction was wrong and I needed a lot more than 3 sections to cover all the steps in my imaging process 😉

What we have now is a machine with all the base software needed to be able to log into the network and become managed by ZCM. That’s great but one of the aims for the process is to also prepare the machine for the user so they can get up and running with their apps straight away i.e. no waiting for them to install. When first using ZCM I thought that the add-on bundle feature would do the trick but was disappointed to find it only copies content down to the device but doesn’t install during image time. That means you’re limited to installing either at boot or after user login, neither of which is really ideal.

ENGL has a nice feature that allows you assign apps to be installed to an _Installer bundle that gets executed during the imaging process. I’ve took a similar approach but using Powershell and built-in ZCM commands. At first I thought about using the same single-bundle method but decided against it as I prefer to see each app listed in the ZCM Agent (from a support perspective it’s easier to check what version is installed and to verify individual bundles if required)

In ZCM I created separate folders to house my imaging bundles, one for core apps and some extras for specific classroom apps such as SMART Notebook. The actions are created as usual and assigned to either all Workstations or specific groups as required. In the relationship options the Install schedule is set to None so the only way for the app to get on the machine is either to be manually clicked or executed via script.

Once these were done I looked through the Novell forums and ZCM documentation and found some additional options on the zac command that can be used for scripting…

zac bl
list available bundles

zac bin “app name”
install ZCM bundle called app name

zac bln “app name”
launch ZCM bundle called app name

Then all you need to do is call zac.exe with the correct parameters to install the bundles you want…

$zacexe = "C:\Program Files\Novell\ZENworks\bin\zac.exe"
$Bundle1Params = "bin ""Adobe Reader"""
$process = [Diagnostics.Process]::Start($zacexe,$Bundle1Params)
$Bundle2Params = "bin ""Google Chrome"""
$process = [Diagnostics.Process]::Start($zacexe,$Bundle2Params)
$Bundle3Params = "bin ""VLC Media Player"""
$process = [Diagnostics.Process]::Start($zacexe,$Bundle3Params)

At first glance you might think I’ve put too many quote marks in the the bundle names but if you look carefully you’ll see why I’ve done it… the first set closes the overall command and the second set are used for the bundle name (has to be double quotes as the bin command itself needs quotes around the bundle name)

As previously mentioned the WaitForExit ensures bundles don’t clash with each other during installation and the process steps through cleanly one bundle at a time

I also added a second section of code that uses some keys I add to the registry at imaging time to decide if to install classroom-specific bundles, this will vary depending on your needs but basically all it comes down to is some If, ElseIf, Else logic that runs more zac bin commands as required. Once all the bundles are installed use Restart-Computer to end the script

Although you will have to edit your scripts add-on image (or create a new one) each time you want to add \ remove bundles from the imaging process I think it’s worth the (small) amount of work for what you gain in end user experience 🙂


2 Responses to ZCM 11 imaging megapost – part 5 (Bundle installation)

  1. Christian Stecher says:


    As you can create a bundle containing other bundles, you can simply create a bundle called install and launch this at the end of the imaging process. If you want to change the bundles installed, simply edit the install bundle in ZENworks, and leave the image untouched.

    • gshaw0 says:

      Hi Christian, thanks for posting 🙂 Yes that’s another way of doing it and was method I was initially going to use. The reason I’ve gone for scripting each individual Bundle individually is so each one will show up as an entry when looking at the properties of the ZCM Agent on a client. Every now and again one may fail and with them listed individually I can easily see if something has gone wrong, whereas with a single Bundle I’d have to go onto the ZCC and work through the logs.

      Scripting individually also lets me mix and match for certain scenarios as well, using filters that ZCM doesn’t support such as whether folders exist (why ZCM doesn’t let me do that I’ll never know) and other oddities quite specific to our network such as workgroup \ domain name.

      If I was going to do a revised version of the scripts I’d try and build a CSV import method into the Bundle install section i.e. place an import file with the Bundle names in a comma-separate list and then the script runs zac bin for each line. As it stands what we have works a treat so I’m going to leave it as-is until ZCM 11.3 is released!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

%d bloggers like this: