Tworzę (lokalnego) użytkownika, aby usługa Windows mogła działać jako. Mam dobre powody, dla których nie chcę korzystać z USŁUGI SIECIOWEJ, USŁUGI LOKALNEJ lub SYSTEMU LOKALNEGO.
Tworzę użytkownika przez net user foobar "Abcd123!" /add
- to działa dobrze.
W tym momencie c:\users\foobar
nie istnieje.
Jeśli mogę tworzyć katalog domowy użytkownika, zanim użytkownik obu loguje (lub bardziej trafnie) lub usługi, które użytkownik jest na uruchomieniu systemu Windows tworzy obsługi profil sąsiedni nazywa c:\users\foobar-{gibberish/SID/whatever}
- to nie jest przewidywalny imię.
Potrzebuję, aby katalog domowy użytkownika zawierał takie rzeczy jak .ssh
katalog, a .gitconfig
- takie narzędzia (nie tylko te narzędzia), które zakładają, że będzie to osoba korzystająca z nich, więc konfiguracja użytkownika wchodzi do środka ~/...
. Zwykle narzędzia z dziedzictwa uniksowego.
Rzeczywiste pytanie
Więc - czy istnieje programowy (najlepiej PowerShell lub gotowy do użycia wiersz poleceń) sposób, aby poinformować system Windows o utworzeniu profilu użytkownika dla użytkownika lokalnego?
Lub jakieś inne obejścia?
Rzeczy, których jeszcze próbowałem:
- Hak uruchamiania / wstępnego NSSM, który kopiuje pliki z innego miejsca do katalogu profilu użytkownika, który, mam nadzieję, istnieje w tym momencie dzięki systemowi Windows uruchamiającemu usługę, tworząc profil użytkownika, a następnie przekazując kontrolę do opakowania NSSM uruchamiającego hak przed uruchomieniem.
- Ustawienie zmiennej środowiskowej USERPROFILE, aby usługa znajdowała się w innym miejscu niż rzeczywisty katalog profilu użytkownika. To wydaje mi się niebezpieczne poza trasą, ale może też działać dobrze.
Inny kontekst:
- Windows Server 2016, środowisko pulpitu.
- Nie można użyć Core / Nano.
- W grze nie ma aktywnego katalogu. Nie będzie
- To są lokalni użytkownicy.
- Robię to za pośrednictwem Ansible, który używa PowerShell pod maską dla Windows. W szczególności, win_user moduł z ansibl 2.7.5.
- Nie chcę tworzyć
C:\users\default
(odpowiednika/etc/skel
), ponieważ istnieje kilku różnych użytkowników usług, a jeden rozmiar nie pasuje do wszystkich. Nie ma to również wpływu na tworzenie profilu użytkownika, tylko na to, co będzie w nim, gdy będzie. - Korzystam z NSSM do zarządzania usługami.
Rzeczy, których próbowałem
- uruchomienie usługi i umożliwienie Windowsowi utworzenia katalogu
- Nie chcę tego robić, ponieważ usługa wymaga tajemnic przed uruchomieniem, więc jeśli zrobię to w procesie tworzenia obrazu, będę musiał je wyczyścić, a także upewnić się, że moja usługa nie robi dowolna praca podczas fazy pieczenia. Chcę uniknąć obu tych dziwacznych kawałków.
źródło
net user
ma (np./HOMEDIR
Lub/PROFILEPATH
)? . Zobaczyćnet user /help
. Z mojego (nieprzetestowanego) zrozumienia możesz utworzyć katalog dla użytkownika i ustawić go jako homedir za pomocą/HOMEDIR
przełącznika.Odpowiedzi:
System Windows może utworzyć profil użytkownika na żądanie przy użyciu interfejsu API CreateProfile
Jeśli jednak nie chcesz utworzyć pliku wykonywalnego do wykonania tej operacji, możesz wywołać interfejs API w programie PowerShell. Inni już to zrobili: przykład na github .
Odpowiednia część kodu:
źródło
Wszystko, co musisz zrobić, to uruchomić polecenie jako ten użytkownik, system Windows utworzy profil:
psexec.exe -u foobar -p Abcd123! cmd.exe /c exit
https://docs.microsoft.com/en-us/sysinternals/downloads/psexec
źródło
psexec
ma połączyć się z hostem lokalnym pod nazwą użytkownika i hasłem określonym za pomocą-u
i-p
i uruchomić,cmd
aby natychmiast wyjść. Czy coś przegapiłem ? Brzmi to nieco sprzecznie z intuicją - połączenie z systemem z nieistniejącą nazwą użytkownika i hasłem powinno być błędem. Jak to działa ?C:\users\defaults
?