Программно создайте папку библиотек в профиле роуминга для новых пользователей, как при первом входе в систему на рабочем столе
Я создаю несколько новых пользователей Windows и назначаю права администратора с
net UserName Password /add
net localgroup administrators UserName /add
После этого пользователя создается, но он не загружен. Как например, C:\Users\UserName
папка еще не создана.
После этого я запускаю некоторые процессы, выдающие себя за пользователя, используя
psexec -i -h -u UserName -p Password process.exe
После этого некоторые дополнительные вещи загружаются для пользователя, я вижу это на C:\Users\UserName
и в системном реестре, но в нем все еще отсутствует часть перемещаемого профиля.
В частности, я смотрю на папку C:\Users\TestUser\AppData\Roaming\Microsoft\Windows\libraries
не создается (Примечание: это верно только для win10, в win7 оно создается). Кажется, эта папка создается только при входе пользователя в систему через настольный компьютер.
Как я могу закончить инициализацию пользователя так, чтобы пользователь загружался так же, как это делала бы регистрация через рабочий стол (или, по крайней мере, чтобы C:\Users\TestUser\AppData\Roaming\Microsoft\Windows\libraries
создано).
Я пытался использовать LoadUserProfile
но мне пока не повезло
IntPtr hUser = IntPtr.Zero;
try
{
bool result = LogonUser(
userName, null, password,
LOGON_TYPE.LOGON32_LOGON_NETWORK,
LOGON_PROVIDER.LOGON32_PROVIDER_DEFAULT,
out hUser);
if (result == false)
{
Exception ex = new System.ComponentModel.Win32Exception(
Marshal.GetLastWin32Error());
throw ex;
}
PROFILEINFO profileInfo = new PROFILEINFO();
profileInfo.dwSize = Marshal.SizeOf(profileInfo);
profileInfo.lpUserName = Environment.MachineName+ @"\" + userName;
result = LoadUserProfile(
hUser, ref profileInfo);
if (result == false)
{
Exception ex = new System.ComponentModel.Win32Exception(
Marshal.GetLastWin32Error());
throw ex;
}
}
finally
{
if (hUser != IntPtr.Zero)
{
CloseHandle(hUser);
}
}
Любое решение по C#, powershell или пакетным сценариям сделает это.