2016-08-20 2 views
0

Windows 서버에는 20 명의 사용자가 usr01 - usr20로 있습니다. 특정 응용 프로그램의 경우 각 사용자마다 LDTP_PORT와 같은 사용자 수준의 환경 변수가 있어야하지만 usr1에는 4001, usr20에는 4020과 다른 값이 있어야합니다.한 사용자가 다른 사용자의 userlevel 변수를 만들 수있는 방법

수동 프로세스로 각 사용자로 로그온 할 수 있었지만 30 대의 서버를 업데이트 할 수는 없었습니다. 나는 코드를 시도했지만 특정 사용자로 명시 적으로 로그인해야합니다.

한 명의 사용자 (admin 사용자)가 다른 모든 사용자의 사용자 수준 변수를 설정할 수 있으므로 powershell 또는 다른 방법을 찾습니다. 나는 SID를 가진 사용자를 매핑하는 방법을 잘 모르므로 레지스트리 HKU에서 -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 기능, 예외를 발생하지 않을 것을 기억하십시오 이미이 이름을 가진 하나의 변수가 있지만 이전의 변수를 단순히 덮어 씁니다.

편집 : $usersList 올바른 사용자 이름을 포함,

[System.Environment]::SetEnvironmentVariable($newEnvVariableName, $firstLPTPort, $userName) 

을하지만 확인이에

[System.Environment]::SetEnvironmentVariable($newEnvVariableName, $firstLPTPort, "Machine") 

을 : 당신은 또한 특정 사용자의 범위를 지정할 수 있습니다

, 그냥이 변경 .

관련 문제