CmdLets/Sync-LibraryApplicationRegistry.ps1
|
Function Sync-LibraryApplicationRegistry { [CmdletBinding()] Param( [Parameter(Mandatory=$True,ValueFromPipeline=$True)] [ValidateNotNullOrEmpty()] $Application ) Begin {} Process{ ForEach ($RegistrySetting in $Application.Registry) { Write-Progress -ID 0 -Activity "Syncing Registry Settings" -Status "Syncing: $($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 } Write-host $RegistrySetting.Name 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{ Write-Progress -ID 0 -Activity "Syncing Registry Settings" -Completed } } |