注册表编辑器中的Windows Update清理

时间:2016-11-10 18:10:07

标签: windows powershell registry

在磁盘清理工具中,有一个Windows Update清理选项。如果我想通过以下方法设置它,它位于注册表中?

Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Temporary Files' -Name StateFlags0012 -Type DWORD -Value 2

如果我/sageset:#我看到了设置Windows Update清理的选项,但我一直无法在regedit中找到它。

2 个答案:

答案 0 :(得分:0)

通过从命令行运行磁盘清理管理器的可执行文件-Cleanmgr.exe,您可以声明清理配置文件。这些配置文件由可用处理程序的子集组成,并具有唯一的数字标签。这允许您在不同时间自动运行不同的处理程序集。 命令行" cleanmgr.exe / sageset:nnnn",其中nnnn是唯一的数字标签,显示一个UI,允许您选择要包含在该配置文件中的处理程序。除了定义配置文件之外,sageset参数还会将名为StateFlagsnnnn的值(其中nnnn是您在参数中使用的标签)写入VolumeCaches下的所有子项。这些条目有两种可能的数据值。 0:运行此配置文件时不要运行此处理程序。 2:运行此配置文件时包含此处理程序。 例如,假设命令行" cleanmgr.exe / sageset:1234"运行。在显示的UI中,用户选择“已下载的程序文件”,但不选择“Internet临时文件”。然后将以下值写入注册表。 HKEY_LOCAL_MACHINE    软件       微软          视窗             当前版本                探险者                   VolumeCaches                      下载的程序文件                         StateFlags1234 = 0x00000002                      Internet缓存文件                         StateFlags1234 = 0x00000000 命令行" cleanmgr.exe / sagerun:nnnn",其中nnnn的值与使用sageset参数声明的标签匹配,运行在该配置文件中选择的所有处理程序。 当磁盘清理正常运行时,通用StateFlags值将写入注册表。此值仅存储上次作为用户选项呈现的处理程序的状态(已检查或未选中)。这些条目有两种可能的数据值。 0:未选择处理程序。 1:处理程序已被选中。

同样Automate process of Disk Cleanup cleanmgr.exe without user intervention也讨论了这一点。

谢谢,蒂姆。

答案 1 :(得分:0)

你可以得到一个可用的VolumeCache列表,并设置为所有Stateflag:

# Create reg keys
$StateFlags= "Stateflags0099"
$VolCaches = gci "HKLM:\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches"
foreach($VC in $VolCaches)
{
    New-ItemProperty -Path "$($VC.PSPath)" -Name $StateFlags -Value 2 -Type DWORD -Force | Out-Null
}

但你无法控制清理中包含哪些内容。使用此脚本,您可以单独编辑(缩短)列表。

#Requires -RunAsAdministrator

$SageSet = "StateFlags0099"
$Base = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\"
$Locations= @(
    "Active Setup Temp Folders"
    "BranchCache"
    "Downloaded Program Files"
    "GameNewsFiles"
    "GameStatisticsFiles"
    "GameUpdateFiles"
    "Internet Cache Files"
    "Memory Dump Files"
    "Offline Pages Files"
    "Old ChkDsk Files"
    "Previous Installations"
    "Recycle Bin"
    "Service Pack Cleanup"
    "Setup Log Files"
    "System error memory dump files"
    "System error minidump files"
    "Temporary Files"
    "Temporary Setup Files"
    "Temporary Sync Files"
    "Thumbnail Cache"
    "Update Cleanup"
    "Upgrade Discarded Files"
    "User file versions"
    "Windows Defender"
    "Windows Error Reporting Archive Files"
    "Windows Error Reporting Queue Files"
    "Windows Error Reporting System Archive Files"
    "Windows Error Reporting System Queue Files"
    "Windows ESD installation files"
    "Windows Upgrade Log Files"
)

ForEach($Location in $Locations) {
    Set-ItemProperty -Path $($Base+$Location) -Name $SageSet -Type DWORD -Value 2 -ea silentlycontinue | Out-Null
}

# do the cleanup . have to convert the SageSet number
$Args = "/sagerun:$([string]([int]$SageSet.Substring($SageSet.Length-4)))"
Start-Process -Wait "$env:SystemRoot\System32\cleanmgr.exe" -ArgumentList $Args -WindowStyle Hidden

# Removw the Stateflags
ForEach($Location in $Locations)
{
    Remove-ItemProperty -Path $($Base+$Location) -Name $SageSet -Force -ea silentlycontinue | Out-Null
}

希望这有帮助