как один пользователь может создать переменную уровня пользователя для других пользователей

powershell

75 просмотра

1 ответ

Сервер Windows имеет 20 пользователей как usr01 - usr20. Для конкретного приложения у каждого пользователя должна быть переменная среды уровня пользователя, такая как LDTP_PORT, но разные значения, такие как 4001 для usr 1 и 4020 для usr20.

Как ручной процесс, я мог войти в систему как каждый пользователь и обновить, но это невозможно для 30 серверов. Я пробовал через коды, но это требует явного входа в систему как конкретного пользователя.

Я ищу PowerShell или какой-то другой способ, поскольку один пользователь (который является администратором) может установить переменную уровня пользователя для всех других пользователей. Я не хочу работать с -SID- в HKU реестра, поскольку я не уверен, как сопоставить пользователя с SID)

Автор: Selva Источник Размещён: 08.11.2019 11:30

Ответы (1)


0 плюса

Я думаю, что есть один простой способ, но не очень элегантный.

Поскольку номер порта не является конфиденциальной информацией (потому что в вашем случае вы можете легко предсказать порты другого пользователя), я бы просто сделал 20 глобальных переменных, чтобы у каждого были свои. Например: пользователь с именем пользователя $env:userNameбудет иметь свой порт в $env:userNameLPTPort.

Так что код будет таким простым:

$firstLPTPort = 4000
ForEach ($userName in $usersList) {
    $newEnvVariableName = "env:" + $userName + "LPTPort"

    #machine means that the scope is for whole machine and it wont disappear after closing the session
    [System.Environment]::SetEnvironmentVariable($newEnvVariableName, $firstLPTPort, "Machine")
    $firstLPTPort++
}

Чтобы подтвердить, что это работает, используйте это:

echo ([System.Environment]::GetEnvironmentVariable($envName,"Machine"))

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

Редактировать:

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

[System.Environment]::SetEnvironmentVariable($newEnvVariableName, $firstLPTPort, "Machine")

в это:

[System.Environment]::SetEnvironmentVariable($newEnvVariableName, $firstLPTPort, $userName)

Но убедитесь, что он $usersListсодержит правильные имена пользователей.

Автор: PatrykMilewski Размещён: 20.08.2016 04:15
Вопросы из категории :
32x32