การกำหนดค่า User Profile Disks (UPD) บน Windows Server RDS
User Profile Disk (UPD) ช่วยให้คุณสามารถจัดเก็บโปรไฟล์ของผู้ใช้ Remote Desktop Services แต่ละคน (
%USERPROFILE%) ในไฟล์ VHDX (ดิสก์เสมือน) แยกต่างหาก ดิสก์โปรไฟล์ดังกล่าวเชื่อมต่อเมื่อผู้ใช้เข้าสู่ระบบ Windows และจะถูกตัดการเชื่อมต่อเมื่อผู้ใช้ออกจากระบบ (โดยบันทึกการเปลี่ยนแปลงโปรไฟล์) คุณสามารถจัดเก็บดิสก์โปรไฟล์ผู้ใช้บนไฟล์ที่ใช้ร่วมกันภายนอก เพื่อให้ผู้ใช้สามารถเข้าถึงสภาพแวดล้อมส่วนบุคคล (โปรไฟล์) เมื่อพวกเขาเข้าสู่ระบบเซิร์ฟเวอร์ใดๆ ในฟาร์ม RDS UPD เป็นทางเลือกแทนเทคโนโลยีการเปลี่ยนเส้นทางโปรไฟล์ข้ามเขตหรือโฟลเดอร์ในโซลูชันเทอร์มินัล RDS
ในบทความนี้ เราจะอธิบายวิธีกำหนดค่าและจัดการดิสก์โปรไฟล์ผู้ใช้บนโฮสต์ที่มีบทบาทบริการเดสก์ท็อประยะไกลที่ทำงานบน Windows Server 2022, 2019, 2016 หรือ 2012R2
เปิดใช้งานดิสก์โปรไฟล์ผู้ใช้บน Windows Server RDS
สร้างโฟลเดอร์เครือข่ายที่ใช้ร่วมกันเพื่อจัดเก็บไฟล์โปรไฟล์ UPD โฟลเดอร์นี้ต้องอยู่บนเซิร์ฟเวอร์ไฟล์นอกฟาร์ม RDS เพื่อให้แน่ใจว่าโปรไฟล์ UPD มีความพร้อมใช้งานสูง เราขอแนะนำให้คุณวางโฟลเดอร์เครือข่ายในคลัสเตอร์ เส้นทางไปยังไดเร็กทอรีดังกล่าวมีลักษณะดังนี้ในตัวอย่างของเรา:
\\fs01\RDSProfilesสร้างกลุ่มความปลอดภัยใน AD และเพิ่มโฮสต์ทั้งหมดในคอลเลกชัน RDS ของคุณ คุณสามารถสร้างกลุ่มโดยใช้คอนโซลกราฟิก ADUC หรือใช้ cmdlets จากโมดูล Active Directory สำหรับ Windows PowerShell:
New-ADGroup munRDSHCollection1 -path "OU=Groups,OU=MUN,DC=a-d,DC=loc" -GroupScope Domain -PassThru -Verbose
Add-AdGroupMember -Identity munRDSHCollection1 -Members munrds1$, munrds2$, munrds3$หากต้องการเพิ่มคอมพิวเตอร์ลงในกลุ่ม AD คุณต้องเพิ่ม $ ต่อท้ายชื่อคอมพิวเตอร์ (ซึ่งเป็นส่วนหนึ่งของแอตทริบิวต์ SAMAccountName)
ตอนนี้ให้สิทธิ์ การควบคุมทั้งหมด ในโฟลเดอร์ \fs01\RDSProfiles สำหรับกลุ่ม munRDSHCollection1
คุณสามารถเปิดใช้งาน User Profile Disks ในการตั้งค่า Remote Desktop Collection เมื่อคุณสร้าง หากมีคอลเล็กชันอยู่แล้ว ให้ค้นหาในคอนโซลตัวจัดการเซิร์ฟเวอร์และเลือก งาน-> แก้ไขคุณสมบัติ ที่มุมขวาบน
โหมด User Profile Disks สามารถเปิดใช้งานและกำหนดค่าได้ในการตั้งค่าคอลเลกชันของบริการเดสก์ท็อประยะไกล โหมดนี้สามารถเปิดใช้งานได้เมื่อสร้างคอลเล็กชันใหม่ หรือคุณสามารถกลับมาที่คอลเล็กชันใหม่ได้ในภายหลัง
จากนั้นไปที่แท็บ User Profile Disks เลือกตัวเลือก เปิดใช้งานดิสก์โปรไฟล์ผู้ใช้ ระบุเส้นทางไปยังโฟลเดอร์ที่ใช้ร่วมกันที่สร้างไว้ก่อนหน้านี้ (\fs01\RDSProfiles) และกำหนดขนาดดิสก์โปรไฟล์สูงสุด (ให้เป็น 7 GB) บันทึกการเปลี่ยนแปลง
คุณสามารถใช้เนมสเปซ DFS เพื่อจัดเก็บโปรไฟล์ UPD ของเซิร์ฟเวอร์ DFS ได้ แต่การกำหนดค่านี้ไม่ได้รับการสนับสนุนอย่างเป็นทางการ โฮสต์ DFS ต้องใช้งาน Windows Server 2012 R2 หรือใหม่กว่า หากคุณใช้ Windows Server เวอร์ชันก่อนหน้า คุณจะได้รับข้อผิดพลาด:
Unable to enable user disks on rVHDShare. Could not create template VHD. Error Message: The network location "\\a-d.site\namespace\UserProfileDisk" is not available.
คุณสามารถตรวจสอบว่าเปิดใช้งาน UPD สำหรับคอลเลกชัน RDS หรือไม่ และรับเส้นทางไปยังไดเร็กทอรีที่เก็บโปรไฟล์ด้วยคำสั่ง PowerShell:
Get-RDSessionCollectionConfiguration -CollectionName munCorpApp1 -UserProfileDisk
เคล็ดลับ ในคอลเลกชัน RDS เดียว สามารถมีไฟล์โปรไฟล์ VHDX ได้เพียงหนึ่งไฟล์สำหรับผู้ใช้หนึ่งคน หากผู้ใช้เชื่อมต่อกับทรัพยากรจากสองคอลเล็กชันที่แตกต่างกัน ระบบจะสร้างดิสก์โปรไฟล์แยกต่างหากสำหรับแต่ละคอลเล็กชัน
ตามค่าเริ่มต้น ดิสก์โปรไฟล์ผู้ใช้จะมีเนื้อหาโปรไฟล์ผู้ใช้ทั้งหมด คุณสามารถยกเว้นบางโฟลเดอร์จากรายการไดเร็กทอรีที่ซิงโครไนซ์หรือระบุว่าควรบันทึกเฉพาะบางโฟลเดอร์เท่านั้น ดังนั้น การเปลี่ยนแปลงใดๆ ที่ทำกับโฟลเดอร์ในรายการไดเร็กทอรีที่แยกออกในระหว่างเซสชันเทอร์มินัลของผู้ใช้จะไม่ถูกบันทึกลงในดิสก์ VHDX ในโฟลเดอร์ที่ใช้ร่วมกัน มีสองตัวเลือก:
เก็บการตั้งค่าและข้อมูลผู้ใช้ทั้งหมดไว้ในดิสก์โปรไฟล์ผู้ใช้
เก็บเฉพาะโฟลเดอร์ต่อไปนี้ในดิสก์โปรไฟล์ผู้ใช้
หากคุณใช้ RDS กับ UPD บน Windows Server 2019/2016 เมื่อเวลาผ่านไป คุณอาจพบว่าประสิทธิภาพโฮสต์ RDS ลดลงและหน้าจอดำเมื่อเข้าสู่ระบบผ่าน RDP เราขอแนะนำให้คุณเปิดใช้งานตัวเลือกรีจิสทรี DeleteUserAppContainersOnLogoff ทันทีบนโฮสต์ RDS ทั้งหมด
New-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy” -Type DWord -Path -Name DeleteUserAppContainersOnLogoff -Value 1ดิสก์โปรไฟล์ผู้ใช้ในไฟล์ VHDX บน RDS
หลังจากที่คุณเปลี่ยนการตั้งค่าคอลเลกชันและเปิดใช้งาน UPD แล้ว ไฟล์ชื่อ UVHD-template.vhdx จะถูกสร้างขึ้นในโฟลเดอร์ UPD เป้าหมาย
ไฟล์นี้เป็นเทมเพลตสำหรับดิสก์โปรไฟล์ของผู้ใช้ เมื่อผู้ใช้เข้าสู่ระบบเซิร์ฟเวอร์ RDS เป็นครั้งแรก เทมเพลตนี้จะถูกคัดลอกและเปลี่ยนชื่อเป็นไฟล์ VHDX โดยมี SID ของผู้ใช้อยู่ในชื่อ สำหรับผู้ใช้แต่ละคน ไฟล์ VHDX แยกต่างหากจะถูกสร้างขึ้น
คำใบ้ สำหรับบันทึกโดยละเอียดเกี่ยวกับการใช้ UPD เพื่อเข้าสู่ระบบเซิร์ฟเวอร์ โปรดดูที่ Event Viewer -> Application (พร้อมแหล่งที่มาของ User Profile Service) และ Applications and Services Logs -> -Microsoft -> Windows -> User Profile บริการ -> การดำเนินงาน
คุณสามารถจับคู่ชื่อไฟล์ UPD กับผู้ใช้ที่เป็นเจ้าของได้ ตัวอย่างเช่น คุณสามารถแปลง SID เป็นชื่อบัญชีผู้ใช้ได้ด้วยตนเองโดยใช้ Get-ADUser cmdlet:
Get-ADUser -Identity S-1-5-21-32549751-3956249758-2943215497-23733695หรือใช้สคริปต์ ShowUPDFolderDetails.ps1 ซึ่งแสดงชื่อไฟล์ UPD ในโฟลเดอร์ที่ระบุและเจ้าของ:
$UPDShare = "\\fs01\RDSProfiles"
$UserProfiles = @()
$fc = new-object -com scripting.filesystemobject
$folder = $fc.getfolder($UPDShare)
"Username,SiD" >> export.csv
foreach ($i in $folder.files)
{
$sid = $i.Name
$sid = $sid.Substring(5,$sid.Length-10)
if ($sid -ne "template")
{
$securityidentifier = new-object security.principal.securityidentifier $sid
$user = ( $securityidentifier.translate( [security.principal.ntaccount] ) )
$UserProfile = New-Object PSObject -Property @{
UserName = $user
UPDFile=$i.Name
}
$UserProfiles += $UserProfile
}
}
$UserProfiles| select UserName, UPDFileเนื่องจากโปรไฟล์ UPD เป็นไฟล์ดิสก์เสมือนปกติในรูปแบบ VHDX คุณจึงเมานต์และดูเนื้อหาได้จากโฮสต์ Windows ใดก็ได้ คลิกขวาที่ไฟล์แล้วเลือก เมานต์
อย่างที่คุณเห็น ดิสก์ VHDX มีชุดของโฟลเดอร์และไฟล์ของโปรไฟล์ผู้ใช้มาตรฐาน
ในโฮสต์เซสชัน RD โปรไฟล์ผู้ใช้ในไฟล์ VHDX จะถูกต่อเชื่อมกับ C:\users\
โปรไฟล์ UPD ติดตั้งในโหมดเอกสิทธิ์เฉพาะบุคคล ซึ่งหมายความว่าหากโปรไฟล์ผู้ใช้เชื่อมต่อกับเซสชัน RDS ของผู้ใช้หรือติดตั้งด้วยตนเอง คุณจะไม่สามารถเปิดได้โดยมีข้อผิดพลาด: ไม่สามารถเมานต์ไฟล์ได้เนื่องจากมีการใช้งานอยู่
ดิสก์โปรไฟล์ผู้ใช้จากเซิร์ฟเวอร์ RDS ไม่สามารถโยกย้ายระหว่างเวอร์ชันของ Windows Server
ข้อมูลถูกเขียนไปยังไฟล์ VHDX ตามเวลาจริง ซึ่งหมายความว่าเมื่อข้อมูลถูกคัดลอกไปยังโปรไฟล์ผู้ใช้บนเซิร์ฟเวอร์ RDS ขนาดของไฟล์ vhdx บนที่เก็บข้อมูลที่ใช้ร่วมกันจะเพิ่มขึ้นทันที
หากมีโฟลเดอร์โปรไฟล์ผู้ใช้อยู่แล้วใน Windows โฟลเดอร์ที่มีโปรไฟล์เก่าจะถูกเปลี่ยนชื่อเป็น
ดิสก์ VHDX จะถูกเมาต์เมื่อผู้ใช้เข้าสู่ระบบโฮสต์ VDI หรือ RDS โปรไฟล์ UPD แต่ละโปรไฟล์ถูกเมาต์เข้ากับไดเร็กทอรี C:\Users รายการดิสก์ VHDX ที่เมาท์และจุดเชื่อมต่อของโปรไฟล์ผู้ใช้จะปรากฏในการจัดการดิสก์
จะขยาย/ลดดิสก์โปรไฟล์ผู้ใช้ด้วย PowerShell ได้อย่างไร
คุณสามารถขยายหรือย่อภาพดิสก์ VHDX เสมือนด้วยโปรไฟล์ UPD ของผู้ใช้เฉพาะโดยใช้ cmdlet PowerShell Resize-VirtualDisk จากโมดูล Hyper-V (ต้องติดตั้งเครื่องมือการจัดการ Hyper-V บนคอมพิวเตอร์:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Management-Clients):
Net use U: \\fs01\RDSProfiles
Resize-VHD -Path u:\UVHD-<SID>.vhdx -SizeBytes 40GB
Net use U: /deleteตอนนี้คุณต้องเพิ่มขนาดโวลุ่มจากคอนโซลการจัดการดิสก์ GUI (การกระทำ -> แนบ VHD -> ขยายโวลุ่ม)
หรือใช้สคริปต์ PowerShell ต่อไปนี้เพื่อขยายไฟล์ VHDX เป็นขนาดสูงสุดที่มีให้โดยอัตโนมัติ:
<#
.Synopsis
This script extend size of VHDX file and resize the disk partition to Max
#>
Param(
[Parameter(Mandatory=$true,ValueFromPipeline=$true)]
[alias("Path")]
[string]$vhdxFile,
[Parameter(Mandatory=$true,ValueFromPipeline=$true)]
[alias("Size")]
[int64]$vhdxNewSize
)
begin{
try {
Mount-VHD -Path $vhdxFile -ErrorAction Stop
}
catch {
Write-Error "File $vhdxFile is busy"
Break
}
$vhdx = Get-VHD -Path $vhdxFile
if ($vhdx.Size -ge $vhdxNewSize){
Write-Warning "File $vhdxFile already have this size!"
$vhdx | Dismount-VHD
Break
}
}
process{
Dismount-VHD -Path $vhdxFile
Resize-VHD -Path $vhdxFile -SizeBytes $vhdxNewSize
$vhdxxpart = Mount-VHD -Path $vhdxFile -NoDriveLetter -Passthru | Get-Disk | Get-Partition
$partsize = $vhdxxpart | Get-PartitionSupportedSize
$vhdxxpart | Resize-Partition -Size $partsize.SizeMax
}
end{
Dismount-VHD -Path $vhdxFile
}โปรดทราบว่าคุณไม่สามารถขยายดิสก์ UPD ของผู้ใช้ที่มีเซสชัน RDS ที่ใช้งานอยู่ได้
หากต้องการลดขนาดของไฟล์ UPD (สมมติว่าคุณลบข้อมูลของผู้ใช้ภายในไฟล์ vhdx และขนาดข้อมูลบนดิสก์น้อยกว่าขนาดที่กำหนด) คุณสามารถใช้คำสั่ง:
Resize-VHD \\fs01\RDSProfiles\UVHD-<SID>.vhdx -ToMinimumSizeจากนั้นปรับการจัดสรรพื้นที่ในไฟล์ให้เหมาะสม:
Optimize-vhd -path \\fs01\RDSProfiles\UVHD-<SID>.vhdx -mode fullปัญหาโปรไฟล์ชั่วคราวเมื่อใช้ดิสก์โปรไฟล์ผู้ใช้บน RDS
โปรไฟล์ผู้ใช้ชั่วคราวเป็นหนึ่งในปัญหาทั่วไปที่คุณอาจพบเมื่อใช้โปรไฟล์ข้ามเขตหรือดิสก์โปรไฟล์ผู้ใช้บน RDS:
We can’t sign in to your account.
You’ve have been signed in with a temporary profile.
You can’t access your files, and files created in this profile will be deleted when you sign out. To fix this, sigh out and try signing later.A temporary profile is created for the user in this case:
Event ID 1511
Source: User Profile Serviceมีการสร้างโปรไฟล์ชั่วคราวสำหรับผู้ใช้เนื่องจาก Windows ไม่พบโปรไฟล์ในเครื่อง การเปลี่ยนแปลงที่คุณทำกับโปรไฟล์นี้จะสูญหายไปเมื่อคุณออกจากระบบ
ส่วนใหญ่มักเป็นเพราะไฟล์ VHDX ของผู้ใช้ไม่ได้ปิดในเซสชันก่อนหน้า ใช้ PowerShell ต่อไปนี้เพื่อค้นหาโฮสต์ RDSH ซึ่งติดตั้งไดรฟ์ VHDX ของผู้ใช้ (เรียกใช้สคริปต์บนโฮสต์ที่มีบทบาทนายหน้าการเชื่อมต่อ RD):
$UserToFind = "a.smith"
$User = $env:USERDOMAIN + '\' + $UserToFind
$RDCollection = Get-RDSessionCollection | where {$_.ResourceType -eq 'Remote Desktop'}
$RDHosts = Get-RDSessionHost -CollectionName $RDCollection.CollectionName | select SessionHost
$Array = Invoke-Command -ComputerName $RDHosts.SessionHost -ScriptBlock { Get-Disk | select Location,DiskNumber | where {$_.Location -notmatch "Integrated"} }
foreach ($VHD in $Array){
$DiskID = (Get-Item $VHD.Location).Name.Substring(5).Split(".")[0]
$objSID = New-Object System.Security.Principal.SecurityIdentifier ($DiskID)
$objUser = $objSID.Translate( [System.Security.Principal.NTAccount])
if ($objUser.Value -eq $User){
$result = "$($objUser.Value) disk number $($VHD.DiskNumber) on $($VHD.PSComputername)"
}else{
$result = "$($User) - no active RSH sessions were found."
}
}
$resultคุณสามารถยกเลิกการต่อเชื่อมไดรฟ์เสมือน UPD จากระยะไกลด้วยคำสั่ง:
Invoke-Command -ComputerName $VHD.PSComputername -ScriptBlock { Dismount-VHD -DiskNumber $VHD.DiskNumber }เพื่อลดปัญหาเกี่ยวกับโปรไฟล์ชั่วคราวบน RDS คุณควรกำหนดค่าการหมดเวลาสำหรับเซสชันผู้ใช้ RDS ตั้งค่าเซสชันที่ไม่ได้ใช้งาน/ไม่ได้เชื่อมต่อให้ยุติหลังจาก 2 ถึง 4 ชั่วโมง คุณยังสามารถเปิดใช้งานการตั้งค่า GPO ที่ป้องกันการสร้างโปรไฟล์ชั่วคราว: การกำหนดค่าคอมพิวเตอร์ -> เทมเพลตการดูแลระบบ -> ระบบ -> โปรไฟล์ผู้ใช้ เปิดใช้งานตัวเลือก ห้ามผู้ใช้เข้าสู่ระบบด้วยโปรไฟล์ชั่วคราว
การตั้งค่านโยบายนี้อาจทำให้ “
The User Profile Service failed the sign-in, user profile cannot be loaded” หากไม่มีโฟลเดอร์โปรไฟล์ผู้ใช้
ผู้ดูแลระบบต้องลบโปรไฟล์ผู้ใช้ชั่วคราวบนโฮสต์ RDS ด้วยตนเองหลังจากปล่อยดิสก์ VHDX:
ลบคีย์ย่อยด้วย SID ของผู้ใช้ภายใต้คีย์รีจิสทรีต่อไปนี้
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList. ในตัวอย่างนี้ มีคีย์ย่อยสองคีย์ โดยคีย์ย่อยหนึ่งคีย์ลงท้ายด้วย .bak (ลบทั้งสองคีย์);
ลบโฟลเดอร์โปรไฟล์ TEMP ของผู้ใช้ออกจากไดเร็กทอรี C:\Users
ดูบทความที่ลิงก์สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการลบโปรไฟล์ผู้ใช้ใน Windows
เทคโนโลยี User Profile Disk ซึ่งเปิดตัวเมื่อเกือบสิบปีที่แล้ว (ใน Windows Server 2012) มีข้อเสียหลายประการ ปัจจุบัน Microsoft แนะนำให้ใช้ คอนเทนเนอร์ FSLogix ที่ใหม่กว่าเพื่อจัดเก็บโปรไฟล์ผู้ใช้ RDS
ดังนั้นเราจึงดูวิธีกำหนดค่า User Profile Disks ในสภาพแวดล้อม RDS/VDI บน Windows Server การกำหนดค่า UPD นั้นง่ายกว่าการกำหนดค่าโปรไฟล์ข้ามเขตหรือโฟลเดอร์ที่เปลี่ยนเส้นทาง ดิสก์โปรไฟล์ผู้ใช้ถูกผูกไว้กับคอลเลกชัน RDS และไม่สามารถเสียหายได้เมื่อโปรไฟล์ผู้ใช้ถูกแชร์ระหว่างเซิร์ฟเวอร์เทอร์มินัลหลายเครื่อง (ไม่เหมือนกับโฟลเดอร์โปรไฟล์ผู้ใช้มาตรฐาน) ดิสก์โปรไฟล์ผู้ใช้สามารถจัดเก็บไว้ใน SMB ที่ใช้ร่วมกัน, CSV, SOFS, SAN หรือดิสก์ในเครื่อง















