Как выполнить sudo с помощью Powershell (повысить уровень Powershell, выполнив команду от имени администратора) в Linux?

Если вы хотите запустить команду от имени администратора в PowerShell в Windows, вы можете написать что-то вроде этого:

Start-Process foo -Verb RunAs -ArgumentList '...'

Но в Linux это невозможно. Powershell вернет вам следующую ошибку: Start-Process: The parameter '-Verb' is not supported for the cmdlet 'Start-Process' on this edition of PowerShell. Действительно, согласно онлайн-документация Powershell, параметр [-Verb] не применяется для систем, отличных от Windows, поэтому Невозможно запустить Powershell от имени администратора в Linux.

Мой вопрос прост: как повысить привилегии Powershell в Linux? Как я могу смоделировать sudo ... BASH с помощью Powershell в Linux? Я знаю, что вы можете найти обходной путь с помощью bash и чего-то вроде sudo pwsh -Command '...', но я ищу способ сделать это на 100% с помощью PowerShell.

Заранее благодарим за ответы.

PS: Под PowerShell я имею в виду PowerShell 7, последнюю версию.


person air-dex    schedule 15.02.2021    source источник
comment
Зачем вам нужен способ на 100% PowerShell?   -  person Bill_Stewart    schedule 16.02.2021
comment
@Bill_Stewart Я пользователь Powershell в Linux и хотел бы знать, как это сделать. PowerShell - это яркий интерфейс командной строки, и я хотел бы как можно больше избавиться от Bash на моем компьютере.   -  person air-dex    schedule 16.02.2021
comment
Разве sudo не является стандартным исполняемым файлом в Linux (т.е. не имеет ничего общего с bash)? Почему бы просто не использовать это?   -  person Bill_Stewart    schedule 16.02.2021


Ответы (1)


Нет powershell-ish способа сделать это, потому что elevation функция зависит от ОС. И в Windows, и в Linux вы фактически запускаете новый процесс в другом контексте безопасности (и в отдельном пользовательском сеансе), но в Windows есть встроенный механизм повышения прав с использованием verbs. Linux не поддерживает глаголы, и вы должны использовать sudo или su.

Если вы пойдете немного глубже, Start-Process -Verb под Windows создаст соответствующий [System.Diagnostics.ProcessStartInfo] с заполненным .Verb и запустит процесс с использованием [System.Diagnostics.Process]::Start($ProcessStartInfo).

Итак, в Linux у вас внутри то же самое, за исключением того, что вместо установки .Verb вы устанавливаете FileName на sudo и переносите старое значение в аргументы.

Как будто нет никакого универсального способа управлять велосипедом и космическим кораблем.

person filimonic    schedule 16.02.2021