我認爲,這有一個簡單的方法,但並不真正優雅。由於端口號碼不是敏感數據(因爲在你的情況下,你可以很容易地預測其他用戶的端口),所以我只會做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」或類似的內容。 –