Это работает для меня на всех платформах, включая Windows 10. Мои потребности просты, возможно, вы сможете адаптировать подход, если вам нужна сила.
Я придумал небольшой скрипт с именем sudo.cmd
названный для команды Linux sudo. Это работает достаточно хорошо, это думаю. Я обрисовал в общих чертах требования, шаги, которым нужно следовать, и сценарий в нижней части с примером. Сначала слово предупреждения.
ВНИМАНИЕ: Команда запускается в системном каталоге Windows по умолчанию. Вы хотите , чтобы cd
- диск где - то безопасное первым.
требования:
- Запустите команду с правами администратора из Windows.CMD
или оболочка cmd.
- требуется обычная проверка привилегий Windows в команде
- Другими словами, команда НЕ будет работать, пока я не вошел в систему с привилегированной учетной записью.
- Выполните команду с правами администратора и продолжайте при вызове внутри скрипта. Так что дождитесь завершения команды.
- Будь простым, чтобы он всегда работал
- Не нужно вводить пароль каждый раз, если я уже залогинен.
- Лучшим способом было бы, если бы я мог ввести пароль один раз, как это делает настоящая команда
sudo
в Linux.
решение:
- Создайте командный скрипт для выполнения всех переданных аргументов,
sudo.cmd
- Создайте ярлык Windows для командного сценария с именем:
sudo.lnk
.
- Поместите
sudo
путь Windows, чтобы его можно было увидеть.
- Отредактируйте свойства ярлыка, сделайте пустым Путь
Start in:
- Нажмите кнопку [
Advanced
] - установите флажок « Run as Administrator
- Включите ярлыки в вашем пути к Windows, используйте переменную окружения PATHEXT, а именно.
d:> echo %PATHEXT%
.lnk;.EXE;.CMD;.BAT;.COM
Когда вы вводите sudo dir
в командной строке, Windows покажет
User Account Control
Do you want to allow this app to make changes to this device?
[YES] [NO]
Всплывающее окно контроля доступа. Если вы нажмете «[ NO
]», ничего не произойдет. Windows покажет сообщение « Access is denied.
».
Когда вы нажимаете «[ YES
]», команда каталогов запускается с повышенными привилегиями. Конечно, вы, вероятно, хотите что-то более интересное, например, остановку или запрос к службе:
sudo sc query SDRSVC
SDRSVC - это имя службы для "Службы резервного копирования Windows", в отдельном окне Cmd показано следующее:
[sudo]
administrator
---------------
sc query SDRSVC
SERVICE_NAME: SDRSVC
TYPE : 10 WIN32_OWN_PROCESS
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
[done]
Press any key to continue . . .
Сам скрипт sudo.cmd
очень прост . Как я уже сказал, мои потребности просты. Я просто хочу остановить и запустить сервисы, пока я развертываю код для тестирования.
sudo.cmd
:
@echo off
@rem sudo.cmd
cd /d %temp%
@echo.
@echo. administrator
@echo. ---------------
cd
@echo.
@rem _________________________________________________
@rem -- Print usage . . .
@if [""] ==["%~1"] goto USAGE
@if /i ["--HELP"]==["%~1"] goto USAGE
@rem _________________________________________________
@rem
@echo. %*
@rem
%*
@rem
set EXIT_STATUS=%ERRORLEVEL%
@rem -- -- -- -- --
@echo.
@echo. [done]
@rem ______________________________________________________
:Exit
@echo.
@pause
exit /b %EXIT_STATUS%
@rem ______________________________________________________
:USAGE
@echo.
@echo ^Usage:
@echo. sudo ^<complete command line^>
@echo.
@echo. Attempts to rune the: ^<complete command line^>
@echo. under Administrator priviliges. Relies on Windows
@echo. prompt for elevated privileges.
@rem ______________________________________________________
@goto Exit
Команда pause
ждет вас, чтобы просмотреть результаты. Если вы сделаете pause
, окно администрирования закроется, и вы не будете знать, сработала ли команда. ERRORLEVEL
из команды также возвращается.