我正在为Windows服务创建(本地)用户运行。我有充分的理由不想使用网络服务,本地服务或本地系统。
我通过创建用户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进行此操作,后者在Windows的后台使用PowerShell。特别是带有Ansible 2.7.5 的win_user模块。
- 我不想创建一个
C:\users\default
(等效于/etc/skel
),因为有几个不同的服务用户,并且一个大小无法容纳所有用户。这也不会影响用户配置文件的创建时间,只会影响创建时的内容。 - 我正在使用NSSM来管理服务。
我尝试过的事情
- 启动服务并允许Windows创建目录
- 我不想这样做,因为该服务在启动之前需要秘密,因此,如果我在图像烘焙过程中执行此操作,则需要清理它们,并确保我的服务不起作用烘烤阶段的任何工作。我想避免这两个小问题。
请问您有什么用例可以避免Active Directory?使用AD,事情会容易得多。只是好奇。
—
Ondrej Tucny
我避免使用AD,因为这些机器都是短暂的。寿命以小时为单位,而不是以天为单位。这些机器托管无尘室构建环境。随身携带一台AD进出AD的机器是不值得的(如果您有兴趣的话,也请参阅medium.com/palantir/active-directory-as-code-e9666a2e548d)。
—
Peter Mounce
@Sven是-遗憾的是,即使它们设置了路径,也不会导致配置文件本身的创建。
—
Peter Mounce
net user
(例如/HOMEDIR
或/PROFILEPATH
)?。请参阅net user /help
。根据我的(未经测试的)理解,您可以为用户创建一个目录,并使用/HOMEDIR
开关将其设置为homedir 。