Как определить функцию PowerShell, которая требует повышения прав?

20

Поскольку я не могу найти альтернативу sudoкоманде повышения Linux , у меня следующий вопрос:

Как определить функцию PowerShell, которая требует повышения прав? Я имею в виду UAC подскажите.

Скажем, такая функция выглядит следующим образом:

function system-check {
    SFC /ScanNow
}

система:

Windows 8.1 Pro 64-битная

PowerShell:

Major  Minor  Build  Revision
-----  -----  -----  --------
5      0      10586  117

EDIT1:

Чтобы быть на 100% понятным, позвольте мне перефразировать:

  1. Я запускаю PowerShell как пользователь
  2. Я запускаю вышеупомянутую функцию system-check
  3. Я хочу, чтобы функция поднялась, чтобы иметь возможность выполнить команду; обратите внимание, что я хочу, чтобы появилось приглашение UAC
LinuxSecurityFreak
источник
Обратите внимание, что многие встроенные команды powershell и команды, добавляемые модулями Microsoft (например, команды MSOL), часто требуют повышения прав, но никоим образом не помогают в повышении привилегий. Они просто терпят неудачу с загадочными сообщениями об ошибках. Если вы создадите запрос на повышение прав в своих сценариях, вы обеспечите большую удобство для пользователя, чем сами Microsoft.
Тодд Уилкокс

Ответы:

33

Чтобы запустить определенную команду из окна с повышенными правами:

Start-Process -FilePath powershell.exe -ArgumentList {$ScriptBlock} -verb RunAs

Например:

Start-Process -FilePath powershell.exe -ArgumentList {
    SFC /scannow
} -verb RunAs

Чтобы запустить определенный скрипт из окна с повышенными правами:

Start-Process powershell -ArgumentList '-noprofile -file MyScript.ps1' -verb RunAs

Чтобы запустить весь запрос сеанса PowerShell для UAC:

Start-Process powershell.exe -Verb runAs

Функция, которая возвращает $ True или $ False, если текущее окно работает с повышенными правами доступа:

function isadmin
 {
 #Returns true/false
   ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
 }

Чтобы скрипт запускался только от имени администратора, добавьте его в начало:

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
 {
  Echo "This script needs to be run As Admin"
  Break
 }

В PowerShell v4.0 вышесказанное можно упростить с помощью оператора #Requires:

#Requires -RunAsAdministrator

Источник: запуск с повышенными разрешениями.

Ashton
источник