SETX с RUNAS в Windows 10 не работает

Это утверждение не работает.

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

Работает с notepad, загружая notepad в переменную и передавая эту переменную в runas.

Но с setx я не получаю сообщение об ошибке. В консоли отображается файл справки для runas.

Цените любую помощь.

Спасибо!

Обновление:

Это работает:

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

И тогда это работает:

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

Кажется, это работает. Он расширяет значение "%path%", что нормально. В некоторых комментариях предполагается, что мне нужны исходные переменные % в команде, которую я передаю 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" ...

я поместил этот код в пакетный файл и выполнил его. Все еще появляется мигающий экран и тот же «попытка» вывода, показанная выше.

еще совсем запутался...


person johny why    schedule 14.02.2016    source источник
comment
1) По возможности всегда используйте пакетные файлы, это убережет вас от побега из ада. 2) что касается неизвестных вспышек окна - когда у вас есть этот пакетный файл из 1), вы можете запустить cmd.exe /k mybatchfile.cmd как команду. Переключатель /k заставит новое окно оболочки оставаться там после завершения пакетного файла, поэтому вы действительно увидите, что там происходит, и сможете выяснить, что было не так.   -  person Wapac    schedule 15.02.2016
comment
Спасибо за предложение! но я не боюсь сбежать из ада, просто хочу решить эту проблему, надеюсь, с помощью людей, которые понимают лучше меня. Что касается командного файла, если здесь никто не знает решения моей проблемы, я попробую использовать пакетный файл для устранения неполадок. Но, надеюсь, кто-то здесь это понимает.   -  person johny why    schedule 15.02.2016
comment
@Wapac, я поместил этот код в пакетный файл и выполнил его. Все еще появляется мигающий экран и такая же попытка вывода, как показано выше.   -  person johny why    schedule 17.02.2016
comment
привет, просто пингую вселенную, что эта тема до сих пор не раскрыта. Я рад поэкспериментировать, если кто-нибудь может предложить некоторые предложения. Уже пытался поместить команду в пакетный файл, но все равно без радости. Спасибо!   -  person johny why    schedule 29.02.2016


Ответы (1)


  1. Команда должна быть одним аргументом, возможно, заключенным в кавычки. Дополнительные кавычки, используемые для окружения аргумента пути, должны быть заключены. Либо сохраните эту команду в пакетном файле .cmd, либо используйте обратную косую черту, чтобы избежать кавычек.

    Как упоминал Wapac в комментариях, экранирование обратной косой черты специально рекомендуется в тексте справки runas /?. Но использование пакетного файла, вероятно, предпочтительнее, потому что избежать знаков процента не представляется возможным.

  2. Как вы можете ожидать, что setx что-то сделает, если вы runas с /noprofile?

person Ross Presser    schedule 14.02.2016
comment
экранирование с обратной косой чертой - см. примеры помощи runas: > runas /env /user:[email protected] "notepad \"my file.txt\""; также то, что %path% вызовет проблемы, поэтому командный файл лучше использовать там - person Wapac; 14.02.2016
comment
@Wapac: Каретки работали для экранирования кавычек в предыдущих версиях и до сих пор работают в Windows 10. Я не знаю, было ли экранирование обратной косой черты введено в Windows 10, Windows 8.1 или Windows 8; но определенно до Windows 7 требовались каретки. - person Ross Presser; 14.02.2016
comment
% также можно экранировать, если это необходимо. - person Ross Presser; 14.02.2016
comment
Я только что протестировал каретку в Windows 10, и это не сработало, косая черта работает хорошо. Я не смог понять, как избежать %, чтобы он работал правильно. Я попробовал runas ... "cmd.exe /k set x=%path%", и это не удалось (путь был расширен в исходной оболочке), но с экранированной версией runas ... "cmd.exe /k set x=^%path^%" это также не удалось, потому что в новой оболочке echo %x% дал мне %path% вместо самого пути. - person Wapac; 14.02.2016
comment
Я не хочу голосовать против вас, если я не уверен в этом. У меня это просто не работает на моей Windows 10, не знаю почему, но это не делает вас неправым. И моя проблема с экранированием% настолько странная, что я скорее создаю новый вопрос SO. - person Wapac; 14.02.2016
comment
Может быть, вы правы... еще немного работы, и теперь я думаю, что каретки иногда убегают, иногда их едят, а иногда просто ломают. :( Ну что ж - person Ross Presser; 14.02.2016
comment
Давайте продолжим обсуждение в чате. - person Ross Presser; 14.02.2016
comment
Пожалуйста, посмотрите обновление в моем ОП. Кроме того, в этой статье говорится, что% можно избежать, удвоив их. Однако, как я упоминал в обновлении, если переменные % расширяются, это нормально — мне не нужны фактические имена переменных % в команде runas. ss64.com/nt/syntax-esc.html - person johny why; 15.02.2016
comment
Что касается мигающего экрана, который проходит слишком быстро, чтобы увидеть какие-либо ответные сообщения, есть ли способ получить такие сообщения из какого-либо системного журнала? Спасибо - person johny why; 29.02.2016