Detect if PowerShell is running as administrator
([Security.Principal.WindowsPrincipal] `
[Security.Principal.WindowsIdentity]::GetCurrent() `
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
This retrieves the current Windows identity and returns $true
if the current identity has the Administrator role (i.e., is running elevated).
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.
[bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544")
Breaking apart what this does:
[bool]
- Cast the end result to abool
.[System.Security.Principal.WindowsIdentity]::GetCurrent()
- Retrieves theWindowsIdentity
for the currently running user.(...).groups
- Access thegroups
property of the identity to find out what user groups the identity is a member of.-match "S-1-5-32-544"
checks to see ifgroups
contains the Well Known SID of the Administrators group, the identity will only contain it if "run as administrator" was used.