
Что-то ускользает от меня при попытке использовать runas для повышения привилегий. Простая машина Win10 с одним пользователем, у которого уже есть права администратора. Мне нужно записать определенный раздел реестра через скрипт, но я получаю «доступ запрещен», когда пытаюсь использовать команду reg напрямую.
> reg ...
ERROR: Access is denied.
Если я попробую:
> runas /user:Administrator Command
Enter the password for Administrator:
1326: The user name or password is incorrect.
Он отклоняет мой пароль пользователя. Я не думаю, что на локальной машине есть определенный пароль администратора, верно? Других учетных записей нет. Попытка:
> runas /user:MyUser Command
Enter the password for MyUser:
740: The requested operation requires elevation
Так как же мне повысить привилегии из командной строки?!? Почему я не вижу, что у меня есть права администратора здесь:
>runas /showtrustlevels
The following trust levels are available on your system:
0x20000 (Basic User)
EDIT: Может быть, мне следует более четко понимать, что я хочу сделать. Из программы на C я хочу внести изменения в WT_KEY_HKLM, "Software\Microsoft\Windows\CurrentVersion\Run". Я мог бы сделать это напрямую в XP, но в более поздних версиях Windows это не имеет никакого эффекта. И действительно, запуск "reg" для этого ключа из командной строки дает отказ в доступе. Я не хочу запускать свою программу с повышенными привилегиями, поэтому моя идея была сделать что-то вроде system("runas reg ..."), где она запросит пароль и внесет изменения в реестр. Но я даже не могу заставить команду работать из командной строки. Может быть, кто-нибудь может подсказать правильный способ сделать это?
решение1
Замените [пользователь] и [команда] на то, что вы пытаетесь использовать, и попробуйте это:
powershell.exe -ExecutionPolicy Bypass -command "& {Start-Process powershell.exe -Credential '[user]' -ArgumentList 'Start-Process ""[command]"" -Verb runAs'}"
Плюсы:
- Его можно использовать в командной строке без повышенных прав, в окне «Выполнить» и с помощью сочетаний клавиш Windows.
- Он повышает только команду. Повышение происходит как часть выполнения команды, а не выполнения окон PowerShell.
Минусы:
- Он всегда будет запрашивать ваш логин (нет возможности сохранить учетные данные, как это можно сделать с помощью runas). - это может быть Pro.
- Если включен UAC, появится запрос на повышение прав — это неизбежно при повышении прав с помощью UAC.
- Он открывает (и закрывает) 2 окна PowerShell во время обработки учетных данных и повышения прав.
- Кавычки в команде проблематичны (или, по крайней мере, БЫСТРО усложняются). Вам нужно будет поместить любую команду, которой нужны кавычки, в пакетный файл и запустить пакетный файл как команду.
Если вы хотите запустить эту команду из командной строки PowerShell, ее можно сократить до следующего вида:
Start-Process powershell.exe -Credential '[user]' -ArgumentList 'Start-Process ""[command]"" -Verb runAs`'
С.
решение2
По умолчанию учетная запись администратора заблокирована, чтобы другие не могли ею злоупотребить. Если вы попытались использовать пустой пароль для команды "runas /user:Administrator", вы увидите, что учетная запись заблокирована.
Если у вашего пользователя уже есть права администратора, вы должны иметь доступ к команде "reg". На моей машине я могу это сделать.
К сожалению, вы не можете использовать "runas" для доступа к повышенной команде; вы должны сделать это через повышенную командную строку. Это можно сделать с помощью команды "runas" (которая в вашем случае не сработает) или щелкнув правой кнопкой мыши "cmd.exe" и выбрав "Запуск от имени администратора".
решение3
Вы можете запустить командную строку как администратор, щелкнув правой кнопкой мыши по значку командной строки или cmd.exe и выбрав запуск от имени администратора. Таким образом, вы будете находиться в командной строке с повышенными правами и не должны иметь описанной вами проблемы. Также вам не придется использовать runas при вводе команд.