Estoy creando un usuario (local) para que se ejecute un servicio de Windows. Tengo buenas razones para no querer usar SERVICIO DE RED, SERVICIO LOCAL o SISTEMA LOCAL.
Creo al usuario a través de net user foobar "Abcd123!" /add
- esto funciona bien.
En este punto, c:\users\foobar
no existe.
Si creo el directorio de inicio del usuario, antes de que el usuario inicie sesión (o, más pertinente) o se inicie el servicio para el que está, Windows crea un perfil de usuario de al lado llamado c:\users\foobar-{gibberish/SID/whatever}
: este no es un nombre predecible.
Necesito que el directorio de inicio del usuario contenga cosas como un .ssh
directorio, a .gitconfig
- herramientas como esa (no limitadas a esas herramientas) que hacen suposiciones de que será una persona que las use, y así la configuración del usuario entra ~/...
. Por lo general, las herramientas de un patrimonio de Unix.
Pregunta real
Entonces, ¿hay una forma programática (preferiblemente, PowerShell o línea de comandos lista para usar) para decirle a Windows que cree el perfil de usuario para un usuario local?
¿O alguna otra solución?
Cosas que todavía tengo que probar:
- Un enlace de inicio / pre NSSM que copia archivos desde otro lugar en el directorio de perfil de usuario que, con suerte, existe en este punto en virtud de que Windows inicia el servicio, crea el perfil de usuario y luego entrega el control al contenedor NSSM que ejecuta el enlace antes del inicio.
- Establecer la variable de entorno USERPROFILE para que el servicio esté en otro lugar que no sea el directorio de perfil de usuario real. Esto me parece peligrosamente fuera de pista, pero también podría funcionar bien.
Otro contexto:
- Windows Server 2016, experiencia de escritorio.
- No se puede usar Core / Nano.
- No hay un directorio activo en juego. No habra
- Estos son usuarios locales.
- Estoy haciendo esto a través de Ansible, que está usando PowerShell bajo el capó para las cosas de Windows. Específicamente el módulo win_user , con Ansible 2.7.5.
- No quiero crear un
C:\users\default
(el equivalente de/etc/skel
), porque hay algunos usuarios de servicio diferentes y un tamaño no sirve para todos. Esto tampoco afecta cuando se crea el perfil de usuario, solo lo que estará en él cuando lo esté. - Estoy usando NSSM para administrar los servicios.
Cosas que he probado
- iniciar el servicio y permitir que Windows cree el directorio
- No quiero hacer esto, porque el servicio requiere secretos antes de comenzar, por lo que si hago esto dentro de mi proceso de cocción de imágenes, tendré que limpiarlos y también asegurarme de que mi servicio no lo haga. cualquier trabajo durante la fase de cocción. Quiero evitar esos dos fragmentos complicados.
fuente
net user
tiene (p. Ej./HOMEDIR
O/PROFILEPATH
)? . Vernet user /help
. Desde mi entendimiento (no probado), puede crear un directorio para el usuario y configurarlo como homedir con el/HOMEDIR
interruptor.Respuestas:
Windows puede crear un perfil de usuario a pedido, utilizando la API CreateProfile
Sin embargo, si no desea crear un ejecutable para realizar esta operación, puede llamar a la API en PowerShell. Otros ya lo han hecho: ejemplo en github .
Parte relevante del código:
fuente
Todo lo que necesita hacer es ejecutar un comando como ese usuario, Windows creará el perfil:
psexec.exe -u foobar -p Abcd123! cmd.exe /c exit
https://docs.microsoft.com/en-us/sysinternals/downloads/psexec
fuente
psexec
supone que debe conectarse a localhost con el nombre de usuario y la contraseña especificados con-u
y-p
y lanzarsecmd
solo para salir de inmediato. Yo me perdí algo ? Esto suena algo contradictorio: conectarse al sistema con un nombre de usuario y contraseña inexistentes debería ser un error. Cómo funciona ?C:\users\defaults
?