Skip to main content

Edit Global Proxy Settings

#tombehrendt
# 08/03/2024

$UserProfiles = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\*" |

               Where {$_.PSChildName -match "S-1-5-21-(\d+-?){4}$" } |

               Select-Object @{Name="SID"; Expression={$_.PSChildName}}, @{Name="UserHive";Expression={"$($_.ProfileImagePath)\NTuser.dat"}}

foreach ($UserProfile in $UserProfiles) {

   # Load User ntuser.dat if it's not already loaded

   if (($ProfileWasLoaded = Test-Path "Registry::HKEY_USERS\$($UserProfile.SID)") -eq $false) {

       Start-Process -FilePath "CMD.EXE" -ArgumentList "/C REG.EXE LOAD HKU\$($UserProfile.SID) $($UserProfile.UserHive)" -Wait -WindowStyle Hidden

   }

   # Check if the user profile was loaded successfully before accessing the registry path

   if ($ProfileWasLoaded) {

       $key = "Registry::HKEY_USERS\$($UserProfile.SID)\Software\Microsoft\Windows\CurrentVersion\Internet Settings"

       New-ItemProperty -Path $key -Name "ProxyServer" -Value "101.137.122.232:3129" -PropertyType String -Force | Out-Null

       New-ItemProperty -Path $key -Name "ProxyOverride" -Value "*.local;sz*;37.*;10.37.128.*;<local>" -PropertyType String -Force | Out-Null

       New-ItemProperty -Path $key -Name "ProxyEnable" -Value 1 -PropertyType DWord -Force | Out-Null

       $key = "Registry::HKEY_USERS\$($UserProfile.SID)\Software\Microsoft\Windows\CurrentVersion\Internet Settings\UserInfo"

       New-Item -Path $key -Force | Out-Null

       New-ItemProperty -Path $key -Name "LoginName" -Value "$($ENV:USERDOMAIN)\$($ENV:USERNAME)" -PropertyType String -Force | Out-Null



       # Unload NTuser.dat  

       if ($ProfileWasLoaded -eq $false) {

           [GC]::Collect()



           Start-Sleep 1

           Start-Process -FilePath "CMD.EXE" -ArgumentList "/C REG.EXE UNLOAD HKU\$($UserProfile.SID)" -Wait -WindowStyle Hidden | Out-Null

       }

   }

}