Support for this configuration is deprecated and is currently provided for backwards compatibility only. Use high-availability PBA instead. The PBA task sequence dialogs do not support this option, therefore some scripting would be required to achieve the same functionality.

The Nomad PBA Task Sequence steps are not designed for use with offline USMT or WinPE.

The -NMDS_POLL command-line option for the NomadPackageLocator.exe tool cannot be used in WinPE.

The -NMDS_<command> command-line options for NomadBranch.exe have not been tested in WinPE so their behavior might be unpredictable in that environment.

The implementation of the secondary cache uses an optional third parameter available in the NMDS_POLL command:

NomadBranch.exe -NMDS_POLL,<name>,<size>[,<ignore_offer>]

where <ignore_offer> is used to specify the name of a NMDS host that already has the user data cached. Thus, when NMDS_POLL is run a second time with the same <name> and <size> values as on the first call, it effectively allows a second NMDS host to offer its services as a cache. In this way user state can be saved to two caches, for increased resilience. On restore, the first cache that responds to the NMDS_FIND request will be the one used.

A typical task sequence to use this feature looks something like this:

...
(First save)

  • Peer Backup Assistant: Provision Nomad PBA Data Store (which runs NomadPackageLocator.exe -NMDS_POLL,%COMPUTERNAME%,<cache_space_in_MB> behind the scenes)
  • Capture User State (using USMT)
  • Peer Backup Assistant: Close Nomad PBA Data Store

...
(Second save)

  • Run Command Line action to execute a script that will extract the hostname of the NMDS host used for the first save and set an environment variable, e.g. PBAFirstHost.
    The value to be used can be extracted from the OSDStateStorePath environment variable set by the "Provision" step in the first save. 
    The OSDStateStorePath value is of the form "\\hostname\sharename ", and PBAFirstHost should be set to the hostname part. See example scripts below.
  • Run Command Line action to execute "NomadPackageLocator.exe -NMDS_POLL,%COMPUTERNAME%,<cache_space_in_MB>,%PBAFirstHost%". This replaces the Peer Backup Assistant: Provision Nomad PBA Data Store step used in the First save.
    Note that using NomadPackageLocator.exe rather than NomadBranch.exe additionally sets key environment variables, specifically OSDStateStorePath.
  • Capture User State (using USMT), again
  • Peer Backup Assistant: Close Nomad PBA Data Store (again)

...
(After applying or refreshing O/S, restore user state in the usual PBA way)

  • Peer Backup Assistant: Locate Existing Nomad PBA Data Store (One of the caches will be selected.)
  • Restore User State (USMT)
  • Peer Backup Assistant: Release Nomad PBA Data Store

...

Only one NMDS_DELETEcall, invoked by the Release Nomad PBA Data Store action, will have any effect and it will delete the cache on only one host (the one that responded to the Locate Existing Nomad PBA Data Store request). The other cache will expire automatically after 7 days (default setting), but this may be a problem if space is tight on the Nomad cache hosts.

To get round the problem, append these actions to the task sequence above:

  • Peer Backup Assistant: Locate Existing Nomad PBA Data Store (This will find the second cache, now that the first has been deleted.)
  • Peer Backup Assistant: Release Nomad PBA Data Store (To delete the second cache.)

Example scripts

Here are two example scripts to implement PBA secondary backup data store:

VBS

Option Explicit
Dim oTSEnv, arrTemp 
Set oTSEnv = CreateObject("Microsoft.SMS.TSEnvironment")
'Get Hostname from OSDStateStorePath
arrTemp = Split(oTSEnv("OSDStateStorePath"),"\")
'Set PBAFirstHost Variable
oTSEnv("PBAFirstHost") = arrTemp(2)

Powershell

$tsenv = New-Object -COMObject Microsoft.SMS.TSEnvironment
#Get Hostname from OSDStateStorePath
$arrTemp = $tsenv.value("OSDStateStorePath").Split("\")
#Set PBAFirstHost Variable
$tsenv.value("PBAFirstHost") = $arrTemp[2]