70

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.

wonea
  • 1,847
Boomerang
  • 861

4 Answers4

111
([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).

Bill_Stewart
  • 1,392
  • 20
    While the accepted answer is correct, this answer is much more clear, especially to someone who may read your script six months from now. – Patrick Seymour May 20 '14 at 19:52
66
[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.
AJM
  • 366
RMazi
  • 800
64

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.

Eddie Groves
  • 1,453
0

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.

Davidw
  • 567
  • 1
  • 3
  • 16
Ben
  • 1