나는 단순한 방법이 있지만 정말로 우아하지 않다.
포트 번호는 중요한 데이터가 아니기 때문에 (다른 사용자의 포트를 쉽게 예측할 수 있기 때문에) 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 기능, 예외를 발생하지 않을 것을 기억하십시오 이미이 이름을 가진 하나의 변수가 있지만 이전의 변수를 단순히 덮어 씁니다.
편집 : $usersList
올바른 사용자 이름을 포함,
[System.Environment]::SetEnvironmentVariable($newEnvVariableName, $firstLPTPort, $userName)
을하지만 확인이에
[System.Environment]::SetEnvironmentVariable($newEnvVariableName, $firstLPTPort, "Machine")
을 : 당신은 또한 특정 사용자의 범위를 지정할 수 있습니다
, 그냥이 변경 .
이 문제는 어떤 문제입니까? 응용 프로그램이 로그온 한 사용자를 알아야 할 경우'$ Env : USERNAME' 또는 유사한 것을 읽을 수 있습니다. –