Как сделать sudo на powershell в Windows - PullRequest
1 голос
/ 23 марта 2019

Всякий раз, когда мне нужно запустить скрипт powershell, он жалуется на безопасность, если я добавляю powershell.exe -nologo -executionpolicy bypass -File .\install.ps1, я все равно получаю отказ в разрешении unauthorizedAccessException. Я просто хочу запустить этот чертов скрипт установки, что такое sudo эквивалентно типу на powershell в windows?

Ответы [ 3 ]

3 голосов
/ 23 марта 2019

Если вы используете из PowerShell уже , тогда используйте Start-Process -Verb RunAs следующим образом:

Start-Process -Verb RunAs powershell.exe -Args "-executionpolicy bypass -command Set-Location \`"$PWD\`"; .\install.ps1"

Примечание:

  • Сценарий неизменно запускается в новом окне .
  • Поскольку рабочим каталогом нового окна всегда является $env:windir\System32, добавляется вызов Set-Location, который переключается на рабочий каталог вызывающего абонента ($PWD).
    • Обратите внимание, что в PowerShell Core (pwsh.exe) в этом нет необходимости.
  • Выполнение Set-Location требует использования -Command вместо -File.
    • С положительной стороны это устраняет необходимость в -nologo.
    • Общее предостережение: -Command может изменить способ интерпретации аргументов, передаваемых в ваш скрипт (в вашем случае их нет), потому что они интерпретируются так же, как если бы вы передавали аргументы из PowerShell, тогда как -File рассматривает их как литералы.

Если вы звоните из за пределами PowerShell , обычно из cmd.exe / пакетного файла , вам нужно обернуть вышеупомянутое при внешнем вызове на powershell.exe, что, к сожалению, усложняет цитирование:

powershell.exe -command "Start-Process -Verb RunAs powershell.exe -Args '-executionpolicy bypass -command', \"Set-Location `\"$PWD`\"; .\install.ps1\""

Интерактивно , конечно, вы можете:

  • Щелкните правой кнопкой мыши ярлык PowerShell (на панели задач, в меню «Пуск» или на рабочем столе), выберите Run as Administrator, чтобы открыть окно PowerShell, которое запускается с правами администратора, и оттуда запустите .\install.ps1.

  • Кроме того, из существующего окна PowerShell вы можете открыть окно запуска от имени администратора с помощью Start-Process -Verb RunAs powershell.exe, как в AdminOfThings 'ответ .

0 голосов
/ 23 марта 2019

Если у вас есть корпоративная политика, которая блокирует выполнение скриптов, тогда да. ByPass не меняет состояние вашего профиля (пользовательского контекста). Это не дизайн (вариант использования) для любого из этих переключателей в отношении политик выполнения .

В Windows нет прямого сравнения sudo, это никак не связано с PowerShell. Вы либо администратор в сеансе / приложении, либо нет. Если вы устанавливаете программное обеспечение, это означает, что вы должны быть администратором. Если вы делаете глобальные общесистемные изменения, это означает, что вы должны быть администратором.

Есть люди, которые стремились реализовать сценарии, функции-оболочки и / или модули для имитации sudo…

Модуль из галереи MS PowerShell. Судо 0,9,3 Используйте функциональность, аналогичную sudo в PowerShell

из GitHub Sudo для PowerShell

Установка Sudo для PowerShell В PowerShell создайте профиль $, если у вас его нет:

if (!(test-path $profile)) { new-item -path $profile -itemtype file -force }

Открыть профиль в блокноте:

notepad.exe $profile

Добавьте следующую строку и сохраните файл:

. /path/to/sudo.ps1

sudo будет доступно во всех новых окнах PowerShell. Использование

sudo application [arguments ...]

... но это не меняет того, что ожидает Windows при работе с границами безопасности.

Смотрите также этот Q & A Sudo !! эквивалент в PowerShell

$ ^ - это переменная, которая раскрывается до последней выполненной команды Powershell. Вы можете запустить команду как другой пользователь, используя runas, поэтому следующее работы:

runas /user:domain\administrator $^

Чтобы сократить это немного, вы можете сделать немного магии с псевдонимами. Возьмите посмотрите эту статью Technet для получения дополнительной информации.

РЕДАКТИРОВАТЬ: одна оговорка - $ ^ выполняет только первую команду в конвейере или многокомпонентная строка. Если вам нужно повторить всю команду, которая усыпанный трубами или точками с запятой, используйте вместо этого Invoke-History (который по умолчанию используется последняя полная команда).

0 голосов
/ 23 марта 2019

Вы можете запустить PowerShell с параметром «Запуск от имени администратора»:

Start-Process powershell -Verb runAs
...