A questa mancanza è possibile sopperire aggiungendo allo script il seguente codice pubblicato sullo Script Center di Microsoft:
function Use-RunAs { # Check if script is running as Adminstrator and if not use RunAs # Use Check Switch to check if admin param([Switch]$Check) $IsAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()` ).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator") if ($Check) { return $IsAdmin } if ($MyInvocation.ScriptName -ne "") { if (-not $IsAdmin) { try { $arg = "-file `"$($MyInvocation.ScriptName)`"" Start-Process "$psHome\powershell.exe" -Verb Runas -ArgumentList $arg -ErrorAction 'stop' } catch { Write-Warning "Error - Failed to restart script with runas" break } exit # Quit this session of powershell } } else { Write-Warning "Error - Script must be saved as a .ps1 file first" break } }
La function, che va richiamata prima di eseguire altre operazioni, non fa altro che verificare se lo script è stato eseguito in una console con i permessi di amministratore e, in caso contrario, provvede autonomamente a rilanciarlo con i permessi elevati.
Se non è stato fatto il login con un utenza amministrativa verranno richieste le credenziali.
FIG 1 - PowerShell, Esecuzione script con privilegi elevati |
Dal seguente link è possibile scaricare lo script di esempio
DOWNLOAD