Run as different user – uruchomienie sesji powershell jako inny użytkownik

Istnieją różne sposoby uruchamiania polecenia jako inny użytkownik w PowerShell. Ten artykuł pokaże ci, jak to zrobić, w tej samej sesji Powershell.

Czasami zdarzyło się, że potrzebowałeś przetestować coś w kontekście innego użytkownika niż administrator lub obecnie zalogowany.

start powershell -credential ""

Pozwala na uruchomienie nowej sesji powershell, a następnie zostaniesz zapytany poświadczenie z którymi ma zostać uruchomiona sesja.

Po wprowadzeniu Nazwy użytkownika i hasła, wszystkie wykonywane polecenia będą w kontekście wcześniej wprowadzonego użytkownika.

$username = 'admin'
$password = 'password'
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword
Start-Process powershell.exe -Credential $credential

Jeżeli byśmy chcieli użyć w skrypcie możemy skorzystać z powyższego kodu i otworzyć dowolny proces ze wskazanymi przez nas poświadczeniami.
Zmieniając powershell.exe na np notepad.exe możemy otworzyć notatnik w kontekście zdefiniowanego w kodzie użytkownika.

Jak zarządzać uprawnieniami w Powershell

Istnieją zarówno podstawowe, jak i zaawansowane uprawnienia NTFS. Możesz ustawić każde z uprawnień na „Zezwól” lub „Odmów”. Oto podstawowe uprawnienia:

Pełna kontrola: użytkownicy mogą modyfikować, dodawać, przenosić i usuwać pliki i katalogi, a także powiązane z nimi właściwości. Ponadto użytkownicy mogą zmieniać ustawienia uprawnień dla wszystkich plików i podkatalogów.
Modyfikacja: użytkownicy mogą przeglądać i modyfikować pliki i właściwości plików, w tym usuwanie i dodawanie plików do katalogu lub właściwości pliku do pliku.
Odczyt i wykonanie: Użytkownicy mogą uruchamiać pliki wykonywalne, w tym skrypt
Odczyt: Użytkownicy mogą przeglądać pliki, właściwości plików i katalogi.
Zapis: Użytkownicy mogą pisać do pliku i dodawać pliki do katalogów.

Używając poniższego polecenia możemy wylistować uprawnienia do żądanej ścieżki.

get-acl ścieżka_do_folderu |fl
$UserFullName = $Domain + "\" + $UserName
$Role = "Read"
$Path = "c:\temp"
$ACLRead = (Get-Acl $Path).Access | Where-Object {$_.IdentityReference -match $UserName} | Select-Object IdentityReference,AccessControlType,FileSystemRights
$Result= $ACLRead |  ForEach-Object {$_.IdentityReference -contains $UserFullName -and  $_.FileSystemRights -match $Role -and  $_.AccessControlType -contains "Allow" }

Sprawdzamy czy podany użytkownik posiada uprawnienia odczytu do ścieżki c:\temp. Wynik zostanie zwrócony w postaci True/False. Jeżeli podany warunek zostanie spełniony otrzymamy True, jeżeli nie False.

$UserFullName = $Domain + "\" + $UserName
$Path = "c:\temp"
$Role = "Read"
$Acl = Get-acl -path $FullPath
$AccessRule = New-Object system.security.accesscontrol.filesystemaccessrule($UserFullName,"$Role","ContainerInherit,ObjectInherit", "None","Allow")
$Acl.SetAccessRule($AccessRule)

Nadajemy uprawnienie do odczytu dla zdefiniowanego użystkownika do ścieżki c:\temp

Write-host „Nadano uprawnienia $Role do Ścieżki $Path” Na koniec możemy dodać informację, że uprawnienia zostały nadane. Jeżeli uprawnienia nie zostaną nadane informacja nie zostanie wyświetlona. Skrypt zostanie zatrzymany na kroku związanym z nadawaniem uprawnień.