המדריך המקצועי ל-Unified Write Filter ב-Windows
מדריך מעשי לאנשי IT להגנת עמדות ציבוריות, קיוסקים ותחנות ייעודיות באמצעות UWF. המדריך מסביר את הארכיטקטורה, ההתקנה, Overlay, חריגות, Active Directory, Microsoft Defender, עדכונים, תחזוקה, ניטור, התאוששות ופתרון תקלות. בסוף המדריך נמצא מחולל PowerShell אינטראקטיבי שמייצר סקריפט לפי סביבת העבודה שלכם.
1. מהו UWF ומה הוא עושה בפועל
Unified Write Filter הוא רכיב של Windows שמגן על Volume שנבחר על ידי הפניית פעולות כתיבה אל Overlay וירטואלי. כל עוד הכתיבה אינה מוחרגת או מבוצעת Commit, היא אינה הופכת לשינוי קבוע ב-Volume המוגן.
UWF אינו "מקפיא את כל המחשב". הוא מגן רק על Volumes שהוגדרו במפורש כ-Protected. אם C מוגן ו-D אינו מוגן, שינוי ב-C יימחק בהתאם להתנהגות ה-Overlay, בעוד שינוי ב-D יישמר.
התרחישים הנפוצים הם עמדות מידע, מחשבים בספריות, עמדות גלישה ציבוריות, כיתות מחשבים, קיוסקים, עמדות Self Service, מחשבי תצוגה ותחנות שבהן רוצים להחזיר את Windows למצב ידוע לאחר Restart.
UWF אינו מחליף Microsoft Defender, EDR, WDAC, AppLocker, הרשאות משתמשים, MFA או הקשחת מערכת. נתיב שמוחרג מ-UWF נשמר פיזית ולכן תוכן זדוני שנכתב אליו יכול לשרוד אתחול. כל Exclusion צריך להיות מצומצם ומוצדק.
2. דרישות קדם ותכנון לפני התקנה
| מהדורת Windows | תמיכה ב-UWF | הערה |
|---|---|---|
| Windows Home | לא | הרכיב אינו נתמך |
| Windows Pro | לא | הרכיב אינו נתמך |
| Windows Enterprise | כן | מתאים לעמדות ארגוניות |
| Windows Education | כן | מתאים למוסדות חינוך וספריות |
| Windows IoT Enterprise | כן | מתאים במיוחד לקיוסקים ועמדות ייעודיות |
לפני שמפעילים את UWF
- להשלים Windows Update, עדכוני BIOS ודרייברים.
- להתקין את כל התוכנות שהתחנה צריכה.
- לבצע Activation של Windows ולוודא שהוא נשמר.
- להצטרף ל-Active Directory או Entra לפי תכנון התחנה.
- להגדיר מדפסות, Wi-Fi, 802.1X וציוד היקפי.
- לבדוק שהמשתמש הרגיל יכול לעבוד ללא הרשאות Administrator.
- להחליט אילו נתונים באמת חייבים לשרוד Restart.
- לבדוק כמה כתיבות מייצרת התחנה ביום עבודה טיפוסי.
בדיקת מהדורת Windows ו-Activation
(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ProductName
cscript.exe //Nologo "$env:SystemRoot\System32\slmgr.vbs" /xpr
מומלץ להפעיל את Windows כאשר UWF כבוי. אל תנסו לפתור בעיית Activation באמצעות החרגה רחבה של Software Protection. קודם מוודאים שהמערכת Activated ורק לאחר מכן מפעילים את ההגנה.
3. התקנת רכיב UWF
התקנת הרכיב אינה מפעילה את ההגנה. היא רק מוסיפה ל-Windows את הדרייבר, WMI Provider ואת הכלי uwfmgr.exe. לאחר ההתקנה יש לבצע Restart לפני שממשיכים להגדרה.
אפשרות א, PowerShell
Enable-WindowsOptionalFeature -Online -FeatureName Client-UnifiedWriteFilter -All -NoRestart
אפשרות ב, DISM
dism.exe /online /Enable-Feature /FeatureName:Client-UnifiedWriteFilter /All /NoRestart
אימות
Get-WindowsOptionalFeature -Online -FeatureName Client-UnifiedWriteFilter
4. Current Session מול Next Session
UWF מנהל חלק גדול מהתצורה בשתי שכבות. Current Session מייצג את המצב הפעיל עכשיו. Next Session מייצג את המצב שייכנס לתוקף לאחר Restart.
אחרי כל שינוי משמעותי הריצו
uwfmgr.exe get-config.
אל תסתפקו בכך שהפקודה חזרה ללא שגיאה. בדקו גם מה פעיל עכשיו וגם מה מתוכנן לאתחול הבא.
uwfmgr.exe get-config
לדוגמה, uwfmgr.exe filter disable אינו מכבה את UWF מיד.
הוא קובע ש-UWF יהיה Disabled ב-Next Session.
5. תכנון Overlay, RAM מול Disk
ה-Overlay מחזיק את השינויים שהופנו מה-Volume המוגן. ככל שהתחנה כותבת יותר נתונים, כך ה-Overlay גדל. בחירה נכונה של סוג וגודל ה-Overlay היא תנאי ליציבות.
| מאפיין | RAM Overlay | Disk Overlay |
|---|---|---|
| מיקום | זיכרון RAM | אחסון מקומי |
| צריכת RAM | גבוהה יותר | נמוכה יותר |
| התאמה לעמדה ציבורית רגילה | אפשרי | בדרך כלל נוח יותר |
| HORM | נדרש | לא נתמך עם HORM |
| Free Space Passthrough | לא רלוונטי | זמין |
| Persistent Overlay | לא התרחיש העיקרי | זמין, אך מוגדר ניסיוני בתיעוד Microsoft |
בחירת גודל
אין גודל אוניברסלי. המספר הנכון נקבע לפי עומס הכתיבה, משך הזמן בין Restart-ים, Cache של דפדפנים, הורדות, Office, הדפסה, לוגים ותוכנות צד שלישי.
| תרחיש | נקודת התחלה לבדיקת Pilot |
|---|---|
| קיוסק פשוט | 4 עד 8 GB |
| גלישה, Office ועבודה ציבורית | 8 עד 16 GB |
| עמדה עם כתיבה גבוהה | 16 עד 32 GB |
הגדרת Disk Overlay לדוגמה, 16GB
שינוי Type או Maximum Size דורש ש-UWF יהיה Disabled ב-Current Session. הגודל מוגדר ב-MB.
uwfmgr.exe overlay set-type disk
uwfmgr.exe overlay set-size 16384
uwfmgr.exe overlay set-warningthreshold 13107
uwfmgr.exe overlay set-criticalthreshold 14745
בדוגמה Warning הוא בערך 80% ו-Critical בערך 90%. ה-Warning חייב להיות קטן מה-Critical.
Free Space Passthrough
ב-Disk Overlay ניתן לאפשר ל-UWF להשתמש בשטח פנוי מעבר לשטח ששמור ל-Overlay. מומלץ לבדוק היטב את ההתנהגות על Image הייצור לפני הפעלה רחבה.
uwfmgr.exe overlay set-passthrough on
6. בחירת ה-Volume המוגן
UWF אינו מניח ש-C צריך להיות מוגן. אתם מגדירים איזה Volume יוגן. ברוב תחנות Windows מגנים על C ומשאירים D לא מוגן רק כאשר יש סיבה תפעולית לשמירה קבועה.
uwfmgr.exe volume protect C:
בדיקת Volumes
uwfmgr.exe volume get-config all
7. אסטרטגיית Exclusions נכונה
File ו-Registry Exclusions צריכים להיות ממוקדים. כל חריגה פותחת נתיב שבו שינויים נשמרים לצמיתות. Microsoft גם מציינת שכתיבות לקבצים מוחרגים עדיין יכולות להשפיע על צמיחת ה-Overlay. לכן לא משתמשים ב-Exclusions כדי "לפתור" בעיית Overlay גדול.
מה לא להחריג באופן גורף
- לא להחריג את כל
C:\Windows. - לא להחריג את Root של ה-Volume.
- לא להחריג SAM, SECURITY, SYSTEM או Registry Hives שלמים.
- לא להחריג
HKLM\SECURITY\Policy\Secrets\$MACHINE.ACC. - לא להחריג
C:\Windows\Tempכברירת מחדל. - לא להחריג את כל Spool רק כדי "לפתור הדפסה".
- לא להחריג SoftwareDistribution כאשר אסטרטגיית העדכון היא Servicing Mode.
דוגמה לנתיב ייעודי ליישום
New-Item -Path "C:\ProgramData\MyApp\Persistent" -ItemType Directory -Force
uwfmgr.exe file add-exclusion "C:\ProgramData\MyApp\Persistent"
בדיקת Exclusions
uwfmgr.exe file get-exclusions all
uwfmgr.exe registry get-exclusions
8. Microsoft Defender על תחנה מוגנת
Microsoft מפרסמת רשימת UWF Exclusions ייעודית כדי שעדכוני חתימות ושינויי Defender יוכלו להישמר. אלו UWF Exclusions, לא Antivirus Exclusions בתוך Defender.
File Exclusions ש-Microsoft מפרסמת עבור Defender
uwfmgr.exe file add-exclusion "C:\Program Files\Windows Defender"
uwfmgr.exe file add-exclusion "C:\ProgramData\Microsoft\Windows Defender"
uwfmgr.exe file add-exclusion "C:\Windows\WindowsUpdate.log"
uwfmgr.exe file add-exclusion "C:\Windows\Temp\MpCmdRun.log"
Registry Exclusions ש-Microsoft מפרסמת עבור Defender
uwfmgr.exe registry add-exclusion "HKLM\SOFTWARE\Microsoft\Windows Defender"
uwfmgr.exe registry add-exclusion "HKLM\SYSTEM\CurrentControlSet\Services\WdBoot"
uwfmgr.exe registry add-exclusion "HKLM\SYSTEM\CurrentControlSet\Services\WdFilter"
uwfmgr.exe registry add-exclusion "HKLM\SYSTEM\CurrentControlSet\Services\WdNisSvc"
uwfmgr.exe registry add-exclusion "HKLM\SYSTEM\CurrentControlSet\Services\WdNisDrv"
uwfmgr.exe registry add-exclusion "HKLM\SYSTEM\CurrentControlSet\Services\WinDefend"
9. Active Directory ו-PersistDomainSecretKey
במחשב Domain Joined, חשבון המחשב מחזיק סוד משותף מול Active Directory. אם שינוי סיסמת חשבון המחשב אינו נשמר, עלול להיווצר מצב שבו ה-DC והתחנה אינם מסכימים על הסוד העדכני.
השתמשו במנגנון הייעודי PersistDomainSecretKey של UWF.
$Namespace = "root\standardcimv2\embedded"
$UwfReg = Get-CimInstance `
-Namespace $Namespace `
-ClassName UWF_RegistryFilter |
Where-Object { $_.CurrentSession -eq $false }
Set-CimInstance `
-InputObject $UwfReg `
-Property @{ PersistDomainSecretKey = $true }
אימות
Get-CimInstance `
-Namespace "root\standardcimv2\embedded" `
-ClassName UWF_RegistryFilter |
Select-Object CurrentSession, PersistDomainSecretKey
בדיקת Secure Channel לאחר ההפעלה
Test-ComputerSecureChannel -Verbose
10. GPO, Wi-Fi, Wired ו-802.1X
במחשב ארגוני לא מומלץ להחריג את כל אזור Group Policy. Microsoft מפרסמת נתיבים ומפתחות ממוקדים עבור Wireless ו-Wired Policy. הוסיפו רק את הרכיבים שנדרשים בסביבה שלכם.
Wireless GPO ופרופילי Wi-Fi
uwfmgr.exe file add-exclusion "C:\Windows\wlansvc\Policies"
uwfmgr.exe registry add-exclusion "HKLM\SOFTWARE\Policies\Microsoft\Windows\Wireless\GPTWirelessPolicy"
uwfmgr.exe registry add-exclusion "HKLM\SOFTWARE\Microsoft\wlansvc"
uwfmgr.exe registry add-exclusion "HKLM\SYSTEM\CurrentControlSet\Services\Wlansvc"
uwfmgr.exe registry add-exclusion "HKLM\SYSTEM\CurrentControlSet\Services\WwanSvc"
Wired GPO ו-802.1X
uwfmgr.exe file add-exclusion "C:\Windows\dot2svc\Policies"
uwfmgr.exe registry add-exclusion "HKLM\SOFTWARE\Policies\Microsoft\Windows\WiredL2\GP_Policy"
uwfmgr.exe registry add-exclusion "HKLM\SOFTWARE\Microsoft\dot3svc"
uwfmgr.exe registry add-exclusion "HKLM\SYSTEM\CurrentControlSet\Services\dot3svc"
11. Time Zone ו-DST
אם התחנה צריכה לשמר שינויי Time Zone ו-Daylight Saving Time, Microsoft מפרסמת שתי החרגות Registry ממוקדות.
uwfmgr.exe registry add-exclusion "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones"
uwfmgr.exe registry add-exclusion "HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation"
אין צורך להחריג אוטומטית את כל W32Time. במחשב Domain Joined שירות הזמן ממשיך לפעול לפי היררכיית הדומיין, בעוד החרגות DST נועדו לשמר את הגדרות האזור המקומיות.
12. הפעלת ההגנה
בעמדת UWF רגילה מומלץ לבטל Hibernation ו-Fast Startup. Fast Startup אינו מתאים למודל שבו רוצים ש-Restart ינקה את ה-Overlay. HORM הוא תרחיש נפרד שמוסבר בהמשך.
powercfg.exe /h off
uwfmgr.exe filter enable
uwfmgr.exe get-config
רק לאחר שבדקתם שה-Next Session נכון, בצעו Restart.
uwfmgr.exe filter restart
מה UWF משנה בפעם הראשונה שמפעילים אותו
Windows משנה מספר הגדרות תפעוליות כדי להתאים את המערכת ל-UWF. בין היתר Microsoft מתעדת השבתת Paging Files, System Restore, SuperFetch, File Indexing, Defragmentation ו-Fast Boot. בנוסף UWF מנהל את Windows Update ו-Microsoft Store Update בהתאם למצב ההגנה וה-Servicing.
13. בדיקות אימות אחרי Restart
uwfmgr.exe get-config
uwfmgr.exe volume get-config all
uwfmgr.exe overlay get-config
uwfmgr.exe overlay get-consumption
uwfmgr.exe overlay get-availablespace
uwfmgr.exe file get-exclusions all
uwfmgr.exe registry get-exclusions
uwfmgr.exe servicing get-config
בדיקת Persistence מעשית
- צרו קובץ בדיקה על Desktop.
- צרו קובץ נוסף בתוך נתיב שמוגדר Exclusion.
- בצעו Restart.
- וודאו שהקובץ ב-Desktop נעלם.
- וודאו שהקובץ בנתיב המוחרג נשמר.
- במחשב Domain Joined הריצו Test-ComputerSecureChannel.
- בדקו שהגדרות Defender והחתימות נשמרות לאחר Restart.
14. תחזוקה והתקנת תוכנות
שינוי גדול או התקנת תוכנה
הדרך הפשוטה והברורה ביותר היא לתזמן Disable, לבצע Restart, לעבוד כאשר UWF כבוי באמת, לבצע את השינוי, להפעיל מחדש את UWF ולבצע Restart נוסף.
uwfmgr.exe filter disable
uwfmgr.exe filter restart
לאחר שסיימתם את השינויים:
uwfmgr.exe filter enable
uwfmgr.exe filter restart
15. עדכונים בעמדת UWF ללא סיסמת Windows
בעמדות ציבוריות רבות Windows נכנס אוטומטית לחשבון מקומי ללא סיסמה. בתרחיש כזה UWF Servicing Mode המובנה אינו מתאים, משום שמיקרוסופט דורשת שלכל חשבונות המשתמש במחשב תהיה סיסמה. אם קיים חשבון ללא סיסמה, Servicing Mode עלול להיכשל.
בעמדה ללא סיסמה מומלץ להשתמש בשילוב של חריגות ממוקדות עבור מנגנוני העדכון, ועדכון Windows מלא בחלון תחזוקה שבו UWF כבוי זמנית והתהליך רץ כ-SYSTEM. חשבון SYSTEM אינו דורש שם משתמש, סיסמה או כניסה אינטראקטיבית ל-Windows.
15.1 למה החרגות Windows Update לבדן אינן מספיקות
כאשר UWF מופעל, Windows משבית את Windows Update האוטומטי כחלק מהתנהגות הפילטר. בנוסף, עדכון מצטבר של Windows משנה קבצי מערכת רבים מחוץ ל-SoftwareDistribution. לכן החרגת תיקיית ההורדות ומפתחות Registry עוזרת לשמור Cache, Metadata ומצב עדכון, אבל אינה הופכת התקנת Feature Update או Cumulative Update למתמשכת כאשר C עדיין מוגן.
15.2 חריגות Windows Update
החריגות הבאות שומרות את בסיס הנתונים, קבצי ההורדה ומצב המדיניות של Windows Update. שני מפתחות ה-Registry נכללו במפורש כדי לאפשר למדיניות Windows Update להישמר בין אתחולים.
uwfmgr.exe file add-exclusion "C:\Windows\SoftwareDistribution"
uwfmgr.exe file add-exclusion "C:\ProgramData\Microsoft\Network\Downloader"
uwfmgr.exe registry add-exclusion "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate"
uwfmgr.exe registry add-exclusion "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate"
15.3 Google Chrome, שמירת מנגנון העדכון והגרסה המותקנת
Chrome משתמש ב-Google Updater. בגרסאות חדשות קיים GoogleUpdater, ובתחנות ותיקות עדיין ניתן למצוא את Google Update הישן. כדי שעדכון הדפדפן עצמו ישרוד Restart צריך לשמר גם את תיקיית Application, ולא רק את קבצי ה-Updater.
uwfmgr.exe file add-exclusion "C:\Program Files\Google\Chrome\Application"
uwfmgr.exe file add-exclusion "C:\Program Files (x86)\Google\Chrome\Application"
uwfmgr.exe file add-exclusion "C:\Program Files (x86)\Google\GoogleUpdater"
uwfmgr.exe file add-exclusion "C:\Program Files (x86)\Google\Update"
uwfmgr.exe registry add-exclusion "HKLM\SOFTWARE\Google\Update"
uwfmgr.exe registry add-exclusion "HKLM\SOFTWARE\WOW6432Node\Google\Update"
uwfmgr.exe registry add-exclusion "HKLM\SOFTWARE\Policies\Google\Update"
אל תחריגו את תיקיית הפרופיל של המשתמש כגון %LOCALAPPDATA%\Google\Chrome\User Data. היסטוריה, Cookies, Sessions ונתוני משתמש צריכים בדרך כלל להימחק באתחול של עמדת קיוסק.
15.4 Microsoft Edge, שמירת מנגנון העדכון והגרסה המותקנת
Edge משתמש ב-Microsoft Edge Update. גם כאן, שמירת תיקיית EdgeUpdate בלבד אינה מספיקה כאשר רוצים שהגרסה החדשה של הדפדפן תישמר. לכן מחריגים גם את תיקיית Application. הפקודות כוללות נתיבים נפוצים, ואם נתיב אינו קיים אין צורך ליצור אותו רק לצורך ההחרגה.
uwfmgr.exe file add-exclusion "C:\Program Files (x86)\Microsoft\EdgeUpdate"
uwfmgr.exe file add-exclusion "C:\Program Files (x86)\Microsoft\Edge\Application"
uwfmgr.exe file add-exclusion "C:\Program Files\Microsoft\Edge\Application"
uwfmgr.exe registry add-exclusion "HKLM\SOFTWARE\Policies\Microsoft\EdgeUpdate"
uwfmgr.exe registry add-exclusion "HKLM\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate"
uwfmgr.exe registry add-exclusion "HKLM\SYSTEM\CurrentControlSet\Services\edgeupdate"
uwfmgr.exe registry add-exclusion "HKLM\SYSTEM\CurrentControlSet\Services\edgeupdatem"
תיקיית Application מוחרגת נכתבת ישירות לדיסק. לכן שינוי זדוני שמצליח להיכתב לתיקיית הדפדפן עלול לשרוד Restart. בעמדות ציבוריות מומלץ להשאיר את המשתמש ללא הרשאות Administrator, להפעיל Defender או EDR, ולוודא שה-ACL של Program Files נשאר ברירת המחדל של Windows.
15.5 הפתרון המומלץ לעדכוני Windows מלאים, Maintenance תחת SYSTEM
זהו הפתרון המתאים לעמדה ללא סיסמה. Scheduled Task רץ כ-Local System, ולכן אינו תלוי ב-Auto Logon או בסיסמת המשתמש. התהליך מורכב מארבעה שלבים:
- המשימה מסמנת שהתחיל חלון תחזוקה ומגדירה
uwfmgr.exe filter disable. - המחשב מבצע Restart. לאחר האתחול UWF כבוי באמת ב-Current Session.
- PowerShell משתמש ב-Windows Update Agent כדי לחפש, להוריד ולהתקין עדכוני Software.
- בסיום מוגדר
uwfmgr.exe filter enableוהמחשב מבצע Restart נוסף וחוזר למצב מוגן.
סקריפט Maintenance לדוגמה
הסקריפט הבא הוא State Machine. הוא שומר מצב בתיקייה ייעודית שמוחרגת מ-UWF, ולכן הוא יודע להמשיך את התהליך גם אחרי Restart. הוא מבצע עד ארבעה סבבי Windows Update, מטפל ב-Reboot Required ולבסוף מחזיר את UWF למצב Enabled.
#Requires -RunAsAdministrator
param(
[switch]$StartMaintenance
)
$ErrorActionPreference = "Stop"
$Namespace = "root\standardcimv2\embedded"
$BasePath = "C:\ProgramData\MorNet\UWF-Maintenance"
$StateFile = Join-Path $BasePath "state.json"
$LogFile = Join-Path $BasePath "maintenance.log"
$UwfMgr = "$env:SystemRoot\System32\uwfmgr.exe"
$MaxPasses = 4
New-Item -Path $BasePath -ItemType Directory -Force | Out-Null
function Write-MaintenanceLog {
param([string]$Message)
$Line = "{0:u} {1}" -f (Get-Date), $Message
Add-Content -LiteralPath $LogFile -Value $Line -Encoding UTF8
}
function Save-State {
param(
[string]$Phase,
[int]$Pass
)
[pscustomobject]@{
Phase = $Phase
Pass = $Pass
} | ConvertTo-Json | Set-Content -LiteralPath $StateFile -Encoding UTF8
}
function Get-State {
if (-not (Test-Path -LiteralPath $StateFile)) {
return $null
}
Get-Content -LiteralPath $StateFile -Raw | ConvertFrom-Json
}
function Restart-WithUwf {
Write-MaintenanceLog "Restart requested through UWF."
& $UwfMgr filter restart
exit
}
function Install-WindowsUpdates {
Write-MaintenanceLog "Starting Windows Update Agent scan."
$Session = New-Object -ComObject "Microsoft.Update.Session"
$Session.ClientApplicationID = "MorNet UWF Maintenance"
$Searcher = $Session.CreateUpdateSearcher()
$SearchResult = $Searcher.Search(
"IsInstalled=0 and IsHidden=0 and Type='Software'"
)
$Updates = New-Object -ComObject "Microsoft.Update.UpdateColl"
foreach ($Update in $SearchResult.Updates) {
if (-not $Update.EulaAccepted) {
$Update.AcceptEula()
}
[void]$Updates.Add($Update)
Write-MaintenanceLog ("Selected update: " + $Update.Title)
}
if ($Updates.Count -eq 0) {
Write-MaintenanceLog "No applicable Windows updates found."
return [pscustomobject]@{
Count = 0
RebootRequired = $false
}
}
$Downloader = $Session.CreateUpdateDownloader()
$Downloader.Updates = $Updates
$DownloadResult = $Downloader.Download()
Write-MaintenanceLog (
"Download result code: " + $DownloadResult.ResultCode
)
$Installer = $Session.CreateUpdateInstaller()
$Installer.Updates = $Updates
$InstallResult = $Installer.Install()
Write-MaintenanceLog (
"Install result code: " + $InstallResult.ResultCode +
", reboot required: " + $InstallResult.RebootRequired
)
return [pscustomobject]@{
Count = $Updates.Count
RebootRequired = [bool]$InstallResult.RebootRequired
}
}
try {
$Filter = Get-CimInstance `
-Namespace $Namespace `
-ClassName UWF_Filter
$State = Get-State
if ($StartMaintenance -and -not $State) {
Save-State -Phase "Requested" -Pass 0
$State = Get-State
Write-MaintenanceLog "Maintenance requested."
}
if (-not $State) {
exit 0
}
if ($Filter.CurrentEnabled) {
if ($State.Phase -eq "EnablePending") {
Write-MaintenanceLog "UWF protection restored. Maintenance completed."
Remove-Item -LiteralPath $StateFile -Force -ErrorAction SilentlyContinue
exit 0
}
Write-MaintenanceLog "Disabling UWF for the next session."
Save-State -Phase "FilterDisablePending" -Pass ([int]$State.Pass)
& $UwfMgr filter disable
Restart-WithUwf
}
$State = Get-State
if (-not $Filter.CurrentEnabled) {
$Pass = [int]$State.Pass + 1
Save-State -Phase "Updating" -Pass $Pass
Write-MaintenanceLog "Update pass $Pass of $MaxPasses."
$Result = Install-WindowsUpdates
if ($Result.RebootRequired -and $Pass -lt $MaxPasses) {
Write-MaintenanceLog "Windows Update requires another restart."
Restart-WithUwf
}
if ($Result.Count -gt 0 -and $Pass -lt $MaxPasses) {
Write-MaintenanceLog "Updates were installed. Rebooting for another scan."
Restart-WithUwf
}
Write-MaintenanceLog "Enabling UWF for the next session."
Save-State -Phase "EnablePending" -Pass $Pass
& $UwfMgr filter enable
Restart-WithUwf
}
}
catch {
Write-MaintenanceLog ("ERROR: " + $_.Exception.Message)
try {
$Filter = Get-CimInstance `
-Namespace $Namespace `
-ClassName UWF_Filter
if (-not $Filter.CurrentEnabled) {
Save-State -Phase "EnablePending" -Pass 99
& $UwfMgr filter enable
Restart-WithUwf
}
}
catch {
Write-MaintenanceLog ("RECOVERY ERROR: " + $_.Exception.Message)
}
throw
}
הכנת התיקייה והחרגתה
New-Item -Path "C:\ProgramData\MorNet\UWF-Maintenance" -ItemType Directory -Force
uwfmgr.exe file add-exclusion "C:\ProgramData\MorNet\UWF-Maintenance"
הרצה ידנית של חלון תחזוקה
לאחר ששמרתם את הסקריפט בשם C:\ProgramData\MorNet\UWF-Maintenance\Invoke-UwfMaintenance.ps1, אפשר להתחיל עדכון ידנית כך:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\ProgramData\MorNet\UWF-Maintenance\Invoke-UwfMaintenance.ps1" -StartMaintenance
Scheduled Task ללא סיסמה
כדי שהתהליך ימשיך אחרי Restart, יוצרים Trigger ב-Startup שרץ כ-SYSTEM. אפשר להוסיף Trigger שבועי נוסף שמתחיל את חלון התחזוקה בשעה שבה אין משתמשים בעמדה.
$Script = "C:\ProgramData\MorNet\UWF-Maintenance\Invoke-UwfMaintenance.ps1"
$Action = New-ScheduledTaskAction `
-Execute "powershell.exe" `
-Argument "-NoProfile -ExecutionPolicy Bypass -File `"$Script`""
$Trigger = New-ScheduledTaskTrigger -AtStartup
$Principal = New-ScheduledTaskPrincipal `
-UserId "SYSTEM" `
-LogonType ServiceAccount `
-RunLevel Highest
$Settings = New-ScheduledTaskSettingsSet -StartWhenAvailable
Register-ScheduledTask `
-TaskName "MorNet-UWF-Maintenance-Startup" `
-Action $Action `
-Trigger $Trigger `
-Principal $Principal `
-Settings $Settings `
-Force
בזמן שבו UWF כבוי המחשב אינו חוזר למצב הנקי שלו לאחר Restart. לכן חלון התחזוקה צריך להיות מתוזמן לשעה שבה העמדה אינה בשימוש. הסקריפט מחזיר את UWF לפעולה גם במקרה של שגיאת עדכון, ככל שהמערכת עדיין מסוגלת להריץ את תהליך ההתאוששות.
ומה לגבי UWF Servicing Mode המובנה?
Servicing Mode נשאר אפשרות תקינה במחשבים שבהם לכל החשבונות קיימת סיסמה. בעמדות שלך, שבהן חשבון Windows הוא ללא סיסמה, אין צורך לבנות את אסטרטגיית העדכון סביבו.
uwfmgr.exe servicing enable
uwfmgr.exe filter restart
16. Commit לשינוי בודד
Commit מתאים כאשר יש שינוי מצומצם שרוצים לשמור בלי לכבות את כל ההגנה. אין להשתמש בו כתחליף לתהליך תחזוקה מלא עבור התקנת תוכנה מורכבת.
קובץ
uwfmgr.exe file commit "C:\Path\To\File.txt"
Registry
uwfmgr.exe registry commit "HKLM\SOFTWARE\ExampleKey"
17. ניטור Overlay
uwfmgr.exe overlay get-config
uwfmgr.exe overlay get-consumption
uwfmgr.exe overlay get-availablespace
כאשר ה-Overlay קרוב למקסימום, פעולות כתיבה עלולות להיכשל והמערכת עלולה להפוך לאיטית או לא מגיבה. אין להניח שחייב להופיע BSOD.
PowerShell לבדיקת אחוז צריכה
$Namespace = "root\standardcimv2\embedded"
$Overlay = Get-CimInstance `
-Namespace $Namespace `
-ClassName UWF_Overlay
$OverlayConfig = Get-CimInstance `
-Namespace $Namespace `
-ClassName UWF_OverlayConfig |
Where-Object { $_.CurrentSession -eq $true }
if ($OverlayConfig.MaximumSize -gt 0) {
$Percent = [math]::Round(
($Overlay.OverlayConsumption / $OverlayConfig.MaximumSize) * 100,
1
)
[pscustomobject]@{
ConsumptionMB = $Overlay.OverlayConsumption
MaximumMB = $OverlayConfig.MaximumSize
AvailableMB = $Overlay.AvailableSpace
Percent = $Percent
}
}
Event Viewer
| סוג מידע | מיקום |
|---|---|
| Overlay Consumption | Windows Logs\System |
| שגיאות UWF | Applications and Services Logs\Microsoft\Windows\UnifiedWriteFilter\Admin |
| מידע תפעולי | Applications and Services Logs\Microsoft\Windows\UnifiedWriteFilter\Operational |
18. Restart אוטומטי כאשר ה-Overlay גבוה
בעמדה ציבורית שעובדת שעות רבות ניתן להפעיל Scheduled Task שבודק את צריכת ה-Overlay. מומלץ להתריע למשתמש לפני Restart כדי למנוע אובדן עבודה.
$Namespace = "root\standardcimv2\embedded"
$Overlay = Get-CimInstance `
-Namespace $Namespace `
-ClassName UWF_Overlay
$OverlayConfig = Get-CimInstance `
-Namespace $Namespace `
-ClassName UWF_OverlayConfig |
Where-Object { $_.CurrentSession -eq $true }
if ($OverlayConfig.MaximumSize -le 0) {
exit 0
}
$Percent = ($Overlay.OverlayConsumption / $OverlayConfig.MaximumSize) * 100
if ($Percent -ge 90) {
msg.exe * "המחשב יבצע אתחול בעוד 60 שניות לצורך ניקוי סביבת UWF. שמרו את העבודה."
Start-Sleep -Seconds 60
uwfmgr.exe filter restart
}
19. Troubleshooting
המחשב נהיה איטי או תוכנות מתחילות להחזיר שגיאות כתיבה
בדקו Overlay Consumption ו-Available Space. כאשר ה-Overlay מתקרב למקסימום, Windows יכול להחזיר שגיאת חוסר מקום לפעולות כתיבה והתחנה יכולה להפוך לאיטית או לא מגיבה.
uwfmgr.exe overlay get-consumption
uwfmgr.exe overlay get-availablespace
uwfmgr.exe overlay get-config
תוכנה שהתקנתי נעלמה אחרי Restart
בדקו אם UWF היה Enabled ב-Current Session בזמן ההתקנה. הפקודה filter disable משפיעה רק לאחר Restart.
uwfmgr.exe get-config
Trust Relationship מול Active Directory נכשל
וודאו ש-PersistDomainSecretKey מופעל ל-Next Session. אל תחריגו MACHINE.ACC ידנית.
Get-CimInstance `
-Namespace "root\standardcimv2\embedded" `
-ClassName UWF_RegistryFilter |
Select-Object CurrentSession, PersistDomainSecretKey
Test-ComputerSecureChannel -Verbose
Windows Update לא מתקדם
כאשר UWF פעיל, Windows Update מנוהל אחרת. השתמשו ב-Servicing Mode במקום לנסות לשמר את כל SoftwareDistribution.
uwfmgr.exe servicing get-config
uwfmgr.exe servicing enable
uwfmgr.exe filter restart
Servicing נתקע או לא נכנס אוטומטית
וודאו שלכל המשתמשים המקומיים יש סיסמה, שאין חשבון שהוגדר ידנית בשם UWF-Servicing, ובדקו את Event Viewer של UnifiedWriteFilter. בצעו Pilot על Build זהה לפני הפצה.
20. Recovery ויציאה ממצב תקול
כיבוי UWF לאתחול הבא
uwfmgr.exe filter disable
uwfmgr.exe get-config
uwfmgr.exe filter restart
Reset Settings
קיימת פקודה שמחזירה את הגדרות UWF למצב המקורי שנשמר בזמן ההתקנה. השתמשו בה רק כאשר אתם מבינים את ההשלכות ויש לכם דרך לשחזר את תצורת התחנה.
uwfmgr.exe filter reset-settings
21. Persistent Overlay
Persistent Overlay מאפשר לשמור את תוכן ה-Overlay גם לאחר Restart עד שמחליטים לאפס אותו. Microsoft מגדירה מצב זה כניסיוני וממליצה לבצע בדיקות יסודיות לפני Deployment רחב.
uwfmgr.exe overlay set-persistent on
איפוס Persistent Overlay באתחול הבא
uwfmgr.exe overlay reset-persistentstate on
22. HORM, Hibernate Once Resume Many
HORM הוא תרחיש מתקדם שבו Windows תמיד חוזר מתמונת Hibernation שהוכנה מראש. הוא מתאים למכשירים ייעודיים שבהם חשוב Resume מהיר למצב קבוע.
powercfg.exe /h on
uwfmgr.exe filter enable
uwfmgr.exe volume protect all
uwfmgr.exe filter restart
uwfmgr.exe get-config
uwfmgr.exe filter enable-horm
shutdown.exe /h
23. Golden Image, Sysprep ופריסה
בסביבה עם עשרות עמדות מומלץ לבנות Reference PC אחד, לבדוק אותו לעומק ורק לאחר מכן לשכפל. אל תבנו לכל תחנה תצורת UWF שונה ידנית.
- התקנת Windows והדרייברים.
- Windows Update מלא.
- התקנת תוכנות.
- הגדרת אבטחה, דפדפן, מדפסות וקיוסק.
- Activation.
- בדיקת UWF על תחנת Pilot.
- כיבוי UWF לפני Capture ו-Sysprep.
- Sysprep לפי מודל הפריסה.
- Capture או Clone.
- לאחר Deployment, אימות זהות התחנה, Domain ו-UWF.
24. Checklist לפני מסירת תחנה
- Windows מופעל.
- UWF Supported Edition.
- Feature מותקן.
- Overlay Type נכון.
- Overlay Size נבדק ב-Pilot.
- Warning ו-Critical Thresholds מוגדרים.
- Volume הנכון מוגן.
- אין Exclusions רחבים ללא צורך.
- Defender נשמר ומעדכן חתימות.
- PersistDomainSecretKey מופעל אם התחנה בדומיין.
- Wi-Fi, Wired ו-802.1X נבדקו אם רלוונטי.
- Time Zone נשמר אם צריך.
- Servicing Mode נבדק.
- Event Logs נגישים לטכנאי.
- Restart יזום או מדיניות ניטור מוגדרים.
- בדיקת קובץ זמני בוצעה לאחר Restart.
- תהליך Recovery מתועד.
25. Cheat Sheet לפקודות UWF
uwfmgr.exe get-config
uwfmgr.exe filter enable
uwfmgr.exe filter disable
uwfmgr.exe filter restart
uwfmgr.exe volume get-config all
uwfmgr.exe overlay get-config
uwfmgr.exe overlay get-consumption
uwfmgr.exe overlay get-availablespace
uwfmgr.exe file get-exclusions all
uwfmgr.exe registry get-exclusions
uwfmgr.exe servicing get-config
uwfmgr.exe filter reset-settings
26. מחולל סקריפט UWF אינטראקטיבי
בחרו את מאפייני התחנה. המחולל יפיק PowerShell שמבצע בדיקות מקדימות, מתקין את הרכיב במידת הצורך, מונע שינוי Overlay כאשר UWF פעיל ב-Current Session, מגדיר את החריגות שבחרתם ומציג בדיקות אימות.
Overlay והגנה
סביבה ארגונית
עדכונים
אוטומציה
חריגות מותאמות אישית
# הסקריפט יופיע כאן
27. מקורות מקצועיים
הפקודות והעקרונות במדריך מבוססים על Microsoft Learn. מומלץ לבדוק את התיעוד מחדש לפני Deployment גדול, במיוחד לאחר Feature Update של Windows.
- Unified Write Filter overview
- uwfmgr.exe reference
- UWF Overlay
- Common write filter exclusions
- Microsoft Defender support
- Service UWF-protected devices
- UWF troubleshooting
- HORM
- UWF_RegistryFilter
- UWF_OverlayConfig
- Windows Update Agent, IUpdateSession
- Microsoft Edge Update policies
- Google Chrome Enterprise, Manage Chrome updates