Como definir uma função do PowerShell que requer elevação?

19

Como não encontro alternativa ao comando de elevação sudo do Linux, tenho a seguinte pergunta:

Como definir uma função do PowerShell que requer elevação? Quero dizer prompt do UAC.

Diga, essa função segue:

function system-check {
    SFC /ScanNow
}

Sistema:

Windows 8.1 Pro de 64 bits

PowerShell:

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

EDIT1:

Para ser 100% compreensível, deixe-me reformular:

  1. Eu corro o PowerShell como usuário
  2. eu executo a função acima mencionada system-check
  3. Eu quero que a função seja elevada para poder executar o comando; note que eu quero que o prompt do UAC apareça
por Vlastimil 11.08.2017 / 06:45

1 resposta

30

Para executar um comando específico a partir de uma janela elevada:

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

Por exemplo:

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

Para executar um script específico a partir de uma janela elevada:

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

Para executar uma sessão inteira do PowerShell solicitando o UAC:

Start-Process powershell.exe -Verb runAs

Uma função para retornar $ True ou $ False se a janela atual estiver sendo executada com permissões elevadas:

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

Para garantir que um script seja executado apenas como administrador, adicione isso ao início:

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

No PowerShell v4.0, os itens acima podem ser simplificados usando uma instrução #Requires:

#Requires -RunAsAdministrator

Fonte: Execute com permissões elevadas

    
por 11.08.2017 / 07:33