Jak sprawdzić czy PowerShell ma uprawnienia Admina?

Jak sprawdzić uprawnienia

Dlaczego warto?

PS C:\Users\Admin> [Security.Principal.WindowsIdentity]::GetCurrent().Groups


BinaryLength AccountDomainSid Value                                                                                                       
------------ ---------------- -----                                                                                                       
          12                  S-1-1-0                                                                                                     
          16                  S-1-5-32-545                                                                                                
          12                  S-1-5-4                                                                                                     
          12                  S-1-2-1                                                                                                     
          12                  S-1-5-11                                                                                                    
          12                  S-1-5-15                                                                                                    
          52                  S-1-11-96-3623454863-58364-18864-2661722203-1597581903-1886212171-3126173085-891278134-3015806222-3609238202
          12                  S-1-5-113                                                                                                   
          12                  S-1-2-0                                                                                                     
          16                  S-1-5-64-36    
PS C:\Users\Admin> [Security.Principal.WindowsIdentity]::GetCurrent().Groups -contains 'S-1-5-32-544'
False
PS C:\Windows\system32> [Security.Principal.WindowsIdentity]::GetCurrent().Groups

BinaryLength AccountDomainSid Value
------------ ---------------- -----
          12                  S-1-1-0
          12                  S-1-5-114
          16                  S-1-5-32-544
          16                  S-1-5-32-545
          12                  S-1-5-4
          12                  S-1-2-1
          12                  S-1-5-11
          12                  S-1-5-15
          52                  S-1-11-96-3623454863-58364-18864-2661722203-1597581903-1886212171-3126173085-891278134...
          12                  S-1-5-113
          12                  S-1-2-0
          16                  S-1-5-64-36

PS C:\Windows\system32> [Security.Principal.WindowsIdentity]::GetCurrent().Groups -contains 'S-1-5-32-544'
True
PS C:\Windows\system32> ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
True

Sprawdzenie w skrypcie

$principal = New-Object System.Security.Principal.WindowsPrincipal([System.Security.Principal.WindowsIdentity]::GetCurrent())

   if ($principal.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)) {
       Write-Host "PowerShell został uruchomiony z uprawnieniami administratora."
   } else {
       Write-Host "PowerShell nie został uruchomiony z uprawnieniami administratora."
   }

Samodzielny skrypt

# Sprawdź czy PowerShell został uruchomiony jako administrator
   if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
       
# Uruchom skrypt ponownie jako administrator
    Start-Process powershell.exe -NoProfile -ExecutionPolicy Bypass -File '"$PSCommandPath"' -Verb RunAs

# Zakończ bieżącą sesję PowerShell
    Exit
   }

# Kod skryptu, który zostanie wykonany tylko jeśli PowerShell został uruchomiony z uprawnieniami administratora
    Write-Host "Ten skrypt został uruchomiony jako administrator."

#Request -RunAsAdministrator

#requires -version 4.0
#requires -RunAsAdministrator
Write-Host "PowerShell został uruchomiony jako administrator" -ForegroundColor Green

Dla chętnych

Get-Process | Add-Member -Name Elevated -MemberType ScriptProperty -Value `
{if ($this.Name -in @('Idle','System')) {$null} `
else {-not $this.Path -and -not $this.Handle} } -PassThru | Where-Object Elevated -eq 'True'

Podsumowanie

Źródła:

https://megamorf.gitlab.io/2020/05/26/check-if-powershell-is-running-as-administrator/

https://petri.com/how-to-check-a-powershell-script-is-running-with-admin-privileges/

Tyle na dziś. Jeżeli masz jakieś ciekawe informacje w tym temacie to podziel się w komentarzach.

Jeżeli uważasz, że dobrze wykonaliśmy swoją robotę i dowiedziałeś się czegoś nowego to postaw nam wirtualną kawę.

Postaw mi kawę na buycoffee.to

Darmowy Ebook
Podziel się

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *