Come definire una funzione di PowerShell che richiede l'elevazione?


20

Dal momento che non riesco a trovare alcuna alternativa a Linux ' sudo comando di elevazione, ho la seguente domanda:

Come definire una funzione di PowerShell che richiede l'elevazione? Voglio dire prompt UAC.

Dì, tale funzione segue:

function system-check {
    SFC /ScanNow
}

Sistema:

Windows 8.1 Pro 64-bit

PowerShell:

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

Edit1:

Per essere comprensibile al 100% fammi riformulare:

  1. Eseguo PowerShell come utente
  2. Corro la funzione di cui sopra system-check
  3. Voglio che la funzione si elevi per poter eseguire il comando; nota che voglio che venga visualizzato il prompt UAC

Si noti che molti comandi e comandi PowerShell aggiunti dai moduli di Microsoft (come i comandi MSOL) richiedono spesso l'elevazione, ma in nessun modo forniscono assistenza nell'elevazione dei privilegi. Semplicemente falliscono con messaggi di errore criptici. Se crei un prompt di elevazione negli script, fornirai una maggiore facilità d'uso rispetto a Microsoft.
Todd Wilcox

Risposte:


32

Per eseguire un comando specifico da una finestra elevata:

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

Per esempio:

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

Per eseguire uno script specifico da una finestra elevata:

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

Per eseguire un'intera sessione di PowerShell che richiede UAC:

Start-Process powershell.exe -Verb runAs

Una funzione per restituire $ True o $ False se la finestra corrente è in esecuzione con autorizzazioni elevate:

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

Per garantire che uno script venga eseguito solo come amministratore, aggiungilo all'inizio:

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

In PowerShell v4.0 quanto sopra può essere semplificato utilizzando l'istruzione #Requires:

#Requires -RunAsAdministrator

Fonte: Esegui con autorizzazioni elevate

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.