|
|
"WinSxSDirsToCopy": {
"amd64": [
"Catalogs",
"FileMaps",
"Fusion",
"InstallTemp",
"Manifests",
"amd64_microsoft.vc80.crt_1fc8b3b9a1e18e3b_*",
"amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_*",
"amd64_microsoft.windows.c..-controls.resources_6595b64144ccf1df_*_zh-cn_*",
"amd64_microsoft.windows.common-controls_6595b64144ccf1df_*",
"amd64_microsoft.windows.gdiplus_6595b64144ccf1df_*",
"amd64_microsoft.windows.i..utomation.proxystub_6595b64144ccf1df_*",
"amd64_microsoft.windows.isolationautomation_6595b64144ccf1df*",
"amd64_microsoft-windows-s..stack-inetsrv-extra_31bf3856ad364e35_*",
"amd64_microsoft-windows-s..stack-msg.resources_31bf3856ad364e35_*",
"amd64_microsoft-windows-s..stack-termsrv-extra_31bf3856ad364e35_*",
"amd64_microsoft-windows-servicingstack_31bf3856ad364e35_*",
"amd64_microsoft-windows-servicingstack-inetsrv_31bf3856ad364e35_*",
"amd64_microsoft-windows-servicingstack-msg_31bf3856ad364e35_*",
"amd64_microsoft-windows-servicingstack-onecore_31bf3856ad364e35_*",
"x86_microsoft.windows.common-controls_6595b64144ccf1df_*",
"x86_microsoft.windows.gdiplus_6595b64144ccf1df_*",
"x86_microsoft.windows.i..utomation.proxystub_6595b64144ccf1df_*",
"x86_microsoft.windows.isolationautomation_6595b64144ccf1df_*",
"x86_microsoft-windows-s..ngstack-onecorebase_31bf3856ad364e35_*",
"x86_microsoft-windows-s..stack-termsrv-extra_31bf3856ad364e35_*",
"x86_microsoft-windows-servicingstack_31bf3856ad364e35_*",
"x86_microsoft-windows-servicingstack-inetsrv_*",
"x86_microsoft-windows-servicingstack-onecore_*",
"x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_*",
"x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_*",
"x86_microsoft.windows.c..-controls.resources_6595b64144ccf1df_*_zh-cn_*"
]
},# 精简 WinSxS 目录(修改版)
function Optimize-WinSxS {
param($ScratchDir, $Architecture)
$winDir = "$ScratchDir\Windows"
Write-Host "正在精简 WinSxS。这可能需要一段时间..." -ForegroundColor DarkYellow
$folderPath = Join-Path -Path $winDir -ChildPath "\WinSxS777"
$winsxsDirectory = "$winDir\WinSxS"
$destinationDirectory = "$winDir\WinSxS777"
New-Item -Path $folderPath -ItemType Directory | Out-Null
if ($Architecture -eq "amd64") {
# 从配置读取要保留的目录
$dirsToCopy = $Global:ScriptConfig.WinSxSDirsToCopy.amd64
Write-Host " 暂存保留组件到 $destinationDirectory 目录" -ForegroundColor Green
$dirsCount = 0
foreach ($dir in $dirsToCopy) {
$sourceDirs = Get-ChildItem -Path $winsxsDirectory -Filter $dir -Directory -ErrorAction SilentlyContinue
if ($sourceDirs) {
$sourceDirsCount = 0
foreach ($sourceDir in $sourceDirs) {
$destDir = Join-Path -Path $destinationDirectory -ChildPath $sourceDir.Name
Copy-Item -Path $sourceDir.FullName -Destination $destDir -Recurse -Force | Out-Null
if ($LASTEXITCODE -eq 0) {
$sourceDirsCount += 1
$dirsCount += 1
}
}
if ($sourceDirsCount -gt 0) {
Write-Host " ✓ $dir " -NoNewline -ForegroundColor DarkGreen
Write-Host " ($sourceDirsCount)" -ForegroundColor DarkGray
} else {
Write-Host " $dir" -ForegroundColor DarkGray
}
}
}
if ($dirsCount -gt 0) {
Write-Host " ✓ ($dirsCount) 目录" -ForegroundColor DarkGreen
}
}
# 删除原始 WinSxS 并重命名新目录
Write-Host " 移除 $winDir\WinSxS 目录" -ForegroundColor Green
Remove-Item -Path $winDir\WinSxS -Recurse -Force | Out-Null
Write-Host " 重命名 $winDir\WinSxS 目录" -ForegroundColor Green
Rename-Item -Path $winDir\WinSxS777 -NewName $winDir\WinSxS
Write-Host " "
} |
|