AdminSuite — narzędzie desktopowe do administracji IT w Windows

Zbiór rozproszonych skryptów PowerShell zastąpiony jedną, audytowaną aplikacją desktopową. Każdy zapis do Active Directory lub Exchange przechodzi przez obowiązkowe okno potwierdzenia — nic nie dzieje się po cichu.

Ready
New UserAD account + mailbox
Shared MailboxCreate shared mailbox
Personio SyncAD ↔ Personio diff
OffboardingDeactivate employees
Audit LogToday's log file
← Select a module to begin
Ready — AD not loaded yet
Load AD Data
Preview
Create User
// okno główne — nawigacja modułowa w bocznym panelu + stały pasek stopki

Problem ze skryptami PowerShell

Przed AdminSuite onboarding nowego pracownika oznaczał otwieranie kilku konsol PowerShell, uruchamianie skryptów z współdzielonych dysków sieciowych i ręczne wklejanie wygenerowanego hasła do zgłoszenia w helpdesku. Kroki bywały pomijane. Konta lądowały w złych OU. O skrzynkach zapominano.

Główne ryzyko: operacje zapisu do Active Directory odbywały się bez żadnej bramki potwierdzenia. Literówka w nazwie użytkownika, wybór złego OU albo uruchomienie niewłaściwej wersji skryptu miały natychmiastowe, trudne do cofnięcia skutki.

AdminSuite rozwiązuje to obowiązkowym oknem potwierdzenia przed każdą operacją zapisu, ustrukturyzowanym logiem audytowym oraz jednym plikiem wykonywalnym, który uruchomi każdy członek zespołu IT — bez znajomości PowerShella.

4Zintegrowane moduły
0Cichych zapisów do AD
1Samodzielny plik exe

Model bezpieczeństwa i audytu

Każdy moduł działa według tego samego czteroetapowego wzorca zapisu. Nie ma skrótów — nawet zmiana jednego pola przechodzi przez pełny przepływ potwierdzenia.

1
Zbuduj ChangeList
pole, stara wartość, nowa wartość
2
Pokaż okno
użytkownik musi kliknąć „Zastosuj”
3
Wykonaj
zapis do AD z NetworkCredential
4
Log audytu
wpis strukturalny, plik dzienny

Poświadczenia przechowywane są w Menedżerze poświadczeń Windows przez P/Invoke do advapi32.dll. Przy pierwszym uruchomieniu pojawia się standardowe okno poświadczeń Windows; kolejne uruchomienia po cichu weryfikują zapisane poświadczenie względem grupy administratorów AD. Jeśli konto utraci członkostwo, poświadczenie jest automatycznie czyszczone.

Pliki audytu lądują w %APPDATA%\AdminSuite\Audit\audit_YYYY-MM-DD.log — jeden plik dziennie, czytelny dla człowieka, jeden wpis na operację.


Pełna automatyzacja? Tak — ale nie przy danych wrażliwych

Cały ten przepływ — od utworzenia konta, przez skrzynkę, po przypisanie grup — dałoby się spiąć w całości w n8n i uruchamiać bez udziału człowieka, np. wyzwalany nowym rekordem w Personio. Technicznie nic nie stoi na przeszkodzie i przy wielu procesach dokładnie to robię.

Przy zapisach do Active Directory i Exchange świadomie tego nie zrobiłem. To operacje na danych wrażliwych i trudne do cofnięcia — literówka w nazwie, złe OU czy pomyłka w dopasowaniu Personio ↔ AD potrafią narobić szkód, których żaden log nie odkręci. Dlatego zamiast pełnej automatyzacji AdminSuite zostawia w pętli człowieka: podgląd na żywo pokazuje, co dokładnie się wydarzy, a jedno kliknięcie „Zastosuj” jest granicą między zamiarem a zapisem.

Zasada: automatyzacja upraszcza to, co powtarzalne — ale przy operacjach nieodwracalnych warto zostawić dodatkowe oko. To decyzja projektowa, nie ograniczenie narzędzia.


Moduły

1
Nowy użytkownik

Tworzenie konta AD ze skrzynką Exchange Remote Mailbox

Przepływ w trzech zakładkach: dane osobowe i organizacyjne, przypisanie grup, a następnie pełne podsumowanie przed wykonaniem. Nazwa użytkownika generowana jest na żywo z pierwszej litery imienia + nazwiska, z zamianą umlautów i rozwiązywaniem konfliktów przez sufiks.

Podgląd na żywo na zakładce 1 pokazuje wygenerowaną nazwę użytkownika, UPN i automatyczne hasło, zanim cokolwiek trafi do AD. Hasło jest kopiowane do schowka natychmiast po pomyślnym utworzeniu konta.

User Data
Groups & Access
Summary & Execute
PERSONAL
FIRST NAME *
Thomas
LAST NAME *
Müller
PHONE EXTENSION
142
+49 89 / 123 456 - [ext]
ACCOUNT PREVIEW
t.mueller
GENERATED PASSWORD
Mx#9kP!2qRn
(copied to clipboard after creation)
ORGANISATION
MANAGER *
Schmidt, Anna
DEPARTMENT *
IT Infrastructure
POSITION *
System Administrator
NOTES
Username: t.tester (first initial + last name). Umlauts replaced automatically. Conflict → suffix 2 added.
// nowy użytkownik · zakładka 1 — dane z podglądem konta na żywo
User Data
Groups & Access
Summary & Execute
SUMMARY
SAMAccountName : t.mueller
UPN : [email protected]
Display Name : Thomas Müller
Department : IT Infrastructure
Title : System Administrator
Manager : Schmidt, Anna
Phone : +49 89 / … - 142

SELECTED GROUPS
- VPN Access
- Microsoft 365 E3
- All Staff DL
EXECUTION LOG
[INFO] Creating AD account t.mueller…
[OK] Account created
[INFO] Setting attributes…
[OK] Department, Title, Manager set
[INFO] Enabling Remote Mailbox…
[OK] Remote mailbox provisioned
[INFO] Assigning groups (3)…
[OK] Groups assigned
[OK] Password copied to clipboard
[DONE] t.mueller created ✓
// nowy użytkownik · zakładka 3 — podsumowanie + log wykonania w czasie rzeczywistym

2
Skrzynka współdzielona

Provisioning skrzynki współdzielonej Exchange

Tworzy skrzynkę współdzieloną w środowisku hybrydowym Exchange / Exchange Online przez PowerShell Remoting. Karta podglądu na żywo aktualizuje się w trakcie pisania, pokazując finalny adres SMTP, adres routingu i stan widoczności w GAL, zanim otwarta zostanie zdalna sesja.

SHARED MAILBOX
DISPLAY NAME *
Support Team
ALIAS *
support
lowercase, no spaces → [email protected]
FIRST NAME *
Support
LAST NAME *
Team
TARGET OU *
OU=SharedMailboxes,DC=corp,DC=local
Visible in Global Address List (GAL)
LIVE PREVIEW
EXCHANGE OBJECT
Support Team
ADDRESSES
GAL VISIBILITY
Visible — HiddenFromAddressLists: $false
LOG
[INFO] Connecting to Exchange…
[OK] PSSession established
[INFO] New-RemoteMailbox -Shared…
// skrzynka współdzielona — formularz + podgląd SMTP/GAL na żywo

3
Synchronizacja Personio

Automatyczny diff między Personio HR a Active Directory

Pobiera wszystkich pracowników z Personio API v2 i porównuje stanowisko, dział i przełożonego względem każdego dopasowanego użytkownika AD. Wynik to tabela różnic, w której każdy wiersz można niezależnie zaznaczyć do zastosowania.

Rozwiązywanie nazw działów działa dwuetapowo: najpierw próbowane jest zbiorcze pobranie jednostek organizacyjnych; jeśli niedostępne, narzędzie przechodzi na pobrania per użytkownik — przezroczyście i bez ingerencji operatora.

Tryb mock: gdy nie skonfigurowano poświadczeń API, moduł działa na statycznych pracownikach testowych — interfejs i logikę diffów można testować bez żywego tenanta Personio.

PERSONIO API STATUS
Live — 174 employees · api.personio.de
AD matched: 162 · unmatched: 12
Diffs found:
7
USERFIELDAD CURRENTPERSONIO NEWSTATUS
k.braunTitleJunior DeveloperSoftware EngineerPending
k.braunDescriptionJunior DeveloperSoftware EngineerPending
m.weberDepartmentSalesKey AccountPending
s.hoffmannManagerr.kleina.schmidtPending
l.fischerTitleWerkstudentWorking StudentApplied
[INFO] Fetching Personio employees (page 1/2)…
[OK] 174 employees · 162 AD matches · 7 diffs found
[INFO] Department: 158 resolved via per-ID fallback
// synchronizacja Personio — tabela różnic z checkboxami per wiersz

4
Offboarding

Ustrukturyzowany przepływ dezaktywacji pracownika

Formularz oparty na wyszukiwaniu — wpisz nazwisko lub e-mail, aby zlokalizować pracownika, przejrzyj jego kartę AD (grupy, dział, przełożony), wybierz sposób obsługi skrzynki. Obowiązkowy checkbox potwierdzenia i standardowe okno audytu zapobiegają przypadkowym uruchomieniom.

SELECT EMPLOYEE
SEARCH
fischer
Fischer, Laura
Fischer, Markus
Fischer, Laura
Working Student · IT
Member of 4 groups
I confirm deactivation of l.fischer
MAILBOX OPTION
Keep as Shared Mailbox
Exchange Online conversion
Remove mailbox entirely
OFFBOARDING LOG
[INFO] Searching AD for 'fischer'…
[OK] 2 users found
[INFO] Loading user card: l.fischer
[OK] Member of 4 groups, manager: a.schmidt
[INFO] Starting offboarding: l.fischer
[INFO] Removing group memberships…
[OK] 4 groups removed
[INFO] Clearing phone, manager…
[OK] Attributes cleared
[INFO] Moving to Disabled OU…
[OK] OU move complete
[INFO] Disabling account…
[OK] Account disabled
[INFO] Converting mailbox → Shared…
[OK] Set-Mailbox -Type Shared
[DONE] l.fischer offboarded ✓
// offboarding — wyszukiwanie, karta użytkownika, opcja skrzynki, log wykonania

Stack technologiczny

Dystrybuowany jako jeden samodzielny plik .exe (win-x64), więc na maszynach administratorów nie trzeba instalować środowiska .NET. Konfiguracja żyje w appsettings.json obok pliku wykonywalnego i nigdy nie trafia do repozytorium.

WarstwaTechnologiaUwagi
Aplikacja.NET 9 / WPFSamodzielny plik exe (single-file), win-x64; publikowany przez dotnet publish
Active DirectorySystem.DirectoryServicesAccountManagement do operacji na kontach + surowy DirectorySearcher do zbiorczego odczytu
ExchangePowerShell RemotingMicrosoft.PowerShell.SDK; PSSession do on-prem Exchange przez Invoke-Command
Integracja HRPersonio API v2HttpClient + System.Text.Json; paginacja; tryb mock bez poświadczeń
UwierzytelnianieWindows Credential ManagerP/Invoke do advapi32.dll (CredReadW / CredWriteW); ciche auto-logowanie
Sekrety1Password CLIKlucze API i inne dane wrażliwe wstrzykiwane w czasie działania; brak sekretów w plikach konfiguracyjnych
DI / ConfigMicrosoft.Extensions.DITypowane opcje; appsettings.json w gitignore, przykład w repo
AudytIAuditLoggerDzienny plik logu w %APPDATA%\AdminSuite\Audit\; wpisy strukturalne
CI / BuildGitHub Actions + xUnitBuild + testy przy każdym pushu do master; artefakt jako single-file exe

Efekt

AdminSuite wyeliminował najczęstsze błędy onboardingu — złe OU, brakującą skrzynkę, zapomniane przypisania grup — czyniąc każdy krok widocznym i wymagając wyraźnego potwierdzenia. Log audytu daje natychmiastową odpowiedź na pytanie „kto, co i kiedy zmienił", bez grzebania w dziennikach zdarzeń Windows.

Moduł Synchronizacji Personio skrócił czas synchronizacji danych HR z Active Directory z comiesięcznego, ręcznego eksportu do operacji na żądanie, kończącej się w niecałe dwie minuty dla ponad 170 pracowników.

Sekrety takie jak klucze API są wstrzykiwane w czasie działania przez 1Password CLI — nie ma ich w plikach konfiguracyjnych ani w repozytorium. Projekt jest w aktywnym rozwoju; kolejnym planowanym krokiem jest rozszerzone pokrycie testami warstwy usług AD.

Potrzebujesz indywidualnego programu?

Chętnie pomogę zaprojektować i zbudować narzędzie dopasowane do Twoich procesów IT.

Napisz do mnie