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可能会起作用,但您需要先找出用户登录的会话。 –