CmdLets/Library/Sync-LibraryApplicationRegistry.ps1
|
Function Sync-LibraryApplicationRegistry { [CmdletBinding()] Param( [Parameter(Mandatory=$True,ValueFromPipeline=$True)] [ValidateNotNullOrEmpty()] $Application ) Begin {} Process{ ForEach ($Item in $Application) { Write-Host "Syncing Application: $($Item.Name)" ForEach ($RegistrySetting in $Item.Registry) { Write-Host "`tSyncing: $($RegistrySetting.Name)" ForEach ($ScriptBlock in $RegistrySettings.PreScriptBlocks) { Write-Verbose "Executing: $Scriptblock" Invoke-Command -ScriptBlock ([ScriptBlock]::Create($ScriptBlock)) -NoNewScope } ForEach ($Property in @("Path","Name","Value","Type")) { If ($Property -notIn $RegistrySetting.psobject.Properties.Name) { Throw "Property $Property not found" } elseIf ($null -eq ($RegistrySetting.psobject.Properties | Where-Object { $_.Name -eq $Property }).Value){ Throw "Property $Property is null" } } if (!(Test-Path $RegistrySetting.Path )) { New-ItemWrapper $RegistrySetting.Path } If ((Get-Item $RegistrySetting.Path).Property -Contains $RegistrySetting.Name) { Set-ItemProperty ` -Path $RegistrySetting.Path ` -Name $RegistrySetting.Name ` -Value $RegistrySetting.Value } else { New-ItemProperty ` -Path $RegistrySetting.Path ` -Name $RegistrySetting.Name ` -Value $RegistrySetting.Value ` -PropertyType $RegistrySetting.Type | out-null } ForEach ($ScriptBlock in $RegistrySettings.PostScriptBlocks) { Write-Verbose "Executing: $Scriptblock" Invoke-Command -ScriptBlock ([ScriptBlock]::Create($ScriptBlock)) -NoNewScope } } } } End{ } } |