Jakiś czas temu na łamach tej strony opisałem sposób tworzenia oraz modyfikowania w systemie lokalnych grup oraz kont przy wykorzystaniu polecenia net user, wywoływanego za pomocą wiersza poleceń (cmd). W tej części artykułu chciałbym rozwinąć ów temat o polecenia PowerShell.
Naszą przygodę rozpoczniemy od dwóch rzeczy. Pierwszą z nich będzie wywołanie okna aplikacji Windows PowerShell z uprawnieniami administratora.
Dodatkowo wpisując lusrmgr.msc wywołujemy przystawkę Użytkownicy i grupy lokalne, która pomoże nam zweryfikować, czy wykonane przez nas czynności zostały zaimplementowane w systemie.
Mając wywołane te dwa okna przechodzimy do sedna. Poleceniem:
$ComputerName = "localhost"
$UserAccountName = "nazwa_użytkownika"
$Computer = [ADSI]"WinNT://$ComputerName,computer"
$User = $Computer.Create("User", $UserAccountName)
Write-Host "Użytkownik o nazwie $UserAccountName został utworzony."
$User.SetInfo()
tworzymy w systemie pierwsze lokalne konto użytkownika. W tym przykładzie utworzymy konto o nazwie soisk.pl zatem nasze polecenie będzie wyglądało następująco:
$ComputerName = "localhost"
$UserAccountName = "soisk.pl"
$Computer = [ADSI]"WinNT://$ComputerName,computer"
$User = $Computer.Create("User", $UserAccountName)
Write-Host "Użytkownik o nazwie $UserAccountName został utworzony."
$User.SetInfo()
Konto użytkownika zostało utworzone. Potwierdzamy poprawne wykonanie polecenia zaglądając do przystawki Użytkownicy i grupy lokalne.
skrypt do pobrania:
Wybieramy konto soisk.pl i otwieramy jego właściwości.
Na powyżej załączonym obrazku dostrzegamy, że zawartość kolumny Opis jest pusta. Warto w niej umieścić dodatkowe info o koncie. Do tego celu stosujemy polecenie:
$UserAccountName = "nazwa_konta_które_otrzyma_opis"
$Description = "Zawartość_kolumny_Opis"
$User=[adsi]"WinNT://./$UserAccountName,user"
$User.Description ="$Description"
Write-Host "Opis do konta $UserAccountName został dodany."
$User.SetInfo()
My dla konta o nazwie soisk.pl utworzymy opis: Nowe konto użytkownika systemu Windows 10. zatem w oknie Windows PowerShell wydamy polecenie:
$UserAccountName = "soisk.pl"
$Description = "Nowe konto użytkownika systemu Windows 10."
$User=[adsi]"WinNT://./$UserAccountName,user"
$User.Description ="$Description"
Write-Host "Opis do konta $UserAccountName został dodany."
$User.SetInfo()
Także i tym razem weryfikujemy zastosowane polecenie.
skrypt do pobrania:
Co zrobić jeśli chcielibyśmy odznaczyć opcję Hasło nigdy nie wygasa ? i tym samym wymusić na użytkowniku zmianę hasła podczas następnego logowania.
nic prostszego, wystarczy wywołać polecenie:
$UserAccountName = "nazwa_konta"
$User=[adsi]"WinNT://./$UserAccountName,user"
$User.UserFlags[0] = $User.UserFlags[0] -bxor 0x10000
Write-Host "Opcja: Hasło nigdy nie wygasa została wyłączona"
$User.SetInfo()
Na potrzeby tego artykułu opcję odznaczymy dla konta soisk.pl więc wdamy polecenie:
$UserAccountName = "soisk.pl"
$User=[adsi]"WinNT://./$UserAccountName,user"
$User.UserFlags[0] = $User.UserFlags[0] -bxor 0x10000
Write-Host "Opcja: Hasło nigdy nie wygasa została wyłączona."
$User.SetInfo()
Tak jak powyżej, każdy nasz krok weryfikujemy przy pomocy okna Użytkownicy i grupy lokalne.
skrypt do pobrania:
Ponowne zaznaczenie opcji Hasło nigdy nie wygasa odbywa się poleceniem:
$UserAccountName = "nazwa_konta"
$User=[adsi]"WinNT://./$UserAccountName,user"
$User.UserFlags[0] = $User.UserFlags[0] -bor 0x10000
Write-Host "Opcja: Hasło nigdy nie wygasa została włączona"
$User.SetInfo()
W naszym przypadku brak możliwości wygaśnięcia hasła ustawiamy dla konta soisk.pl więc w tym celu posłużymy się poleceniem:
$UserAccountName = "soisk.pl"
$User=[adsi]"WinNT://./$UserAccountName,user"
$User.UserFlags[0] = $User.UserFlags[0] -bor 0x10000
Write-Host "Opcja: Hasło nigdy nie wygasa została włączona."
$User.SetInfo()
Tak samo w tym przypadku warto potwierdzić poprawność wykonanego polecenia.
skrypt do pobrania:
Skoro poznaliśmy metodę włączenia oraz wyłączenia opcji hasło nigdy nie wygasa, teraz poleceniem
$UserAccountName = "nazwa_konta"
$Password = "Nowe_hasło"
$User=[ADSI]"WinNT://./$UserAccountName,user"
$User.SetPassword($Password)
Write-Host "Hasło użytkownika $UserAccountName zostało zmienione."
dokonamy zmiany hasła do dowolnego konta użytkownika. Na potrzeby tego artykułu zmienimy hasło do konta administratora :) Czyli w oknie PowerShell wpisujemy:
$UserAccountName = "Administrator"
$Password = "soisk.pl"
$User=[ADSI]"WinNT://./$UserAccountName,user"
$User.SetPassword($Password)
Write-Host "Hasło użytkownika $UserAccountName zostało zmienione."
zmieniając hasło administratora na soisk.pl
Poprawność wykonanego polecenia weryfikujemy poprzez próbę zalogowania się na konto Administratora starym oraz nowym hasłem :)
skrypt do pobrania:
Teraz w systemie Windows 10 utworzymy sobie nową grupę lokalną, do której wrzucimy użytkownika soisk.pl
Dodanie grupy odbywa się poleceniem:
$ComputerName = "localhost"
$LocalGroupName = "nazwa_nowej_grupy_lokalnej"
$Computer = [ADSI]"WinNT://$ComputerName,computer"
$Group = $Computer.Create("group",$LocalGroupName)
Write-Host "Nowa grupa lokalna o nazwie $LocalGroupName została utworzona."
$Group.SetInfo()
My poleceniem:
$ComputerName = "localhost"
$LocalGroupName = "soisk"
$Computer = [ADSI]"WinNT://$ComputerName,computer"
$Group = $Computer.Create("group",$LocalGroupName)
Write-Host "Nowa grupa lokalna o nazwie $LocalGroupName została utworzona."
$Group.SetInfo()
utworzymy nową grupę lokalną o nazwie soisk
Brawo. Grupa lokalna o nazwie soisk została utworzona.
skrypt do pobrania:
Powyżej wspomnieliśmy o przypisaniu użytkownika do utworzonej grupy w systemie. W celu wykonania tego zadania stosujemy polecenie:
$ComputerName = "nazwa_komputera"
$UserGroupName = "nazwa_grupy"
$UserAccountName = "nazwa_konta"
$User=[adsi]"WinNT://$ComputerName/$UserAccountName,user"
$Group=[adsi]"WinNT://$ComputerName/$UserGroupName,group"
$Group.Add($User.Path)
Write-Host "Użytkownik $UserAccountName został przydzielony do grupy $UserGroupName"
W zmiennej $ComputerName podajemy nazwę komputera, $UserGroupName nazwę istniejącej w systemie grupy, $UserAccountName – nazwę użytkownika, który zostanie przypisany do grupy.
W naszym przypadku poprawna składnia polecenia prezentuje się następująco:
$ComputerName = "soisk-klient"
$UserGroupName = "soisk"
$UserAccountName = "soisk.pl"
$User=[adsi]"WinNT://$ComputerName/$UserAccountName,user"
$Group=[adsi]"WinNT://$ComputerName/$UserGroupName,group"
$Group.Add($User.Path)
Write-Host "Użytkownik $UserAccountName został przydzielony do grupy $UserGroupName"
Nie mogło być inaczej. Konto soisk.pl stało się pełnoprawnym członkiem grupy lokalnej soisk
Analogicznie możemy przydzielić konto do grupy administratorów :)
skrypt do pobrania:
Idąc tym tropem pozbawimy konto soisk.pl uprawnień Administratora wydalając go z grupy Administratorzy.
Efekt ten uzyskamy stosując komendę:
$ComputerName = "nazwa_komputera"
$UserGroupName = "nazwa_grupy"
$UserAccountName = "nazwa_konta"
$User=[adsi]"WinNT://$ComputerName/$UserAccountName,user"
$Group=[adsi]"WinNT://$ComputerName/$UserGroupName,group"
$Group.Remove($User.Path)
Write-Host "Użytkownik $UserAccountName został wydalony z grupy $UserGroupName"
Gdzie zmiennej $ComputerName podajemy nazwę komputera, $UserGroupName nazwę istniejącej w systemie grupy, $UserAccountName – nazwę użytkownika, który zostanie wydalony z istniejącej grupy.
Poprawnie polecenie brzmi następująco:
$ComputerName = "soisk-klient"
$UserGroupName = "Administratorzy"
$UserAccountName = "soisk.pl"
$User=[adsi]"WinNT://$ComputerName/$UserAccountName,user"
$Group=[adsi]"WinNT://$ComputerName/$UserGroupName,group"
$Group.Remove($User.Path)
Write-Host "Użytkownik $UserAccountName został wydalony z grupy $UserGroupName"
Dla tych co nie wierzą w poprawne wykonanie powyższego polecenia proponuję otworzyć przystawkę Użytkownicy i grupy lokalne.
skrypt do pobrania:
Nadszedł czas na zmianę nazwy konta. By być w 100% pewnym poprawnie wykonanego polecenia, zmienimy nazwę istniejącego w systemie konta Administratora na Admin.
Efekt ten uzyskamy stosując polecenie:
$UserAccountName = "Administrator"
$UserNewName = "Admin"
$User=[ADSI]"WinNT://./$UserAccountName,user"
$User.rename("$UserNewName")
Write-Host "Konto o nazwie: $UserAccountName usyskało nowy login: $UserNewName"
Także i tym razem polecenie zostało wykonane poprawnie, co potwierdza poniżej załączony screen.
skrypt do pobrania:
Powoli zbliżamy się do końca tego artykułu, zatem tymczasowo wyłączymy jedno z kont.
Do tego celu proponuję zastosować następujące polecenie:
$UserAccountName = "nazwa_konta_które_zostanie_wyłączone"
$User=[adsi]"WinNT://./$UserAccountName,user"
$User.UserFlags[0] = $User.UserFlags[0] -bor 0x2
$User.SetInfo()
Write-Host "Konto o nazwie: $UserAccountName zostało wyłączone."
Oczywiście wyłączamy konto o znajomej nazwie soisk.pl:
$UserAccountName = "soisk.pl"
$User=[adsi]"WinNT://./$UserAccountName,user"
$User.UserFlags[0] = $User.UserFlags[0] -bor 0x2
$User.SetInfo()
Write-Host "Konto o nazwie: $UserAccountName zostało wyłączone."
I tym razem potwierdzamy dokonane przy użyciu polecenia PowerShell wprowadzone zmiany.
skrypt do pobrania:
Ponowna jego aktywacja odbywa się przy użyciu poniższego kodu:
$UserAccountName = "nazwa_konta_które_zostanie_włączone"
$User=[adsi]"WinNT://./$UserAccountName,user"
$User.UserFlags[0] = $User.UserFlags[0] -bxor 0x2
$User.SetInfo()
Write-Host "Konto o nazwie: $UserAccountName zostało włączone"
Czyli:
$UserAccountName = "soisk.pl"
$User=[adsi]"WinNT://./$UserAccountName,user"
$User.UserFlags[0] = $User.UserFlags[0] -bxor 0x2
$User.SetInfo()
Write-Host "Konto o nazwie: $UserAccountName zostało włączone"
Wydanie powyższego polecenia ponownie aktywuje konto soisk.pl
Zmieniając $UserAccountName = “soisk.pl” na $UserAccountName = “Administrator” możemy włączyć oraz wyłączyć wbudowane konto Administratora systemu.
skrypt do pobrania:
Ostatnią czynność jaką wykonamy będzie usunięcie utworzonego wcześniej konta oraz grupy. Oczywiście na pierwszy ogień idzie wcześniej utworzone konto soisk.pl
Usunięcie odbywa się poprzez wydanie polecenia:
$ComputerName = "nazwa_komputera"
$UserAccountName = "nazwa_usuwanego_konta"
$User=[adsi]"WinNT://$ComputerName"
$User.Delete("user",$UserAccountName)
Write-Host "Konto o nazwie: $UserAccountName zostało usunięte."
U nas będzie ono brzmieć następująco:
$ComputerName = "soisk-klient"
$UserAccountName = "soisk.pl"
$User=[adsi]"WinNT://$ComputerName"
$User.Delete("user",$UserAccountName)
Write-Host "Konto o nazwie: $UserAccountName zostało usunięte."
Konto zostało usunięte.
skrypt do pobrania:
Utworzoną i nadal istnejącą w systemie grupę lokalną soisk
usuwamy wydając polecenie:
$ComputerName = "localhost"
$LocalGroupName = 'nazwa_grupy_przeznaczonej_do_usuniecia'
$Computer = [ADSI]"WinNT://$ComputerName,computer"
$Group = [ADSI]"WinNT://$computerName/$localGroupName"
$Computer.psbase.Children.Remove($Group)
Write-Host "Grupa o nazwie $LocalGroupName została usunięta."
Czyli w naszym przypadku polecenie brzmieć będzie następująco:
$ComputerName = "localhost"
$LocalGroupName = 'soisk'
$Computer = [ADSI]"WinNT://$ComputerName,computer"
$Group = [ADSI]"WinNT://$computerName/$localGroupName"
$Computer.psbase.Children.Remove($Group)
Write-Host "Grupa o nazwie $LocalGroupName została usunięta."
Lokalna grupa o nazwie soisk została usunięta
skrypt do pobrania:
To by było na tyle. Jeśli coś pominąłem, poproszę o zaznaczenie tego faktu w komentarzu :)
Od roku 2005 zawodowo związany z branżą informatyczną. Wieloletnie doświadczenie zaowocowało uzyskaniem prestiżowego, międzynarodowego tytułu MVP (Most Valuable Professional) nadanego przez firmę Microsoft. W wolnych chwilach prowadzi blog oraz nagrywa, montuje i publikuje kursy instruktażowe na kanale YouTube.