Как известно, постоянно работать из под администратора – опасно. Я работаю с правами обычного пользователя, но немного надоело при установке программы переключаться в другую учётную запись. «Запуск от имени» тоже не особо удобен, так как некоторые программы создают ярлыки и настройки только для того пользователя, из под которого запущена установка, то есть все это будет создано только для администратора.
Захотелось найти решение, при котором я запускаю скрипт, ввожу пароль администратора, и тип учётной записи моего текущего пользователя меняется с ограниченной на администратора. После установки программы опять запускаю скрипт, и становлюсь обычным пользователем. При смене типа аккаунта ОС просто переводит пользователя из группы Administrators (Администраторы) в группу Users (Пользователи). Решить эту задачу из командной строки нам поможет net.exe.
Далее в качестве ограниченного пользователя выступает User, в качестве администратора – Privileged. Группы даны на английском так как у меня windows на английском языке.
Понизить свои права просто. Я создал .bat файл tolower.bat со следующими командами:
net localgroup Users User /add net localgroup Administrators User /delete
Здесь мы добавляемся в группу пользователей и удаляемся из администратора. Теперь в Панели управления в учётных записях мы обычный пользователь. Однако ОС позволяет проводить операции с файлами в папке Windows. Для того чтобы всё вступило в силу нужно завершить сеанс и снова зайти под этим пользователем, либо перезагрузить компьютер.
Но вышенаписанное нужно когда мы уже поставили программу, а для этого нам сначала нужно повысить права (ведь изначально мы работаем под пользователем). А вот с повышением прав возникают проблемы.
В командной строке можно выполнять сразу несколько команд, например «cd C:\ && dir». Так как мы теперь работаем из под обычного пользователя, нужно добавляться в администраторы с помощью администратора Privileged. В этом нам поможет команда runas. У администратора Privilged должен быть пароль, если пароль пустой, то ничего не выйдет.
Пробуем
runas /user:Privileged "net localgroup administrators User /add && net localgroup Users User /delete"
Нас спрашивают пароль администратора Privileged, ошибок никаких не выводится, однако из пользователей мы не удалились и в администраторы не попали. Я пока так и не смог разобраться в чём проблема, замена && на & и гугление ни к чему не привели (нашёлся только костыль, нормального решения не найдено).
Тогда пробуем такой toupper.bat:
runas /user:Privileged "net localgroup administrators User /add" runas /user:Privileged "net localgroup Users User /delete"
Минус очевиден – нужно вводить пароль два раза.
Можно сделать .bat файл, где будут запускаться два net localgroup, и вызывать его из второго .bat файла через runas, но это не подходит, так как в итоге я хотел всё собрать в один файл, а тут нужно будет два. Найденный костыль предлагает при запуске .bat-файла создавать ещё один .bat файл с двумя net localgroup, а в конце удалять его, но такое мне тоже не нравится.
В итоге, решить проблему мне не удалось, за короткое время. Решениями типа suDown пользоваться не хочется, хочется всё нативно. Видимо, придётся как-нить глянуть WSH и PowerShell.