Как кодировать BAT-файл, чтобы он всегда работал в режиме администратора?

149

У меня есть эта строка внутри моего BAT-файла:

"Example1Server.exe"

Я хотел бы выполнить это в режиме администратора. Как изменить код летучей мыши, чтобы запустить это как администратор?

Это верно? Нужно ли ставить цитаты?

runas /user:Administrator invis.vbs Example1Server.exe
Karikari
источник
1
См. Также stackoverflow.com/questions/7690994/…
Эд Гривз
1
См. Также stackoverflow.com/questions/7044985/…
Эд Гривз

Ответы:

71

Вы используете runasдля запуска программы от имени конкретного пользователя:

runas /user:Administrator Example1Server.exe
Керрек С.Б.
источник
6
@karikari: имя, подобное этому ( Example1Server.exe), не нужно заключать в кавычки, но в некоторых других случаях (например, пробелы в имени :) Example1 Server.exeони вам действительно понадобятся. Вы можете использовать кавычки, даже если они не нужны.
Андрей М,
18
Учетная запись администратора не может быть названа администратором
Андерс
9
@ Андерс: Нет, возможно, нет; Я предполагаю, что ОП может «определить шаблон». Это не был ответ plz-give-me-teh-codez: -S Кстати, я должен добавить, что OP может потребоваться более сложная команда, например runas /User:abc "csript myscript.vbs", или runas /User:abc "cmd /c start ...".
Керрек С.Б.
16
Боюсь, что этот ответ не тот, который хотят 90% посетителей, так как это даже сложнее, чем щелкнуть правой кнопкой мыши -> запустить от имени администратора, даже если это технически правильно. Проверьте еще раз другой ответ. Это именно то, что большинство захочет.
JVIV
13
Нет, этот ответ технически неверен. Запуск от имени администратора - это не то же самое, что запуск под пользователем, чье имя называется «Администратор», а права разные. Смотрите другой ответ.
Александр Гельбух
370

Другой ответ требует ввода пароля учетной записи администратора. Кроме того, запуск под учетной записью в группе администраторов отличается от запуска с правами администратора, см. UAC в Википедии.

Инструкции по Windows 7

Для запуска от имени администратора создайте ярлык для командного файла.

  1. Щелкните правой кнопкой пакетный файл и нажмите кнопку «Копировать».
  2. Перейдите туда, где вы хотите ярлык
  3. Щелкните правой кнопкой мыши на фоне каталога
  4. Выберите Вставить ярлык

Затем вы можете установить ярлык для запуска от имени администратора:

  1. Щелкните правой кнопкой мыши по ярлыку
  2. Выберите Свойства
  3. На вкладке «Ярлык» нажмите «Дополнительно»
  4. Установите флажок «Запуск от имени администратора»
  5. Нажмите ОК, ОК

Теперь, когда вы дважды щелкнете по ярлыку, он запросит подтверждение UAC, а затем « Запуск от имени администратора» (что, как я уже говорил выше, отличается от запуска под учетной записью в группе администраторов).

Проверьте скриншот ниже

Скриншот

Примечание. При этом для запуска от имени администратора текущий каталог (путь) не будет совпадать с файлом bat. Это может вызвать некоторые проблемы во многих случаях, когда файл bat ссылается на относительные файлы рядом с ним. Например, в моей Windows 7 текущая директория будет SYSTEM32 вместо расположения файла bat! Чтобы обойти это , вы должны использовать

cd "%~dp0"

или лучше

pushd "%~dp0"

чтобы убедиться, что cur dir находится по тому же пути, что и файл bat.

Эд Гривз
источник
8
Ах, это действительно было скрыто (большинство из нас не думали, что у этой продвинутой кнопки есть такая опция). Я почти уверен, кто бы ни думал о другом сложном ответе, он не знал этого. Это ответ 90% + посетителей захотят.
J Рив
1
Я согласен. это должен быть ответ. Я также добавил скриншот, чтобы было легче найти кнопку продвижения
fedmich
1
Это также относится к Windows Server 2012 R2.
Garec
3
Это не работает для меня ни в Windows 10, ни в Windows 7. Когда я пытаюсь запустить от имени администратора, либо щелкнув правой кнопкой мыши по файлу BAT и «Запуск от имени администратора», либо используя методику, описанную здесь, пакетный файл мигает открытым на секунду затем немедленно закрывается без выполнения команд или программ в командном файле. Я попытался запустить очень простые командные файлы, которые просто повторяют «Hello World», и они тоже терпят неудачу таким образом. Это очень расстраивает. До сих пор я не смог найти решение.
Джонатан Элкинс
1
@JonathanElkins Вы пытались добавить паузу в конце командного файла?
Эд Гривз
32

Просто добавьте это в начало вашего файла bat:

set "params=%*"
cd /d "%~dp0" && ( if exist "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs" ) && fsutil dirty query %systemdrive% 1>nul 2>nul || (  echo Set UAC = CreateObject^("Shell.Application"^) : UAC.ShellExecute "cmd.exe", "/k cd ""%~sdp0"" && %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" && "%temp%\getadmin.vbs" && exit /B )

Это повысит до администратора, а также останется в правильном каталоге. Проверено на Windows 10.

сир
источник
1
Протестировано в Windows 7 и прекрасно работает. Но не могли бы вы объяснить, что он делает? Я не знаком с файлами летучих мышей.
Sunfloro
1
Он создает файл VBScript с кодом, который повышает вас до уровня администратора (если вы этого еще не сделали), и снова запускает файл bat, на этот раз с правами администратора.
Отец
1
Что я собственно ищу! никаких дополнительных изменений или дополнительного файла не требуется!
MSS
1
что такое getadmin.vbs?
Кикенет
4
Добавление двух строк кода в мой существующий пакетный файл - хорошее решение для меня. Я должен был также добавить exitв конец моего командного файла, или я остался бы в приглашении. Вероятно, это связано с тем, что .vbs запускает вторую командную строку.
Бен
10

Если вы можете использовать стороннюю утилиту, вот elevateутилита командной строки .

Это описание использования:

Usage: Elevate [-?|-wait|-k] prog [args]
-?    - Shows this help
-wait - Waits until prog terminates
-k    - Starts the the %COMSPEC% environment variable value and
                executes prog in it (CMD.EXE, 4NT.EXE, etc.)
prog  - The program to execute
args  - Optional command line arguments to prog
женское бесплодие
источник
elevate.exeгорные породы!
Сангбок Ли
8

Вы можете использовать nircmd.exe «S возвысить команду

Справочник по командам NirCmd - поднять

elevate [Program] {Command-Line Parameters}

Только для Windows Vista / 7/2008: Запустите программу с правами администратора. Когда [Программа] содержит один или несколько пробелов, вы должны поместить его в кавычки.

Примеры:

elevate notepad.exe 
elevate notepad.exe C:\Windows\System32\Drivers\etc\HOSTS 
elevate "c:\program files\my software\abc.exe"

PS: я использую его на win 10, и он работает

Дхирадж Бхаскар
источник
6

конвертировать ваш пакетный файл в .exe с помощью этого инструмента: http://www.battoexeconverter.com/, затем вы можете запустить его как администратор

xxedxx
источник
2
Имейте в виду, что многие антивирусы очень чувствительны к исполняемым файлам, созданным таким образом. «Преобразование / шифрование» командных файлов таким способом - старый способ, используемый вредоносными программами.
Хэми
Если вы анализируете этот домен с помощью Symantec - Тип угрозы: другое вредоносное ПО Причина угрозы: Домен зарегистрирован и проверен как обслуживающий вредоносный код. Идентифицируется как вредоносный домен или URL.
Сунил
Плохое предложение
Влад
6
go get github.com/mattn/sudo

затем

sudo Example1Server.exe
mattn
источник
6

Я думаю, что у меня есть решение проблемы с паролем. Этот единственный аргумент действительно удивителен. Он запрашивает пароль один раз, а затем никогда не запрашивает его снова. Даже если вы поместите его в другую программу, он не будет запрашивать пароль. Вот:

runas /user:Administrator /savecred Example1Server.exe

анонимное
источник
4
  1. Мои эксперименты показывают, что команда runas должна включать домен пользователя с правами администратора (по крайней мере, в настройках среды моей организации):

    runas /user:AdminDomain\AdminUserName ExampleScript.bat
    

    Если вы еще не знаете домен пользователя с правами администратора, запустите экземпляр командной строки от имени пользователя с правами администратора и введите следующую команду:

    echo %userdomain%
    
  2. Ответы, предоставленные Kerrek SB и Ed Greaves, будут выполнять целевой файл под учетной записью администратора, но, если файл представляет собой командный сценарий (файл .bat) или сценарий VB (файл .vbs), который пытается работать при обычном входе в систему В пользовательской среде (например, при изменении записей в реестре) вы можете не получить желаемых результатов, поскольку среда, в которой фактически выполняется скрипт, будет средой администратора, а не обычного пользователя! Например, если файл представляет собой сценарий, который работает с кустом реестра HKEY_CURRENT_USER, затронутым «текущим пользователем» будет пользователь с правами администратора, а не пользователь с обычным входом в систему.

pstraton
источник
0

Используйте полный физический диск \ путь к целевому пакетному файлу в свойствах ярлыка.

Это не работает в Windows 10, если вы используете дополнительные диски, как я пытался сделать сначала ...

Samiamias
источник