CmdLets/Sync-RegistrySettings.ps1
|
Function Sync-RegistrySettings { [CmdletBinding()] Param( [Parameter(Mandatory=$False)] $RegistrySettings ) ForEach ($RegistrySetting in $RegistrySettings) { $i++; Write-Progress -ID 0 -Activity "Synching Registry Settings" -Status "Syncing: $($RegistrySetting.Name)" -PercentComplete (($i/$RegistrySettings.Count)*100); Write-Host "Syncing: $($RegistrySetting.Name)" ForEach ($ScriptBlock in $RegistrySettings.PreScriptBlocks) { Write-Verbose $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 $ScriptBlock Invoke-Command -ScriptBlock ([ScriptBlock]::Create($ScriptBlock)) -NoNewScope } } Write-Progress -ID 0 -Activity "Synching Registry Settings" -Completed } |