我需要知道是否有任何方法可以删除给定环境变量的所有实例,这意味着从所有用户和系统本身删除。
问题与软件更新有关。我需要安装两个版本的软件,一个是旧版本,另一个是新版本。在上线周末,我需要确保从系统(用户和系统)中删除旧版本环境变量,然后创建新版本。
问题是我可以使用管理员用户身份登录系统,但不能使用真实用户身份登录,所以如果他的个人资料中有环境变量,那么我就会遇到问题。
有没有什么方法/软件可以达到这个目的?
多谢。
答案1
系统变量存储在注册表中HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
并影响所有用户,因此您只需删除一次不需要的变量。
用户变量在 中HKEY_CURRENT_USER\Environment
,但 HKCU 实际上只是 中的一个挂载键HKEY_USERS
。因此,如果您具有管理权限,则可以通过编辑 来访问其他用户的环境变量HKEY_USERS\S-[something]\Environment
。
答案2
如果您想要删除特定用户的特定环境变量,请创建此 ps cmdlet
function Remove-EnvironmentVariableForUser
{
[CmdletBinding()]
param(
[Parameter(Mandatory)]
[string] $User,
[Parameter(Mandatory)]
[string] $Variable
)
Set-StrictMode -Version 'Latest'
$AdObj = New-Object System.Security.Principal.NTAccount($User)
$strSID = $AdObj.Translate([System.Security.Principal.SecurityIdentifier])
$Sid = $strSID.Value
Assert-NotNull $Sid
$Path = "Registry::HKEY_USERS\$Sid\Environment"
$Property = Get-ItemProperty $Path -Name $Variable -ErrorAction Ignore
if($Property) {
Write-Warning "Removing $Variable property on path $path from user $User"
Remove-ItemProperty $Path -Name $Variable
}else{
Write-Host "No such Variable exists"
}
}