2016-08-20 55 views
0

Windows服务器有20个用户,名称为usr01 - usr20。对于特定的应用程序,每个用户应该具有用户级别的环境变量,例如LDTP_PORT,但不同的值为4001(usr 1)和4020(usr20)。一个用户如何为其他用户创建用户级别变量

作为手动过程,我可以作为每个用户登录并更新,但对于30台服务器不可能。我尝试通过代码,但它需要明确登录为特定用户。

我寻找powershell或其他方式作为一个用户(谁是管理员用户)可以设置所有其他用户的用户级别变量。我不想与SID-一起在香港大学注册处工作,因为我不知道如何将用户映射到SID)

+0

这个问题解决了什么问题?如果应用程序需要知道哪个用户登录,它可以读取“$ Env:USERNAME”或类似的内容。 –

回答

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

相关问题