我认为,这有一个简单的方法,但并不真正优雅。由于端口号码不是敏感数据(因为在你的情况下,你可以很容易地预测其他用户的端口),所以我只会做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
包含正确的用户名。
这个问题解决了什么问题?如果应用程序需要知道哪个用户登录,它可以读取“$ Env:USERNAME”或类似的内容。 –