我正在嘗試自動將設定檔資料從一個使用者帳戶複製到另一個使用者帳戶。該其他使用者帳戶是透過管理員帳戶在 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
}