PowerShell注册表查询与ACL设置问题:批量修复Windows更新故障
解决PowerShell注册表路径格式混乱及前置空格问题
问题原因
你遇到的后续行前置空格问题,是因为使用Out-String转换注册表路径时,该命令会自动添加格式缩进和换行符,导致生成的路径字符串包含多余空格。
修正后的代码
直接构造干净的注册表路径,无需使用Out-String:
$Key = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\" # 筛选目标注册表项 $Keys = Get-ChildItem -Path $Key -Recurse | Where-Object { $_.Name -like "*Microsoft-Windows-*Enablement*" -or $_.Name -like "*KB4562830*" } # 生成无多余空格的注册表路径数组 $KeysACLs = foreach ($keyItem in $Keys) { "Registry::$($keyItem.Name)" }
验证结果
执行以下命令检查路径格式,确保每个路径无前置空格:
$KeysACLs | ForEach-Object { Write-Host "注册表路径: '$_'" }
后续流程适配
基于修正后的$KeysACLs数组,可完成所有权变更、DISM修复等流程:
foreach ($regPath in $KeysACLs) { # 保存原始所有者(用于后续还原) $acl = Get-ACL -Path $regPath $originalOwner = $acl.Owner # 变更所有权为管理员组 $newOwner = New-Object System.Security.Principal.NTAccount("BUILTIN\Administrators") $acl.SetOwner($newOwner) Set-ACL -Path $regPath -AclObject $acl # 执行DISM修复操作 DISM /Online /Cleanup-Image /RestoreHealth # 还原注册表项原始所有权 $acl.SetOwner($originalOwner) Set-ACL -Path $regPath -AclObject $acl } # 安装22H2启用包和SSU wusa.exe "路径\22H2启用包.msu" /quiet /norestart wusa.exe "路径\SSU更新包.msu" /quiet /norestart
内容的提问来源于stack exchange,提问作者Jerry
相关产品推荐
相关产品推荐

