Начиная с билда 24H2, в Windows 11 доступна встроенная команда sudo, которую можно использовать для запуска команд с правами администратора прямо из непривилегированной сессии cmd/PowerShell.
По умолчанию команда sudo в Windows 11 отключена. Включить ее можно переключателем Enable sudo через панель Settings -> System -> For developers.
Либо можно включить sudo можно через реестр:
reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Sudo" /v "Enabled" /t REG_DWORD /d 1 /f
Например, следующая PowerShell команда перезапуска службы Windows при запуске из непривелигированной сессии возвращает ошибку:
Restart-Service iphlpsvc
Теперь включаем sudo в настройках Windows и эту же команду запускаем через sudo:
sudo powershell "Restart-Service iphlpsvc"
Появится окно запроса контроля учетных записей UAC на повышение привилегий и команда будет выполнена с правами администратора.
Аналогично можно использовать sudo в cmd. Пробую остановить службу в окне обычной командой строки:
net stop iphlpsvc
System error 5 has occurred. Access is denied.
Теперь запускаю эту же команду через sudo:
sudo net stop iphlpsvc
Start-Process powershell -Verb runAs
Sudo для Windows может запускать приложения с повышенными правами в трех режимах, которые можно выбрать в параметрах sudo в панели управления или задать из командой строки:
- В новом окне (In a new window) – при запуске команды/приложения через sudo, она запускается в новом окне (сессии), запущенной с правами администратора (это поведение по умолчанию):
sudo config --enable forceNewWindow
- With input disabled – самый безопасный вариант, когда команда запускается в привилегированном режиме в текущем окне, но не может получать или запрашивать данные от пользователя в этом окне:
sudo config --enable disableInput
- Inline – это режим наиболее похож на поведение команды sudo в Linux и других ОС. Команда с повышенными правами запускается в текущем окне и может получать входные данные из консоли (самый удобный, но менее безопасный вариант):
sudo config --enable normal
Можно принудительно запустить команду внутри текущего окна независимости от текущего режима sudo. Достаточно добавить параметр inline.
sudo --inline net stop iphlpsvc
Полный список поддерживаемых опций и параметров sudo в Windows можно вывести такой командой:
sudo -h