![获取另一个本地用户的主目录](https://linux22.com/image/1353201/%E8%8E%B7%E5%8F%96%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%9C%AC%E5%9C%B0%E7%94%A8%E6%88%B7%E7%9A%84%E4%B8%BB%E7%9B%AE%E5%BD%95.png)
我正在尝试自动将配置文件数据从一个用户帐户复制到另一个用户帐户。此另一个用户帐户正在通过管理员帐户的 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
至于创建主目录,这是比较棘手的部分。如果这是一个全新的用户,你可以尝试Microsoft 的 USMT 工具,特别是负载状态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
}