1

Мне нужно знать, есть ли какой-либо способ удалить все экземпляры заданной переменной среды, это означает от всех пользователей и от самой системы.

Проблема в обновлении программного обеспечения. Мне нужно сохранить установленное программное обеспечение в 2 версиях, старой и новой. Во время выходных в прямом эфире мне нужно убедиться, что переменная среды OLD Version удалена из системы (пользователя и системы), и просто создать новую.

Проблема в том, что я могу войти в систему с правами администратора, но не с реальным пользователем, поэтому, если у него есть переменная окружения в его профиле, это когда у меня проблема.

Есть ли способ / мягкий для этой цели?

Большое спасибо.

2 ответа2

2

Системные переменные хранятся в реестре в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment и влияют на всех пользователей, поэтому вы должны удалить нежелательную переменную только один раз.

Пользовательские переменные находятся в HKEY_CURRENT_USER\Environment , но HKCU на самом деле является просто смонтированным ключом от HKEY_USERS . Поэтому, если у вас есть права администратора, вы можете получить доступ к переменным окружения других пользователей, отредактировав HKEY_USERS\S-[something]\Environment .

0

Создал этот командлет ps, если вы хотите удалить определенную переменную среды для определенного пользователя

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"
    }
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .