main/Initialize-DataStore.ps1

<#
.SYNOPSIS
Initialize or re-initialize a given store or a store for a given registered Hive Config
 
.DESCRIPTION
Seed data into a store passed by the user or a store of an existing Hive Config
 
.EXAMPLE
$data = @{}
$data['MyKey1'] = 'MyVal1'
$data['MyKey2'] = 'MyVal2'
Initialize-DataStore -HiveName 'MyConfigHive' -Level 'Origin' -Data $data
 
Seeds store at 'Origin' level for registered hive 'MyConfigHive' with the given data
 
.EXAMPLE
$data = @{}
$data['MyKey1'] = 'MyVal1'
$data['MyKey2'] = 'MyVal2'
$myDataStore = New-DataStore -HiveName 'MyConfigHive' -StoreName 'MemStore' -StoreLevel 'Session'
Initialize-DataStore -CustomStore $myDataStore -Data $data
 
Seeds data for the newly created store
 
.NOTES
Certain operations might require admin privileges. In particular System, Origin level stores on CliFileStore are known
for this requirement
 
#>


function Initialize-DataStore {
  [CmdletBinding(DefaultParameterSetName = 'ExistingHive')]
  param(
    # Registered config hive to seed the value from
    [Parameter(Mandatory, ParameterSetName = 'ExistingHive')]
    [ValidateNotNullOrEmpty()]
    [string] $HiveName,

    # Store level within registered hive to set values
    [Parameter(Mandatory, ParameterSetName = 'ExistingHive')]
    [CacheStoreLevel] $Level,

    # Custom store to initialize
    [Parameter(Mandatory, ParameterSetName = 'CustomStore')]
    [ConfigBaseStore] $CustomStore,

    # Data used for initialization
    [Parameter(Mandatory, ParameterSetName = 'ExistingHive')]
    [Parameter(Mandatory, ParameterSetName = 'CustomStore')]
    [HashTable] $Data
  )

  $ErrorActionPreference = 'Stop'
  if ($CustomStore -eq $null) {
    $Data.Keys | ForEach-Object {
      $key = $_
      $value = $Data[$key]
      Set-ConfigValue -Key $key -Value $value -HiveName $HiveName -Level $Level
    }
  }
  else {
    $CustomStore.InitializeStore($Data)
    Write-Output $CustomStore
  }
}