PowerShell Application Deployment Toolkit is a tool very powerful to manage the registry:
- Adding, modifying, deleting registry keys and registry values
- Adding HKEY CURRENT USER registry entries for all existing user profiles + default user, to avoid Active Setup
- Modifying the value of environment variables (for example the PATH environment variable)
1. Import REG File
To import MyRegistryChange.reg (located in the “Files” folder)
## Import MyRegistryChange.reg Write-Log "Import MyRegistryChange.reg (HKLM entries)" Execute-Process -Path "reg.exe" -Parameters "import `"$dirFiles\MyRegistryChange.reg`""
2. Adding HKCU for All Existing User Profiles
Allowing implementing HKCU registry for all existing user profiles + default user, to avoid Active Setup.
## Add HKCU registry (for all existing profiles + default user) Write-Log "Add HKCU registry for all existing profiles + default user" [scriptblock]$HKCURegistrySettings = { Set-RegistryKey -Key 'HKCU:SOFTWARE\Manufacturer\Software\Component' -Name 'EntryName1' -value 'EntryValue1' -Type Dword -SID $UserProfile.SID Set-RegistryKey -Key 'HKCU:SOFTWARE\Manufacturer\Software\Component' -Name 'EntryName2' -value 'EntryValue2' -Type Dword -SID $UserProfile.SID } Invoke-HKCURegistrySettingsForAllUsers -RegistrySettings $HKCURegistrySettings
Options: ‘Binary’, ‘DWord’, ‘ExpandString’, ‘MultiString’, ‘None’, ‘QWord’, ‘String’, ‘Unknown’. Default: String.
3. PATH Environment Variable
## ## This function allows to add a folder in the PATH environment variable if not already existing ## ## Then, call the function with the folder to add as parameter ## ## Function Function global:ADD-PATH() { [Cmdletbinding()] param ( [parameter(Mandatory=$True, ValueFromPipeline=$True, Position=0)] [String[]]$AddedFolder ) # Get the current PATH from the environment variable in the registry. $OldPath=(Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH).Path # Check if the parameter is an existing folder IF (!(TEST-PATH $AddedFolder)) { Write-Host 'Folder does not exist. PATH Unchanged' } ELSE { # Check if the new folder is already in the PATH IF ($OldPath | Select-String -SimpleMatch $AddedFolder) { Write-Host 'Folder already in the PATH. PATH Unchanged' } # Else set the new PATH ELSE { $NewPath=$OldPath+';'+$AddedFolder Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH –Value $newPath Write-Host 'Folder added in PATH' Write-Host "New path value is $NewPath" } } } ## Call ADD-PATH('C:\Workdir')