Я пытаюсь автоматизировать копирование данных профиля из одной учетной записи пользователя в другую. Эта другая учетная запись пользователя создается в скрипте PowerShell из учетной записи администратора. Я копирую по шаблону
Этот скрипт должен быть запущен на компьютере с Windows 8. Я думал, что смогу предположить, что USERPROFILE будет [HomeDrive]\Users[AccountName]\, но я столкнулся со случаем, когда на самом деле это будет [HomeDrive]\Users[AccountName].[MachineName].
Я использую следующий фрагмент для создания учетной записи пользователя:
function CreateLocalUser([string] $userName, [string] $password, [string] $description)
{
$computer = "localhost"
$objOu = [ADSI]"WinNT://$computer"
$objUser = $objOU.Create("User", $userName)
$objUser.SetPassword($password)
$objUser.SetInfo()
$objUser.Description = $description
$objUser.SetInfo()
return $objUser
}
Как получить домашний каталог созданного пользователя без использования расширений Powershell?
решение1
Я бы поискал ключ реестра для папки профиля пользователя, которую вы хотите скопировать, чтобы исключить неоднозначность.
HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\[Users SID]\Profile Image Path
Что касается создания домашнего каталога, то это сложная часть. Если это совершенно новый пользователь, вы можетепытатьсяИнструмент USMT от Microsoft, в частностисостояние нагрузкиexe и создайте учетную запись таким образом. Я не использовал его таким образом, но моей первой попыткой было бы создать профиль на каком-нибудь компьютере, а затем сделать его резервную копию с помощью scanstate. Затем вы можете развернуть его на любой машине с помощью loadstate, указав новое имя учетной записи в качестве параметра.
Loadstate автоматически создает профиль пользователя (включая папку профиля, в которую вы хотите скопировать файлы) и восстанавливает файлы, которые были скопированы (что является минимальным, если вы создаете резервную копию пустого или нового профиля), но самое важное то, что вы создаете папку профиля.
USMT доступен для загрузки с сайта MS и также входит в состав Windows 8 ADK.
решение2
Вам просто нужно запустить команду как новый пользователь, чтобы инициализировать папку профиля. Написал функцию, которая возвращает путь к папке профиля пользователя.
function New-UserProfileFolder ([string] $username, [string] $password) {
$sec_password = ConvertTo-SecureString $password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $sec_password
# Run command to create profile folder
Start-Process cmd /c -WindowStyle Hidden -Wait -Credential $credential -ErrorAction SilentlyContinue
# Get information from WMI
$user = Get-WmiObject -Namespace root/cimv2 -Class win32_useraccount -Filter "LocalAccount=True AND Name='$username'"
$userprofile = Get-WmiObject -Namespace root/cimv2 -Class win32_userprofile -Filter "SID='$($user.sid)'"
$userprofile.localpath
}