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.
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.
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.
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
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.
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
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.
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.
| USER | FIELD | AD CURRENT | PERSONIO NEW | STATUS | |
|---|---|---|---|---|---|
| k.braun | Title | Junior Developer | Software Engineer | Pending | |
| k.braun | Description | Junior Developer | Software Engineer | Pending | |
| m.weber | Department | Sales | Key Account | Pending | |
| s.hoffmann | Manager | r.klein | a.schmidt | Pending | |
| l.fischer | Title | Werkstudent | Working Student | Applied |
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.
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.
| Warstwa | Technologia | Uwagi |
|---|---|---|
| Aplikacja | .NET 9 / WPF | Samodzielny plik exe (single-file), win-x64; publikowany przez dotnet publish |
| Active Directory | System.DirectoryServices | AccountManagement do operacji na kontach + surowy DirectorySearcher do zbiorczego odczytu |
| Exchange | PowerShell Remoting | Microsoft.PowerShell.SDK; PSSession do on-prem Exchange przez Invoke-Command |
| Integracja HR | Personio API v2 | HttpClient + System.Text.Json; paginacja; tryb mock bez poświadczeń |
| Uwierzytelnianie | Windows Credential Manager | P/Invoke do advapi32.dll (CredReadW / CredWriteW); ciche auto-logowanie |
| Sekrety | 1Password CLI | Klucze API i inne dane wrażliwe wstrzykiwane w czasie działania; brak sekretów w plikach konfiguracyjnych |
| DI / Config | Microsoft.Extensions.DI | Typowane opcje; appsettings.json w gitignore, przykład w repo |
| Audyt | IAuditLogger | Dzienny plik logu w %APPDATA%\AdminSuite\Audit\; wpisy strukturalne |
| CI / Build | GitHub Actions + xUnit | Build + 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.