一个用户如何为其他用户创建userlevel变量

时间:2016-08-20 15:37:13

标签: powershell

Windows服务器有20个用户作为usr01 - usr20。对于特定应用程序,每个用户应具有用户级环境变量,例如LDTP_PORT,但对于usr 1,不同的值为4001,对于usr20,则为4020。

作为手动流程,我可以作为每个用户登录并更新,但不能用于30台服务器。我尝试了代码,但需要以特定用户身份显式登录。

我寻找powershell或其他方式,因为一个用户(管理员用户)可以为所有其他用户设置用户级别变量。我不想在注册管理机构HKU使用-SID-,因为我不确定如何使用SID映射用户)

1 个答案:

答案 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包含正确的用户名。