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

Я создаю несколько новых пользователей 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 или пакетным сценариям сделает это.

0 ответов

Другие вопросы по тегам