WDS+MDT网络启动自动部署windows(二十一)MDT 最常见重装备份用户数据,重装系统。
简介
我们已经实现了MDT这么多功能,尽可能覆盖了各种环境,各种情况。
但是最重要的用户数据备份,然后格盘全新安装则仍未涉及。
需要考虑一下如何自动备份用户数据,并格盘重装了。
似乎只有自定义脚本一条路可走了。
备份
要将用户数据,备份到nas上去,nas执行定时任务来删除过期数据。
这个脚本用什么写呢?vbs?wsf?powershell?
备份用户目录,users,不是单独的用户的目录,是所有用户的目录。
备份除系统盘外的所有盘。
也不知道python编译成exe,能否在这个PE下运行。
反正我还不知道python如何获取MDT环境变量,现在都是凑着wsf,引入vbs,来获取oenv
凑活写了个powershell脚本,可以备份了。
不备份系统,只备份非系统安装分区,先评估一下所有非系统分区总使用量,是否超过最大的磁盘。
不超过,就复制所有分区到samba共享盘。
剩下的就可以标准安装了。恢复么。再写吧。
貌似以计算机名来设置目录不太好啊,恢复的时候如果计算机名改了怎么办?
下一版再更新吧,预计下一版要考虑单硬盘的情况,如果使用数据大于单硬盘容量-100G,也要提示停止备份。
function Get-TotalNonSystemDrivesUsedSpaceGB { $systemDrive = $emv:systemDrive $noSystemDrives = Get-PSDrive -PSProvider FileSystem | Where-Object { $_.Root -ne "$($systemDrive):\" -and $_.Used -ne $null } $totalUsedSpaceBytes = 0 foreach ($drive in $noSystemDrives) { $totalUsedSpaceBytes += $drive.Used } $totalUsedSpaceGB = $totalUsedSpaceBytes return $totalUsedSpaceGB } function Get-LargestDiskSpaceGB { $disks = Get-Disk | Where-Object { $_.OperationalStatus -eq 'Online' } Write-Host $disks.Count if ($disks.Count -eq 0 ) { Write-Warning "No online disks found." return } $largestDisk = $disks | Sort-Object -Property Size -Descending | Select-Object -First 1 $largestDiskSizeGB = [Math]::Round($largestDisk.Size, 2) return $largestDiskSizeGB } function Copy_Diretctory { param([string]$from, [string]$to) $FileList = Get-ChildItem "$from" -Recurse $Total = $FileList.count $Position = 0 foreach ($File in $FileList) { $Filename = $File.Fullname.replace($from, '') $DestinationFile = ($to + "\" + $Filename) Write-Progress -Activity "从[$from]复制到[$to]" -PercentComplete (($Position / $Total) * 100) Write-Host $File.FullName Write-Host $DestinationFile Copy-Item $File.FullName -Destination $DestinationFile $position++ } } function Check_Copy { $username = "JACK\mdt" $password = "pass@1234" $networkSharePath = "\\wds2022\udshare$" $mainBackFolder = "Backup" $systemDrive = $env:SystemDrive $computerName = $env:COMPUTERNAME $mapperdDrive = "Z" $password = ConvertTo-SecureString -String $password -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential($username, $password) # New-PSDrive -Name "Public" -PSProvider FileSystem -r "\\wds2022\udshare$\Backup $drives = Get-WmiObject -Class Win32_LogicalDisk New-PSDrive -Name $mapperdDrive -Persist -PSProvider FileSystem -Root $networkSharePath -Credential $credential -Scope Global Net use Write-Host $drivers foreach ($drive in $drives) { $driveID = $drive.DeviceID $driveLetter = $drive.DeviceID.remove(1, 1) $isSystemDrive = $driveID -eq $systemDrive if (-not $isSystemDrive) { $sourceFolder = "$($driveID)\" Write-Host $sourceFolder $destinationFolder = "$mapperdDrive" + ":\$mainBackFolder\$computerName\$driveLetter" if (-not (Test-Path $destinationFolder)) { New-Item -Path $destinationFolder -ItemType Directory -Force } Copy_Diretctory $sourceFolder $destinationFolder Write-Host "已将 $driveID 的文件复制到 $destinationFolder " } } Remove-PSDrive -Name $mapperdDrive } function MainFunction { $usedSpaceGB = Get-TotalNonSystemDrivesUsedSpaceGB $diskSpaceGB = Get-LargestDiskSpaceGB if ($diskSpaceGB -gt $usedSpaceGB) { Check_Copy } else { Write-Host "磁盘使用率超限,请删除一些多余无用文件" } } MainFunction
恢复
如果用户原来是双盘多分区,那么有没有可能所有的备份数据,使用一个最大的备份盘仍然无法装下呢?
似乎恢复需要更高级语言的程序来实现了。凑活用powershell实现了备份,评估所有使用的数据是否大于最大的备份盘。