Windows Server 2025 / How to Restore Files from Windows Server Backup
Select the required backup time and items, then first restore files to a separate location. Verify content and permissions before replacing a live path, where an immediate overwrite could discard valid changes made after the backup.
Distinguish the backup version from the current file
This lab assumes D:\BackupLab\sample.txt was backed up to E: with contents backup version A and a recorded hash. Check the actual server, source, and destination if your setup differs.
- Inspect the backup time and version on E:.
- Verify that the file existed then and was included.
- Record current file contents and hash.
- Choose a new empty per-run folder under D:\RestoreLab.
Change only this lab file to version B to demonstrate recovery without deleting operational data:
'backup version B' | Set-Content -LiteralPath 'D:\BackupLab\sample.txt' -Encoding UTF8 Get-Content -LiteralPath 'D:\BackupLab\sample.txt' wbadmin get versions -backupTarget:E:
Choose a separate target in the recovery wizard
- In Windows Server Backup, select Recover.
- Choose the relevant local or other backup location on E:.
- Select the needed date and time, not automatically the latest version after a deletion.
- Choose Files and folders and locate sample.txt.
- Choose another location and the new RestoreLab run folder.
- Review collision handling and ACL restoration, then recover.
Choices vary by backup source and item type. This is individual-file recovery, not a whole-volume overwrite or domain-controller restore.
Use the actual version identifier in the command alternative
If not already restoring through the GUI, run this elevated example. Copy the version identifier exactly from your own output. See wbadmin recovery options:
$backupVersion = Read-Host 'Version identifier shown by wbadmin get versions'
$restoreDirectory = Join-Path 'D:\RestoreLab' ((Get-Date -Format 'yyyyMMdd-HHmmss') + '-' + ([guid]::NewGuid().ToString('N').Substring(0,6)))
New-Item -ItemType Directory -Path $restoreDirectory -Force | Out-Null
wbadmin get items "-version:$backupVersion" -backupTarget:E:
wbadmin start recovery "-version:$backupVersion" -itemType:File -items:D:\BackupLab\sample.txt "-recoveryTarget:$restoreDirectory" -backupTarget:E: -overwrite:CreateCopy
$restoreDirectory
Inspect get items before proceeding. The example creates a new destination and uses CreateCopy while retaining confirmation prompts. Those safeguards do not replace checking the actual source and target displayed before recovery.
Compare contents, hash, and permissions
Locate the restored file inside the actual output folder; recovery can reproduce subdirectories. If using the GUI, set $restoreDirectory to its real new destination:
Get-ChildItem -LiteralPath $restoreDirectory -File -Recurse Get-ChildItem -LiteralPath $restoreDirectory -File -Recurse | Get-FileHash -Algorithm SHA256 Get-Content -LiteralPath 'D:\BackupLab\sample.txt'
The recovered file should contain A while the original remains B. Compare the restored hash with the recorded pre-backup A hash, not with B. Inspect owner and ACL through Get-Acl or Properties → Security. Restored ACLs can differ from destination inheritance; verify both intended access and unintended exposure.
Replace a live file only after validation
Preserve the current file before deciding to deploy a verified recovery copy. Check file locks, application behavior, and active user work. Replacing the original is a separate, higher-impact decision from an isolated restore test.
If a backup is missing, inspect destination, computer name, catalog, and version. version-query guidance explains conditions such as -machine for another computer’s backups. Ensure encryption keys and credentials are available at recovery time.
Clean up only this test’s new restore folder after preserving evidence. Retain the backup and record the version, file, hashes, ACL result, and elapsed time.




