How can I tell in my scripts if PowerShell is running with administrator privileges?
I need to know because I'm trying to run a program that requires the ability to open protected ports.
Super User is a question and answer site for computer enthusiasts and power users. It only takes a minute to sign up.
Sign up to join this communityHow can I tell in my scripts if PowerShell is running with administrator privileges?
I need to know because I'm trying to run a program that requires the ability to open protected ports.
[bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544")
Breaking apart what this does:
[bool]
- Cast the end result to a bool
.[System.Security.Principal.WindowsIdentity]::GetCurrent()
- Retrieves the WindowsIdentity
for the currently running user.(...).groups
- Access the groups
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 if groups
contains the Well Known SID of the Administrators group, the identity will only contain it if "run as administrator" was used.-match
and typecasting: [Security.Principal.WindowsIdentity]::GetCurrent().Groups -contains 'S-1-5-32-544'
Oct 20, 2019 at 4:23
([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.
return
if the user is not admin :)
Nov 6, 2017 at 21:39
#Requires -RunAsAdministrator
is useful: It prevents the entire script from running if you're not elevated.
Nov 6, 2017 at 21:45
Your code :
invoke-command -computername cavl-ghwwsc3 -command { ([Security.Principal.WindowsPrincipal]
[Security.Principal.WindowsIdentity]::GetCurrent()
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)}
is working fine but how to launch it remotely in current user session (not in powershell elevate admin rights because it return my admin isadmin value to remote computer, not current log user if this user isadmin.
one more way:
${env:=::} -eq $null
the environment variable =::
is presented only you are NOT running the program as administrator.
This should very fast check as it is only variable value comparison. Also it's not so easy to set variable with a name starting with an =
due to the syntax rules ,so this is also reliable.