Вадим Стеркин

  • Главная
  • Windows
  • SSD
  • Программы
  • Разное
  • Об авторе
Вы тут: Главная → Windows → sudo и resudo в PowerShell

sudo и resudo в PowerShell

Рубрики: Windows Обновлено: 30.09.2020 комментариев 10

Вчера я в очередной раз наткнулся на то, что выполненной команде нужны права администратора, и воспользовался полезной функцией PowerShell, написанной на коленке Василием Гусевым. Ниже мой слегка измененный вариант.

function resudo (
  [switch]$NoProfile
)
{
  $cmdline = "-NoExit -command $((Get-History)[-1].commandline)"
  if ($NoProfile) {$cmdline = "-NoProfile $cmdLine"}
  Start-Process -FilePath powershell -ArgumentList $cmdline -Verb runas
}

function sudo (
  [scriptblock]$sb,
  [switch]$NoProfile
) 
{
  $cmdline = "-NoExit -command $sb"
  if ($NoProfile) {$cmdline = "-NoProfile $cmdLine"}
  Start-Process -FilePath powershell -ArgumentList $cmdline -Verb runas
}

Это нужно закинуть в профиль PowerShell, а если его нет — создать. После чего:

  • Запуск предыдущей команды от имени администратора [после отлупа о недостатке прав]
    vssadmin list shadows
    resudo
  • Запуск команды от имени администратора [когда вы заранее знаете, что потребуется повышение]
    sudo {vssadmin list shadows}

Демо:

resudo

Конечно, это совсем не то же самое, что sudo в Linux, но ускоряет работу и экономит время. Оригинал функции в чате инсайдеров, но я счел более удобным дефолтный запуск без выхода из PowerShell, т.е. сразу с -NoExit.

P.S. Обычно такие небольшие посты я пишу в свой канал Telegram, но там затруднительно красиво опубликовать сложный код вместе с видео ✌

Метки: PowerShell, ускорение Информация в статье применима к Windows 7 и новее

Об авторе

Вадим - владелец этого блога, и почти все записи здесь вышли из-под его пера. Подробности о блоге и авторе здесь.

Вас также может заинтересовать:

  • Как скачать видео с YouTube с помощью youtube-dl и PowerShell
← Меню Пуск в Windows 10: отключение запросов к Bing и предложения поискать в интернете
Нюансы беспарольного входа в Windows 10 →
Telegram logo

Я в Telegram

Подпишитесь на канал и читайте интересные записи чаще! Есть вопросы? Задайте их в чате.

комментариев 10

↓
  1. Евгений Грицан

    01.10.2020 в 09:24

    Спасибо, думаю, пригодится.
    Только я работаю с Powershell, используя ConEmu, он перехватывает создание окна интерпретатора, например после команды powershell в окне «Выполнить«. А функции sudo/resudo создают обычное новое окно с повышенными привилегиями. Можно ли изменить функции таким образом, чтобы открывались новые вкладки ConEmu?

    Ваша оценка: Thumb up Thumb down 0
    • Vadim Sterkin

      01.10.2020 в 09:39

      Я не пользуюсь ConEmu, поэтому не могу ничего точно сказать. Могу лишь предположить, что все вкладки ConEmu работают в рамках одного «окна», т.е. одного приложения. Если оно запущено с обычными правами, то оно не может быть одновременно запущено с правами администратора.

      Если мое предположение верно, то единственный выход — запуск нового экземпляра ConEmu с правами администратора и передача ему параметров команды.

      Ваша оценка: Thumb up Thumb down 0
      • Евгений Грицан

        01.10.2020 в 10:10

        Я пользуюсь этой оболочкой довольно давно, не особо вдаваясь в её внутреннюю кухню. Но помню по какой-то статье, что там много всяких костылей, которые пришлось разработчикам напилить, чтобы перехватывать создание окон обработчиков cmd и powershell.
        Судя по тому, что я могу создать отдельную вкладку с повышенными привилегиями внутри запущенного приложения с обычными правами, как-то всё же можно теоретически допилить скрипт, но я, конечно, не жду, что кто-то закопается. Просто вдруг у кого-то такой же рабочий сетап и больше знаний языка.
        https://conemu.ru/img/ConEmu-Maximus5.png

        Ваша оценка: Thumb up Thumb down 0
        • Vadim Sterkin

          01.10.2020 в 11:09

          Можете поспрашивать в чате @winsiders, там есть любители ConEmu.

          Ваша оценка: Thumb up Thumb down +1
    • Lecron

      01.10.2020 в 14:37

      В поставке ConEmu есть свой батник, позволяющий запускать программы с повышенным приоритетом во вкладке. Тоже sudo в названии. Нужно изменить Start-process на использование этого батника. Что-то типа

      Start-Process -FilePath sudo -ArgumentList powershell $cmdline -Verb runas

      Любопытная матрешка получается. Команда шела sudo, вызывает командный файл другого шела sudo, который открывает вкладку с первым шелом с админ-правами.

      Ваша оценка: Thumb up Thumb down 0
      • Vadim Sterkin

        01.10.2020 в 17:31

        Угу, когда вопрос перекочевал в чат, я просто загуглил conemu elevated и вышел на док https://conemu.github.io/en/csudo.html

        Ваша оценка: Thumb up Thumb down 0
  2. Ilya K

    01.10.2020 в 13:29

    Отлично) Но к сожалению, это не совсем sudo: У вас открывается новая консоль.

    Так происходит потому, что при запуске процесса с UAC (через глагол runAs) сам процесс запускается не из вашего процесса, а из системного сервиса (не помню, как он точно называется).

    В итоге, процесс с повышенными привилегиями не является наследником вашего процесса, и не наследует от него ни хендлер консоли, ни stdout.

    Насколько я понимаю, красивого решения «поднять привилегии существующей программе» без перезапуска не существует.

    Мы в свое время решали это хаком, запуская свой привелигированный процесс, и прося его (через named pipe) запустить другой процесс. Но городить такое на powershell конечно никто не будет, да и вряд-ли новое окно является проблемой)

    Ваша оценка: Thumb up Thumb down 0
    • Vadim Sterkin

      01.10.2020 в 17:29

      Да, у этого метода много ограничений, но RunAs в данном случае просто запуск от имени администратора, а не от имени системного процесса.

      Наследником процесса де-факто является https://i.imgur.com/JVP2tXB.png , но я понял, о чем вы.

      Да, перезапуск нужен. Тот же Process Explorer запускает новый экземпляр, если из меню перезапустить.

      Ваша оценка: Thumb up Thumb down 0
  3. Fullmoon

    01.10.2020 в 13:56

    Полезно, спасибо. Особенно resudo. Я пользуюсь sudo от http://blog.lukesampson.com/sudo-for-windows,
    https://github.com/lukesampson/psutils/blob/master/sudo.ps1 — судя по объёму кода, оно более навороченное. И новые окна не открывает.

    Надо будет туда resudo прикрутить.

    Ваша оценка: Thumb up Thumb down +1
    • Vadim Sterkin

      01.10.2020 в 17:30

      Интересно, спасибо! Но он там подгружает kernel32.dll, тут надо о безопасности думать тоже.

      Ваша оценка: Thumb up Thumb down 0

Обсуждение завершено.

Subscribers

Популярные записи

  • Автоматическое шифрование BitLocker в Windows 10 (32)
  • Мобильные технологии пожирают мир (104)
  • Знаете ли вы все эти способы выключения компьютера? (168)
  • Вы слишком мало пишете на SSD! (126)
  • Почему в Windows 10 отключили бэкап реестра и как это исправить (20)
  • Дело о заблокированной кнопке «Да» (137)
  • Как восстановить удаленные файлы и папки из теневых копий в Windows (107)
  • Еще →

Свежие комментарии

  • Виктор Гораев к записи diskusage vs. dfp: анализ занятого места на диске из командной строки
  • Vadim Sterkin к записи diskusage vs. dfp: анализ занятого места на диске из командной строки
  • Stanislav Vershinin к записи diskusage vs. dfp: анализ занятого места на диске из командной строки
  • Vadim Sterkin к записи diskusage vs. dfp: анализ занятого места на диске из командной строки
  • Vadim Sterkin к записи diskusage vs. dfp: анализ занятого места на диске из командной строки
  • Diogen к записи diskusage vs. dfp: анализ занятого места на диске из командной строки
  • Alexander Kuzin к записи diskusage vs. dfp: анализ занятого места на диске из командной строки
  • Vadim Sterkin к записи diskusage vs. dfp: анализ занятого места на диске из командной строки

Рекомендую ресурсы

  • Windows 10, etc — канал этого блога в Telegram
  • Инсайдеры Windows 10 — чат блога в Telegram
  • Community — новости предварительных сборок
  • Николай Павлов — тайны планеты Excel
  • Вадимс Поданс — PKI, PowerShell и Тера Патрик
  • Василий Гусев — PowerShell и другие скрипты
  • Kazun — PowerShell для взрослых

Реклама

Измененная тема eleven40 Pro на платформе Genesis · Архивы и метки · Правила (16+) · О рекламе · Обратная связь · Вход

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