Windows服务器有20个用户作为usr01 - usr20。对于特定应用程序,每个用户应具有用户级环境变量,例如LDTP_PORT,但对于usr 1,不同的值为4001,对于usr20,则为4020。
作为手动流程,我可以作为每个用户登录并更新,但不能用于30台服务器。我尝试了代码,但需要以特定用户身份显式登录。
我寻找powershell或其他方式,因为一个用户(管理员用户)可以为所有其他用户设置用户级别变量。我不想在注册管理机构HKU使用-SID-,因为我不确定如何使用SID映射用户)
答案 0 :(得分: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
包含正确的用户名。