Saya membuat pengguna (lokal) untuk menjalankan layanan Windows sebagai. Saya punya alasan bagus untuk tidak ingin menggunakan LAYANAN JARINGAN, LAYANAN LOKAL, atau SISTEM LOKAL.
Saya membuat pengguna melalui net user foobar "Abcd123!" /add
- ini berfungsi dengan baik.
Pada titik ini, c:\users\foobar
tidak ada.
Jika saya membuat direktori home pengguna, sebelum pengguna masuk (atau, lebih tepatnya) atau layanan yang digunakan pengguna untuk memulai, Windows membuat profil pengguna di sebelah yang disebut c:\users\foobar-{gibberish/SID/whatever}
- ini bukan nama yang dapat diprediksi.
Saya memerlukan direktori home pengguna untuk memuat hal-hal seperti .ssh
direktori, a .gitconfig
- tools seperti itu (tidak terbatas pada tools itu) yang membuat asumsi bahwa itu akan menjadi orang yang menggunakannya, dan konfigurasi pengguna masuk ke dalam ~/...
. Biasanya, alat dari warisan Unix.
Pertanyaan aktual
Jadi - apakah ada cara terprogram (lebih disukai, PowerShell, atau out-of-the-box) untuk memberitahu Windows untuk membuat profil pengguna untuk pengguna lokal?
Atau, ada solusi lain?
Hal-hal yang belum pernah saya coba:
- NSSM start / pre hook yang menyalin file dari tempat lain ke direktori profil pengguna yang diharapkan ada pada saat ini berdasarkan Windows memulai layanan, membuat profil pengguna kemudian menyerahkan kontrol ke pembungkus NSSM yang menjalankan hook sebelum memulai.
- Mengatur variabel lingkungan USERPROFILE untuk layanan berada di tempat lain selain direktori profil pengguna yang sebenarnya. Ini menurut saya sebagai off-piste yang berbahaya tetapi juga bisa bekerja dengan baik.
Konteks lain:
- Windows Server 2016, pengalaman desktop.
- Tidak dapat menggunakan Core / Nano.
- Tidak ada direktori aktif yang sedang dimainkan. Tidak akan ada.
- Ini adalah pengguna lokal.
- Saya melakukan ini melalui Ansible, yang menggunakan PowerShell di bawah tenda untuk hal-hal Windows. Khususnya modul win_user , dengan Ansible 2.7.5.
- Saya tidak ingin membuat
C:\users\default
(yang setara dengan/etc/skel
), karena ada beberapa pengguna layanan yang berbeda dan satu ukuran tidak cocok untuk semua. Ini juga tidak mempengaruhi ketika profil pengguna dibuat, hanya apa yang akan ada di dalamnya ketika itu. - Saya menggunakan NSSM untuk mengelola layanan.
Hal yang sudah saya coba
- memulai layanan dan memungkinkan Windows untuk membuat direktori
- Saya tidak ingin melakukan ini, karena layanan ini membutuhkan rahasia sebelum memulai, dan jadi jika saya melakukan ini di dalam proses pembuatan gambar saya maka saya perlu membersihkannya, dan juga memastikan layanan saya tidak melakukan pekerjaan apa pun selama fase memanggang. Saya ingin menghindari kedua bit fiddly itu.
sumber
net user
dimiliki (mis./HOMEDIR
Atau/PROFILEPATH
)? . Lihatnet user /help
. Dari pemahaman saya (yang belum diuji), Anda dapat membuat direktori untuk pengguna, dan mengatur ini sebagai homedir dengan/HOMEDIR
sakelar.Jawaban:
Windows dapat membuat profil pengguna sesuai permintaan, menggunakan API CreateProfile
Namun, jika tidak ingin membuat yang dapat dieksekusi untuk melakukan operasi ini, Anda dapat memanggil API di PowerShell. Yang lain sudah melakukannya: contoh di github .
Bagian yang relevan dari kode:
sumber
Yang perlu Anda lakukan adalah menjalankan perintah sebagai pengguna itu, Windows akan membuat profil:
psexec.exe -u foobar -p Abcd123! cmd.exe /c exit
https://docs.microsoft.com/en-us/sysinternals/downloads/psexec
sumber
psexec
seharusnya terhubung ke localhost di bawah nama pengguna dan kata sandi yang ditentukan dengan-u
dan-p
dan diluncurkancmd
hanya untuk segera keluar. Apakah saya melewatkan sesuatu? Ini terdengar agak berlawanan dengan intuisi - menghubungkan ke sistem dengan nama pengguna dan kata sandi yang tidak ada seharusnya merupakan kesalahan. Bagaimana cara kerjanya ?C:\users\defaults
?