【问题标题】:SETX with RUNAS on Windows 10 Fails在 Windows 10 上使用 RUNAS 的 SETX 失败
【发布时间】:2016-02-14 09:28:42
【问题描述】:

此语句失败。

runas /noprofile /env /savecred /user:"Eve" setx path "%path%;D:\Program Files (x86)\metapad36" /M

通过将notepad 加载到变量中,并将该变量传递给runas,与notepad 一起使用。

但是使用setx,我没有收到错误消息。控制台显示runas 的帮助文件。

感谢任何帮助。

谢谢!

更新:

这行得通:

>set myvar=notepad
>echo "%myvar%"
"notepad"

然后就可以了:

runas /noprofile /env /savecred /user:Adam "%myvar%"

这似乎有效。它扩展了“%path%”的值,这很好。一些 cmets 假设我需要传递给 runas 的命令中的原始 % 变量,但如果扩展为它们的实际值就可以了:

>set myvar=setx path "%path%;D:\Program Files (x86)\metapad36" /M
>echo "%myvar%"
"setx path "C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\ProgramData\chocolatey\bin;D:\Program Files (x86)\Microsoft VS Code\bin;;D:\Program Files (x86)\metapad36" /M"

但是这失败了:

>runas /noprofile /env /savecred /user:Adam "%myvar%"

更新2:

如果我在 /user 参数中使用不存在的用户名运行此程序,我会被要求输入密码。但是,如果我使用真正的管理员用户名(在非管理员命令提示符下)运行它,我不会被要求输入密码。相反,一个未知的窗口会闪烁并消失,并且系统路径不会改变。

>runas /noprofile /env /savecred /user:"Eve" "setx path \"%path%;D:\Program Files (x86)\metapad36\" /M"
Attempting to start setx path "C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\ProgramData\chocolatey\bin;D:\Program Files (x86)\Microsoft VS Code\bin;;D:\Program Files (x86)\metapad36" /M as user "DESKTOP-AB0HSLD\Eve" ...
Enter the password for Eve:

>runas /noprofile /env /savecred /user:"Adam" "setx path \"%path%;D:\Program Files (x86)\metapad36\" /M"
Attempting to start setx path "C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\ProgramData\chocolatey\bin;D:\Program Files (x86)\Microsoft VS Code\bin;;D:\Program Files (x86)\metapad36" /M as user "DESKTOP-AB0HSLD\Adam" ...

我将此代码放在一个批处理文件中,然后执行它。仍然得到闪烁的屏幕和上面显示的相同的“尝试”输出。

还是很迷茫……

【问题讨论】:

  • 1) 如果可能,请始终使用批处理文件,这将使您免于逃避地狱。 2) 至于“未知的窗口闪烁” - 当您从 1) 中获得此批处理文件时,您可以将“cmd.exe /k mybatchfile.cmd”作为命令运行。 /k 开关将使新的 shell 窗口在批处理文件完成后停留在那里,因此您将真正看到那里发生了什么,并且能够找出问题所在。
  • 感谢您的建议!但我并不害怕逃离地狱,只是想解决它,希望得到比我更了解的人的帮助。重新批处理文件,如果这里没有人真正知道我的问题的解决方案,那么我将尝试使用批处理文件进行故障排除。但希望这里有人能得到它。
  • @Wapac,我将此代码放在一个批处理文件中,然后执行它。仍然得到闪烁的屏幕和上面显示的相同的“尝试”输出。
  • 嗨,只是在 ping 宇宙,这个话题仍未解决。如果有人可以提供一些建议,我很乐意进行试验。已经尝试将命令放入批处理文件中,但仍然没有乐趣。谢谢!

标签: windows runas setx


【解决方案1】:
  1. 命令必须是一个参数——可能用引号括起来。用于包围路径参数的附加引号需要括起来。将此命令保存在 .cmd 批处理文件中,或使用反斜杠转义引号。

    正如 Wapac 在 cmets 中提到的,runas /? 帮助文本特别推荐使用反斜杠转义。但是使用批处理文件可能更可取,因为它似乎无法逃脱百分号。

  2. 如果你runas/noprofile 一起使用,你怎么能指望setx 完成任何事情?

【讨论】:

  • escaping " 带有反斜杠 - 请参阅 runas 帮助示例:> runas /env /user:user@domain.microsoft.com "notepad \"my file.txt\"";还有 %path% 会导致问题,因此最好在此处使用批处理文件
  • @Wapac:插入符号在以前的版本中用于转义引号,并且在 Windows 10 中仍然有效。我不知道是否在 Windows 10 或 Windows 8.1 或 Windows 8 中引入了反斜杠转义;但在 Windows 7 之前肯定需要插入符号。
  • 如有必要,% 也可以转义。
  • 我刚刚在 Windows 10 上使用插入符号进行了测试,但它不起作用,斜线效果很好。我无法弄清楚如何逃避 % 以使其正常工作。我尝试了runas ... "cmd.exe /k set x=%path%",但失败了(路径在初始shell中扩展),但使用转义版本runas ... "cmd.exe /k set x=^%path^%"它也失败了,因为在新shell中echo %x%给了我“%path%”而不是路径本身。
  • 如果我不确定,我不想投票给你。它在我的 Windows 10 上对我不起作用,不知道为什么,但这不会让你错。我在转义 % 时遇到的问题非常奇怪,以至于我宁愿创建一个新的 SO 问题。
猜你喜欢
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 1970-01-01
  • 1970-01-01
  • 2020-03-08
  • 1970-01-01
相关资源
最近更新 更多