Я создаю (локального) пользователя для службы Windows для запуска. У меня есть веские причины не использовать NETWORK SERVICE, LOCAL SERVICE или LOCAL SYSTEM.
Я создаю пользователя через net user foobar "Abcd123!" /add
- это отлично работает.
На данный момент c:\users\foobar
не существует.
Если я создаю домашний каталог пользователя до того, как пользователь войдет в систему (или, что более уместно) или запустит службу, для которой он предназначен, Windows создаст соседний профиль пользователя с именем c:\users\foobar-{gibberish/SID/whatever}
- это не предсказуемое имя.
Мне нужно, чтобы домашний каталог пользователя содержал такие вещи, как .ssh
каталог, .gitconfig
такие инструменты (не ограничиваясь этими инструментами), которые предполагают, что их использует человек, и поэтому конфигурация пользователя идет внутрь ~/...
. Обычно это инструменты из наследия Unix.
Актуальный вопрос
Итак, есть ли программный (предпочтительно PowerShell или нестандартная командная строка) способ сообщить Windows о создании профиля пользователя для локального пользователя?
Или какие-нибудь другие обходные пути?
Вещи, которые я еще не попробовал:
- Хук запуска / предварительной NSSM, который копирует файлы из другого места в каталог профиля пользователя, который, как мы надеемся, существует в этот момент благодаря Windows, запускающей службу, создающей профиль пользователя и передающей управление оболочке NSSM, выполняющей ловушку, перед запуском.
- Установка переменной среды USERPROFILE для службы, которая будет отличаться от фактической директории профиля пользователя. Это кажется мне опасным вне трассы, но также может работать нормально.
Другой контекст:
- Windows Server 2016, опыт рабочего стола.
- Не могу использовать Core / Nano.
- В игре нет активного каталога. Там не будет
- Это локальные пользователи.
- Я делаю это через Ansible, который использует PowerShell для Windows. В частности, модуль win_user с Ansible 2.7.5.
- Я не хочу создавать
C:\users\default
(эквивалент/etc/skel
), потому что есть несколько разных пользователей сервиса, и один размер не подойдет всем. Это также не влияет на то, когда создается профиль пользователя, а только на то, что будет в нем, когда оно будет создано. - Я использую NSSM для управления сервисами.
Вещи, которые я пробовал
- запуск службы и разрешение Windows для создания каталога
- Я не хочу этого делать, потому что сервис требует секретов перед запуском, и поэтому, если я сделаю это в процессе выпечки изображений, мне нужно будет их очистить, а также убедиться, что мой сервис не работает любая работа на этапе выпечки. Я хочу избежать обоих этих неприятных битов.
источник
net user
(например,/HOMEDIR
или/PROFILEPATH
)? , Смnet user /help
. Из моего (непроверенного) понимания, вы можете создать каталог для пользователя и установить его как homedir с/HOMEDIR
коммутатором.Ответы:
Windows может создать профиль пользователя по требованию, используя API CreateProfile
Однако, если вы не хотите создавать исполняемый файл для выполнения этой операции, вы можете вызвать API в PowerShell. Другие уже сделали это: пример на github .
Соответствующая часть кода:
источник
Все, что вам нужно сделать, это запустить команду от имени этого пользователя, Windows создаст профиль:
psexec.exe -u foobar -p Abcd123! cmd.exe /c exit
https://docs.microsoft.com/en-us/sysinternals/downloads/psexec
источник
psexec
должно подключаться к localhost под именем пользователя и паролем, указанным с помощью-u
и,-p
и запускатьсяcmd
только для немедленного выхода. Я что-то пропустил? Это звучит несколько нелогично - подключение к системе с несуществующим именем пользователя и паролем должно быть ошибкой. Как это работает ?C:\users\defaults
?