Jak sprawdzić uprawnienia administratora w PowerShellu?

Jak sprawdzić czy PowerShell ma uprawnienia administratora?

Dlaczego warto sprawdzić uprawnienia?

Sprawdzenie wizualne

PowerShell błąd uprawnień

Jak to ustawić?

1. Otwórz ustawienia Windows Terminal

  • Kliknij strzałkę przy zakładkach i wybierz:
    Settings (Ustawienia)
    (lub naciśnij Ctrl + ,)

2. Znajdź profil PowerShell 7

  • W lewej kolumnie wybierz profil np. PowerShell 7.
  • Kliknij, aby go edytować.

3. Skonfiguruj profil dla trybu administratora

Musisz utworzyć oddzielny profil, który będzie działał tylko w trybie admina i miał inną kolorystykę lub ikonę.

➕ Dodaj nowy profil (przykład):

W pliku settings.json (możesz go edytować ręcznie z poziomu Windows Terminal) dodaj taki profil:

jsonCopyEdit{
  "guid": "{GUID-DLA-ADMINA}",
  "name": "PowerShell (Admin)",
  "commandline": "powershell.exe",
  "hidden": false,
  "startingDirectory": "%USERPROFILE%",
  "icon": "ms-appx:///ProfileIcons/pwsh-admin.png",
  "background": "#550000",   // ciemnoczerwone tło
  "colorScheme": "Campbell",
  "elevate": true // kluczowe!
}

Warto wiedzieć

  • "elevate": true – powoduje, że profil uruchamia się zawsze jako administrator (Windows zapyta o zgodę).
  • "background" – zmienia kolor tła tylko dla tego profilu (można dać np. czerwony, granatowy).
  • "icon" – możesz ustawić osobną ikonę, np. ikonę z kłódką, aby wizualnie odróżnić profil.

4. Zapisz zmiany i uruchom nowy profil

Po zapisaniu i ponownym uruchomieniu Windows Terminala zobaczysz nowy wpis w liście zakładek:
PowerShell (Admin)
Gdy go klikniesz, uruchomi się PowerShell z podniesionymi uprawnieniami i specjalnym wyglądem, który sam ustawiłeś.

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/


To wszystko na dziś!

Jeśli masz ciekawe spostrzeżenia lub doświadczenia w tym temacie – koniecznie podziel się nimi w komentarzach.
A jeśli moje materiały są dla Ciebie pomocne, możesz postawić mi wirtualną kawę.

Dzięki za wsparcie!

Postaw mi kawę na buycoffee.to

PowerShell - 10 sposobów na optymalizację codziennej pracy
Podziel się

Dodaj komentarz

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