Estou criando um usuário (local) para que um serviço do Windows seja executado como. Tenho boas razões para não querer usar o SERVIÇO DE REDE, SERVIÇO LOCAL ou SISTEMA LOCAL.
Eu crio o usuário via net user foobar "Abcd123!" /add
- isso funciona bem.
Neste ponto, c:\users\foobar
não existe.
Se eu criar o diretório inicial do usuário, antes que o usuário efetue logon (ou, mais pertinentemente) ou o serviço para o qual ele é iniciado, o Windows criará um perfil de usuário ao lado chamado c:\users\foobar-{gibberish/SID/whatever}
- este não é um nome previsível.
Eu preciso que o diretório inicial do usuário contenha coisas como um .ssh
diretório, a .gitconfig
- ferramentas como essa (não limitadas a essas ferramentas) que fazem suposições de que será uma pessoa que as usa e, portanto, a configuração do usuário entra ~/...
. Geralmente, ferramentas de uma herança Unix.
Pergunta real
Então - existe uma maneira programática (preferencialmente, PowerShell ou linha de comando pronta para uso) para dizer ao Windows para criar o perfil de usuário para um usuário local?
Ou, outras soluções alternativas?
Coisas que ainda não tentei:
- Um NSSM start / pre hook que copia arquivos de outros lugares para o diretório de perfil de usuário que, esperançosamente, existe neste momento em virtude do Windows iniciar o serviço, criando o perfil de usuário e entregando o controle ao wrapper NSSM que está executando o hook antes da inicialização.
- Definir a variável de ambiente USERPROFILE para o serviço estar em outro lugar que não seja o diretório de perfil do usuário real. Isso me parece perigosamente fora de pista, mas também pode funcionar bem.
Outro contexto:
- Windows Server 2016, experiência na área de trabalho.
- Não é possível usar o Core / Nano.
- Não há diretório ativo em reprodução. Não haverá.
- Estes são usuários locais.
- Estou fazendo isso via Ansible, que está usando o PowerShell nos bastidores para coisas do Windows. Especificamente, o módulo win_user , com o Ansible 2.7.5.
- Não quero criar um
C:\users\default
(o equivalente a/etc/skel
), porque existem alguns usuários de serviço diferentes e um tamanho não serve para todos. Isso também não afeta quando o perfil do usuário é criado, exatamente o que estará nele quando estiver. - Estou usando o NSSM para gerenciar os serviços.
Coisas que eu tentei
- iniciando o serviço e permitindo que o Windows crie o diretório
- Eu não quero fazer isso, porque o serviço exige segredos antes de iniciar, e, se eu fizer isso dentro do meu processo de criação de imagens, precisarei limpá-los e também garantir que meu serviço não funcione qualquer trabalho durante a fase de cozimento. Eu quero evitar os dois pedaços complicados.
fonte
net user
(por exemplo,/HOMEDIR
ou/PROFILEPATH
)? . Vejanet user /help
. Do meu entendimento (não testado), você pode criar um diretório para o usuário e configurá-lo como homedir com a/HOMEDIR
opçãoRespostas:
O Windows pode criar um perfil de usuário sob demanda, usando a API CreateProfile
No entanto, se não desejar criar um executável para executar esta operação, você poderá chamar a API no PowerShell. Outros já fizeram isso: exemplo no github .
Parte relevante do código:
fonte
Tudo o que você precisa fazer é executar um comando como esse usuário, o Windows criará o perfil:
psexec.exe -u foobar -p Abcd123! cmd.exe /c exit
https://docs.microsoft.com/en-us/sysinternals/downloads/psexec
fonte
psexec
suposto para se conectar ao localhost sob nome de usuário e senha especificados com-u
e-p
e lançamentocmd
apenas para sair imediatamente. Eu perdi alguma coisa ? Isso soa um pouco contra-intuitivo - conectar ao sistema com nome de usuário e senha inexistentes deve ser um erro. Como isso funciona ?C:\users\defaults
?