Як визначити функцію PowerShell, яка потребує підвищення?


20

Оскільки я не можу знайти альтернативу sudoкоманді " elevation", у мене виникає таке питання:

Як визначити функцію PowerShell, яка потребує підвищення? Я маю на увазі підказку UAC.

Скажімо, така функція наступна:

function system-check {
    SFC /ScanNow
}

Система:

64-розрядні Windows 8.1 Pro

PowerShell:

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

EDIT1:

Щоб бути 100% зрозумілим, дозвольте перефразувати:

  1. Я запускаю PowerShell як користувач
  2. Я виконую вищезгадану функцію system-check
  3. Я хочу, щоб функція піднімалася, щоб мати можливість виконувати команду; зауважте, що я хочу, щоб відобразилося запит UAC

Зауважте, що багато вбудованих команд і команд, що додаються модулями 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

Джерело: Запуск із підвищеними дозволами

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.