0
我試圖在遠程機器上設置環境變量。更改遠程Windows機器上的環境變量
setx /s machine var value
不起作用 - 它不產生任何輸出,也不會執行任何操作。
psexec \\machine setx var value
表示它成功更改了該值。但是,當我去機器並打開CMD,它不顯示它。它出現在計算機 - >屬性 - >高級 - >環境變量中。另外,當我運行時
psexec \\machine cmd /c set
它被正確寫入。
我寫了一個名爲RefreshEnvironment.exe程序,基本上執行以下操作:
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
(LPARAM) L"Environment", SMTO_ABORTIFHUNG,
5000, &dwReturnValue);
如果我把它稱爲本地機器上,它解決了這個問題 - 我打開後cmd並得到正確的環境。但是,它不能遠程工作。調用
psexec \\machine RefreshEnvironment.exe
返回「訪問被拒絕」。我只能明確地寫入用戶名和密碼運行它:
psexec \\machine -user domain\username -p password RefreshEnvironment.exe
很奇怪,因爲它是在兩臺機器上相同的域,用戶名和密碼;它不起作用 - 沒有說什麼,但我仍然無法在本地機器上看到環境。
任何想法都會受到歡迎。
您可能需要在登錄用戶會話的上下文中調用SendMessageTimeout。不幸的是,這對代碼並不容易,如果按照這種方式進行操作,則可能需要先查看WTSQueryUserToken函數(在這種情況下,您應該使用-se選項指向psexec)。或者,使用-i選項的psexec可能會起作用,但您需要先找出用戶登錄的會話。 –