ZEN Update Watcher Customizations

  • 7004937
  • 25-Nov-2009
  • 27-Apr-2012

Environment

Novell ZENworks 10 Configuration Management with Support Pack 2 - 10.2

Situation

Unable to change the way that end users are notified of a system update.

Unable to change system update required reboot behavior.

Resolution

NOTE:  These features are  integrated with ZCC in 10.3 (see ZCC Configuration/System Update Agent ).
 
For prior versions see settings in additional information below.

Additional Information

ZenUpdateWatcher Customizations
  1. Reboot Prompt Timeout:

    When an update is assigned with the prompt user for reboot option, the default behavior is to wait 5 minutes for a response from the user and, in the absence of aresponse, automatically initiate the reboot. I have added the ability to change the time out for this prompt. To do this, create the following Registry Key/Value on the device prior to initiating the update:

    Key: \\HKLM\Software\Novell\ZENworks\SystemUpdate
    String Value: RebootPromptTimeout

    This value should be specified in minutes the prompt should wait, or -1 to wait indefinitely. Invalid values are ignored and the default timeout is used

  2. Reboot Prompt Nag Time:

    When an update assigned with the suppress reboot, or if a user chooses to cancel a required reboot, a nag message is presented to remind the end user that a reboot is required to complete the update. By default, this nag occurs every 15 minutes. This value is also configurable via the registry:

    Key: \\HKLM\Software\Novell\ZENworks\SystemUpdate
    String Value: RebootPromptNagTime
    This value should be specified in minutes between nags. Negative or non-numeric values are ignored and the default nag time is used.

  3. Reboot Prompt Nag dialog:

    Previously, the reboot nag only appeared as a tray icon bubble. Now, a dialog box will also be shown.

  4. Modification of strings displayed to end user:

    All strings displayed to the end user by the update watcher can be overridden in the registry. In the SystemUpdate registry key, create a String value that correlates to the localization string key that contains the desired string. A list of the available keys and their defaults are listed, but the keys of most interest will most likely be: REBOOT_MSG, REBOOT_MSG_NO_TIMEOUT, REBOOT_TITLE, REBOOT_MSG_POSTPONES_REMAINING.  For example, to change the REBOOT_MSG string, create a REBOOT_MSG string value in the \\HKLM\Software\Novell\ZENworks\SystemUpdate key. In this string, you can utilize {0} to add new lines to your message, and {1} to reference the reboot prompt timeout.

  5. Modification of the icon displayed in the task tray:

    Specify a replacement icon by setting the following registry key:

    Key: \\HKLM\Software\Novell\ZENworks\SystemUpdate
    Value: UpdateWatcherIcon

    Specify the full path to the icon you wish to be displayed. If this file does not exist or is an invalid ico file, the default icon will be displayed.

  6. Specify maximum postpone attempts:

    Previously, the end user was able to postpone indefinitely the reboot needed to complete the update. I have added the ability to specify the maximum number of times the end user can ignore the nag message before the reboot is automatically initiated. Set the following registry key:

    Key: \\HKLM\Software\Novell\ZENworks\SystemUpdate
    String value: RebootPromptMaxPostpone

    Specify the maximum number of times that the user can cancel the reboot nag before the update is automatically started, or -1 to allow to postpone indefinitely. A special note: Because this feature was added after string lock, there is no translation available for the string required to indicate to the user that they have a limited number of postpone attempts. In the event that a localized string is unavailable for the local language (this will be the case for all non-English languages), this setting is ignored, and the user will be allowed an indefinite number of postpones. The customer can get around this limitation by setting the REBOOT_MSG_POSTPONES_REMAINING string in the registry ( see item #4) using {0} to indicate the number of postpones remaining.

  7. Specify user permission prompting:

    Previously, there was no way for the user to interact with the update process. I have added the ability for the user to cancel, postpone, or allow an update to begin. Set the following registry key:

    Key: \\HKLM\Software\Novell\ZENworks\SystemUpdate
    String Value: ShowPermissionPrompt

    Specify whether or not to show the permission prompt. “true” to show, all other values will not show the prompt.

  8. Permission Prompt Timeout:

    When the user is asked for permission to apply the update, a timeout is given for the user to respond before the update automatically starts. You can specify the number of minutes to wait for a user response. Set the following Registry Key/Value:

    Key: \\HKLM\Software\Novell\ZENworks\SystemUpdate
    String Value: PermissionPromptTimeout

    This value should be specified in minutes the prompt should wait, or -1 to wait indefinitely. Invalid values are ignored and the default timeout is used. The default is 5 minutes.

  9. Permission Prompt Nag Time:

    When the user chooses to postpone the start of the update, they are nagged every n minutes that an update is waiting to start. By default, this nag occurs every 15 minutes. This value is also configurable via the registry:

    Key: \\HKLM\Software\Novell\ZENworks\SystemUpdate
    String Value: PermissionPromptNagTime

    This value should be specified in minutes between nags. Negative or non-numeric values are ignored and the default nag time is used.

  10. Specify maximum permission postpone attempts:

    The maximum number of postpone attempts a user can use before the update is automatically started. Set the following registry key:

    Key: \\HKLM\Software\Novell\ZENworks\SystemUpdate
    String value: PermissionPromptMaxPostpone

    Specify the maximum number of times that the user can cancel the permission nag before the update is automatically started, or -1 to allow to postpone indefinitely. A special note: Because this feature was added after string lock, there is no translation available for the string required to indicate to the user that they have a limited number of postpone attempts. In the event that a localized string is unavailable for the local language (this will be the case for all non-English languages), this setting is ignored, and the user will be allowed an indefinite number of postpones. The customer can get around this limitation by setting the PERMISSION_MSG_POSTPONES_REMAINING string in the registry (see item #4) using {0} to indicate the number of postpones remaining.

  11. Specify maximum wait time for permission:

    To prevent the user from continuing to postpone the update without any feedback being given to the system, this setting can be used to specify the maximum number of minutes that an update will wait for permission before giving up and reporting the update as canceled by the user. The default value is 120 minutes. Set the following Registry Key:

    Key: \\HKLM\Software\Novell\ZENworks\SystemUpdate
    String value: PermissionPromptMaxWaitTime

    Specify the maximum wait time in minutes. Any negative numbers or non-numeric values will be ignored and the default value used.

These changes will be available immediately (i.e. available to be used during the application of the 10.2 update).

ZCM Settings
In addition to setting the registry values on individual devices, you can use the settings framework in ZCM to push these settings to a device. By specifying the SystemUpdate setting through the zman ss command, you can assign these settings to the zone and override the settings on folders, groups or individual devices as needed. Attached below is a sample settings.xml file that can be modified applied to your zone. Any setting set using the ZCM settings framework will be overridden by a valid value stored in the device's registry.

The example below contains the default values for all the settings mentioned above. In addition, it demonstrates how you could specify an alternate string for the reboot message presented to the user and how to specify an alternate tray icon.

To use this file, simply copy the xml shown below to a file on your ZCM server, modify it as desired. Then run: zman ss<path to xml file>

If you then want to override the settings on an individual device you can modify the xml file, then run: zman ss<path to xml file> /Workstations/<your device name>

Sample Settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<SystemSettings>
<ns1:SystemSetting xmlns:ns1="http://novell.com/zenworks/datamodel/objects/settings"
xmlns="http://novell.com/zenworks/datamodel/objects/settings">
<Name>SystemUpdate</Name>
<Data>&lt;SystemUpdate&gt;&lt;ShowPermissionPrompt&gt;false&lt;/ShowPermissionPrompt
&gt;&lt;PermissionPromptMaxPostpone&gt;5&lt;/PermissionPromptMaxPostpone&gt;
&lt;PermissionPromptNagTime&gt;15&lt;/PermissionPromptNagTime&gt;
&lt;PermissionPromptTimeout&gt;5&lt;/PermissionPromptTimeout&gt;&lt;PermissionPromptMaxWa
itTime&gt;120&lt;/PermissionPromptMaxWaitTime&gt;&lt;RebootPromptMaxPostpone&gt;5&lt;/Re
bootPromptMaxPostpone&gt;&lt;RebootPromptNagTime&gt;15&lt;/RebootPromptNagTime&gt;
&lt;RebootPromptTimeout&gt;5&lt;/RebootPromptTimeout&gt;&lt;UpdateWatcherIcon&gt;c:/progra
m files/novell/zenworks/bin/alternate.ico&lt;/UpdateWatcherIcon&gt;&lt;REBOOT_MSG&gt;Select
OK - to allow the reboot now, Cancel - to abort the reboot.{0}{0}Note: if no selection is made, reboot
will occur automatically in {1} minutes.&lt;/REBOOT_MSG&gt;&lt;/SystemUpdate&gt;</Data>
</ns1:SystemSetting>
</SystemSettings>

Available Resource Strings
<data name="AWAITING_PERMISSION" xml:space="preserve">
<value>A ZENworks update is available</value>
</data>
<data name="AWAITING_REBOOT" xml:space="preserve">
<value>A system reboot is required to complete the ZENworks Update</value>
</data>
<data name="DEBUG" xml:space="preserve">
<value>DEBUG: {0}</value>
</data>
<data name="ERROR_DELETING_FILE" xml:space="preserve">
<value>{0} could not be deleted. Try manually deleting the file or directory and restarting the
ZENworks Update</value>
</data>
<data name="ERROR_DURING_INSTALL" xml:space="preserve">
<value>An unknown error occurred during the ZENworks Update. Please see the system update log
for details</value>
</data>
<data name="ERROR_MOVING_FILE" xml:space="preserve">
<value>{0} could not be renamed. Try renaming the specified file to {0}.bak and restarting the
ZENworks Update</value>
</data>
<data name="ERROR_MSI_UNAVAILABLE" xml:space="preserve">
<value>It appears that another installation is taking place. Once it is complete, restart the ZENworks
Update</value>
</data>
<data name="ERROR_STARTING_PROCESS" xml:space="preserve">
<value>{0} could not be started. Try manually starting the process and restarting the ZENworks
Update</value>
</data>
<data name="ERROR_STARTING_SERVICE" xml:space="preserve">
<value>The {0} service could not be started. Try manually starting the service and restarting the
ZENworks Update</value>
</data>
<data name="ERROR_STOPPING_PROCESS" xml:space="preserve">
<value>The {0} process could not be stopped. Try exiting all instances of the process and restarting
the ZENworks Update</value>
</data>
<data name="ERROR_STOPPING_SERVICE" xml:space="preserve">
<value>The {0} service could not be stopped. Try manually stopping the service and restarting the
ZENworks Update</value>
</data>
<data name="ERROR_ZENWORKS_HOME_NOT_DEFINED" xml:space="preserve">
<value>The ZENWORKS_HOME variable is not set on the device. This can result in undesired
behavior. Set this environment variable on this device and retry the update.</value>
</data>
<data name="EXIT" xml:space="preserve">
<value>Exit</value>
</data>
<data name="FINISHED" xml:space="preserve">
<value>The ZENworks Update has completed successfully</value>
</data>
<data name="FINISHED_WITH_ERROR" xml:space="preserve">
<value>The ZENworks Update has completed, but some errors were encountered during the update.
Contact your ZENworks Administrator to resolve this issue</value>
</data>
<data name="INSTALLING_PERCENTAGE" xml:space="preserve">
<value>{0}% Complete</value>
</data>
<data name="MSI_INSTALL_ERROR" xml:space="preserve">
<value>An error occurred while installing {0}. msiexec returned {1}</value>
</data>
<data name="NO_STATUS_REPORTED" xml:space="preserve">
<value>No status has been reported</value>
</data>
<data name="PERMISSION_MSG" xml:space="preserve">
<value>Select OK to allow the update to start, or Cancel to postpone the update. {0}{0}Note: If no
selection is made, the update will begin automatically in {1} minutes.</value>
</data>
<data name="PERMISSION_MSG_NO_POSTPONES_REMAINING" xml:space="preserve">
<value>Select OK to allow the update to start.{0}{0}Note: If you do not select OK the update will
begin automatically in {1} minutes.</value>
</data>
<data name="PERMISSION_MSG_NO_POSTPONES_REMAINING_NO_TIMEOUT"
xml:space="preserve">
<value>Select OK to allow the update to start.</value>
</data>
<data name="PERMISSION_MSG_NO_TIMEOUT" xml:space="preserve">
<value>Select OK to allow the update to start, or Cancel to postpone the update.</value>
</data>
<data name="PERMISSION_MSG_POSTPONES_ONE_REMAINING" xml:space="preserve">
<value>You will be allowed {0} more opportunity to postpone the update, then the update will be
started</value>
</data>
<data name="PERMISSION_MSG_POSTPONES_REMAINING" xml:space="preserve">
<value>You will be allowed {0} more opportunities to postpone the update, then the update will be
started automatically.</value>
</data>
<data name="PERMISSION_TITLE" xml:space="preserve">
<value>ZENworks Update Available</value>
</data>
<data name="REBOOT_CANCELLED" xml:space="preserve">
<value>One or more logged on users have canceled the needed reboot. To complete the ZENworks
Update please manually restart your system.</value>
</data>
<data name="REBOOT_MSG" xml:space="preserve">
<value>Select OK - to allow the reboot now, Cancel - to abort the reboot.{0}{0}Note: if no
selection is made, reboot will occur automatically in {1} minutes.</value>
</data>
<data name="REBOOT_MSG_NO_POSTPONES_REMAINING" xml:space="preserve">
<value>Select OK to allow the reboot to start.{0}{0}Note: If you do not select OK the update will
begin automatically in {1} minutes.</value>
</data>
<data name="REBOOT_MSG_NO_POSTPONES_REMAINING_NO_TIMEOUT"
xml:space="preserve">
<value>Select OK to allow the reboot to start.</value>
</data>
<data name="REBOOT_MSG_NO_TIMEOUT" xml:space="preserve">
<value>Select OK - to allow the reboot now, Cancel - to abort the reboot.</value>
</data>
<data name="REBOOT_MSG_POSTPONES_ONE_REMAINING" xml:space="preserve">
<value>You will be allowed {0} more opportunity to postpone the reboot, then the reboot will be
started automatically</value>
</data>
<data name="REBOOT_MSG_POSTPONES_REMAINING" xml:space="preserve">
<value>You will be allowed {0} more opportunities to postpone the reboot, then the reboot will be
started automatically</value>
</data>
<data name="REBOOT_TITLE" xml:space="preserve">
<value>Restart Required</value>
</data>
<data name="SHOW_STATUS" xml:space="preserve">
<value>Show Status</value>
</data>
<data name="SHUTDOWN_ADJUST_FAILED" xml:space="preserve">
<value>Unable to get permission to initiate a reboot (error code {0}). Please manually restart your
system</value>
</data>
<data name="SHUTDOWN_INIT_FAILED" xml:space="preserve">
<value>A reboot could not be initiated (error code {0}). Please manually restart your
system</value>
</data>
<data name="SHUTDOWN_LUID_FAILED" xml:space="preserve">oc
<value>Unable to get permission to initiate a reboot (error code {0}). Please manually restart your
system</value>
</data>
<data name="SHUTDOWN_MSG" xml:space="preserve">
<value>A reboot has been initiated to complete the ZENworks Update</value>
</data>
<data name="SHUTDOWN_TOKEN_FAILED" xml:space="preserve">
<value>Unable to get permission to initiate a reboot (error code {0}). Please manually restart your
system</value>
</data>
<data name="STATUS_TITLE" xml:space="preserve">
<value>ZENworks Update</value>
</data>
<data name="UNKNOWN" xml:space="preserve">
<value>An unknown error occurred during the ZENworks Update. Please see the system update log
for details</value>
</data>
<data name="UNKNOWN_STATUS" xml:space="preserve">
<value>An unknown status was reported '{0}'</value>
</data>
<data name="UPDATE_NOT_RUNNING" xml:space="preserve">
<value>The ZENworks Update does not appear to be running. Contact your ZENworks
Administrator to resolve this issue</value>
</data>

<data name="WATCHER_ICON_TOOLTIP" xml:space="preserve">
<value>ZENworks Update Status</value>
</data>