In Powershell 4.0 you can use requires at the top of your script:
#Requires -RunAsAdministrator
Outputs:
The script 'MyScript.ps1' cannot be run because it contains a "#requires" statement for
running as Administrator. The current Windows PowerShell session is not running as Administrator. Start Windows
PowerShell by using the Run as Administrator option, and then try running the script again.
as a combination of the above answers, you can use something like the following at the begin of your script:
# todo: put this in a dedicated file for reuse and dot-source the file
function Test-Administrator
{
[OutputType([bool])]
param()
process {
[Security.Principal.WindowsPrincipal]$user = [Security.Principal.WindowsIdentity]::GetCurrent();
return $user.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator);
}
}
if(-not (Test-Administrator))
{
# TODO: define proper exit codes for the given errors
Write-Error "This script must be executed as Administrator.";
exit 1;
}
$ErrorActionPreference = "Stop";
# do something
Another method is to start your Script with this line, which will prevent it's execution when not started with admin rights.
This will check if you are an Administrator, if not then it will reopen in PowerShell ISE as an Administrator.
Hope this helps!
$ver = $host | select version
if ($ver.Version.Major -gt 1) {$Host.Runspace.ThreadOptions = "ReuseThread"}
# Verify that user running script is an administrator
$IsAdmin=[Security.Principal.WindowsIdentity]::GetCurrent()
If ((New-Object Security.Principal.WindowsPrincipal $IsAdmin).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator) -eq $FALSE)
{
"`nERROR: You are NOT a local administrator. Run this script after logging on with a local administrator account."
# We are not running "as Administrator" - so relaunch as administrator
# Create a new process object that starts PowerShell
$newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell_ise";
# Specify the current script path and name as a parameter
$newProcess.Arguments = $myInvocation.MyCommand.Definition;
# Indicate that the process should be elevated
$newProcess.Verb = "runas";
# Start the new process
[System.Diagnostics.Process]::Start($newProcess);
# Exit from the current, unelevated, process
exit
}
In Powershell 4.0 you can use requires at the top of your script:
Outputs:
(from Command line safety tricks)
Execute the above function. IF the a result is True, the user has admin privileges.
as a combination of the above answers, you can use something like the following at the begin of your script:
Another method is to start your Script with this line, which will prevent it's execution when not started with admin rights.
This will check if you are an Administrator, if not then it will reopen in PowerShell ISE as an Administrator.
Hope this helps!