Назад | Перейти на главную страницу

Как мне инициализировать новую локальную учетную запись для службы Windows?

Я использую Terraform с Google Cloud для создания хостов Windows Server Core 2019 для использования с Jenkins. Я хочу установить некоторое программное обеспечение, например Git, OpenJDK и другие, используя Совок, и запустите Агент Дженкинс JAR как системная служба, работающая под локальным jenkins пользователь.

Я настраиваю их с помощью сценариев PowerShell, предоставленных через metadata ключи как sysprep-specialize-script-ps1 и windows-startup-script-ps1:

https://cloud.google.com/compute/docs/startupscript#providing_a_startup_script_for_windows_instances

Моя проблема в том, что я создаю локальных пользователей с помощью Powershell следующим образом:

New-LocalUser -Name $Username `
    -Description $Description `
    -Password $Password `
    -PasswordNeverExpires `
    -AccountNeverExpires

И я создаю службу агента Jenkins с помощью Windows Service Wrapper: https://github.com/winsw/winsw

Но когда я пытаюсь запустить его, не входя сначала в учетную запись пользователя Jenkins, я возвращаюсь:

2020-08-26 14:49:57,760 INFO  - Starting the service with id 'JenkinsAgent'
2020-08-26 14:49:57,823 FATAL - WMI Operation failure: ServiceLogonFailure
WMI.WmiException: ServiceLogonFailure
   at WMI.WmiRoot.BaseHandler.CheckError(ManagementBaseObject result)
   at WMI.WmiRoot.InstanceHandler.Invoke(Object proxy, MethodInfo method, Object[] arguments)
   at WinSW.Program.<Run>g__Start|2_2(<>c__DisplayClass2_0& )
   at WinSW.Program.Run(String[] argsArray, IWinSWConfiguration descriptor)
   at WinSW.Program.Main(String[] args)

Эта проблема не возникает, если я сначала войду в jenkins пользователь, использующий RDP, который создает профиль пользователя при первом входе в систему. Я предполагаю, что это то, что позволяет службе запускаться правильно.

Я пытаюсь понять, как создать пользователя и его профиль без необходимости вручную входить в систему для этого пользователя, чтобы служба могла запускаться правильно. Скрипты PS для установки и запуска выполняются как SYSTEM пользователь, что может быть причиной использования чего-то вроде Start-Process, Invoke-Command, или Start-Job с участием -Credential флаг для запуска команды как jenkins пользователю не удается создать свой профиль.

У меня были проблемы с попыткой запустить команду или просто exit так как jenkins пользователю нравится так:

[localhost] The background process reported an error with the following message: .
    + CategoryInfo          : OpenError: (localhost:String) [], PSRemotingTransportException
    + FullyQualifiedErrorId : 2100,PSSessionStateBroken

Что я делаю не так?

Есть ли лучший способ достичь того, что я пытаюсь сделать?

Как мне создать локального пользователя с участием свой профиль, чтобы запускалась созданная мной служба?