diff --git a/WindowsLocationServicesON.ps1 b/WindowsLocationServicesON.ps1 index e7ee309..7b2d3e6 100644 --- a/WindowsLocationServicesON.ps1 +++ b/WindowsLocationServicesON.ps1 @@ -1,26 +1,43 @@ -# 1. Terminate the Settings app process so it clears its cache +<# +.SYNOPSIS + Enables Windows Master Location Services and app-level location access. +#> + +# 1. Close Settings app to force a UI refresh when reopened Stop-Process -Name "SystemSettings" -Force -ErrorAction SilentlyContinue -# 2. Set HKLM Device-wide consent -New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\location" -Force | Out-Null -Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\location" -Name "Value" -Value "Allow" -Type String -Force +# 2. Configure and start the Geolocation Service (lfsvc) +Write-Output "Configuring Geolocation service (lfsvc)..." +Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\lfsvc" -Name "Start" -Value 2 -Type DWord -Force +Start-Service -Name "lfsvc" -ErrorAction SilentlyContinue -# 3. Set the Geolocation service operational status flag to Active (1) -New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Services\lfsvc\Service\Configuration" -Force | Out-Null -Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\lfsvc\Service\Configuration" -Name "Status" -Value 1 -Type DWord -Force +# 3. Set service configuration status flag +$svcConfigPath = "HKLM:\SYSTEM\CurrentControlSet\Services\lfsvc\Service\Configuration" +if (-not (Test-Path $svcConfigPath)) { New-Item -Path$svcConfigPath -Force | Out-Null } +Set-ItemProperty -Path $svcConfigPath -Name "Status" -Value 1 -Type DWord -Force -# 4. Set HKCU User consent for all active user hives on the machine -$userSids = Get-ChildItem "Registry::HKEY_USERS" | Where-Object { $_.PSChildName -match "^S-1-5-21-\d+-\d+-\d+-\d+$" } -foreach ($sid in $userSids) { - $targetPath = "Registry::HKEY_USERS\$($sid.PSChildName)\Software\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\location" - if (-not (Test-Path $targetPath)) { - New-Item -Path $targetPath -Force | Out-Null +# 4. Remove any conflicting local policies +$policyPaths = @( + "HKLM:\SOFTWARE\Policies\Microsoft\Windows\LocationAndSensors", + "HKCU:\SOFTWARE\Policies\Microsoft\Windows\LocationAndSensors" +) +foreach ($path in$policyPaths) { + if (Test-Path $path) { + Remove-ItemProperty -Path $path -Name "DisableLocation" -ErrorAction SilentlyContinue + Remove-ItemProperty -Path $path -Name "DisableLocationScripting" -ErrorAction SilentlyContinue + Remove-ItemProperty -Path $path -Name "DisableSensors" -ErrorAction SilentlyContinue } - Set-ItemProperty -Path $targetPath -Name "Value" -Value "Allow" -Type String -Force } -# 5. Restart the Geolocation service cleanly to reload registry state -Restart-Service -Name "lfsvc" -Force +# 5. Enable Master Device-Level Location Switch (HKLM) +$hklmConsentPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\location" +if (-not (Test-Path $hklmConsentPath)) { New-Item -Path$hklmConsentPath -Force | Out-Null } +Set-ItemProperty -Path $hklmConsentPath -Name "Value" -Value "Allow" -Type String -Force -# 6. Re-open the Location Settings page -Start-Process "ms-settings:privacy-location" \ No newline at end of file +# 6. Enable User-Level Location Switch (HKCU and all loaded user hives) +$hkcuConsentPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\location" +if (-not (Test-Path $hkcuConsentPath)) { New-Item -Path$hkcuConsentPath -Force | Out-Null } +Set-ItemProperty -Path $hkcuConsentPath -Name "Value" -Value "Allow" -Type String -Force + +$userSids = Get-ChildItem "Registry::HKEY_USERS" | Where-Object { $_.PSChildName -match "^S-1-5-21-\d+-\d+-\d+-\d+$" } +foreach ($sid in$user` \ No newline at end of file