2016-08-20 39 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包含正確的用戶名。

相關問題