Sordum Net Makalesi :
Sağ tuş yeni menüsündeki Bit eşlem resmini kaldırın
Velociraptor | 16/08/2026 | Windows 11 | 6 yorum
https://www.sordum.net/81020/sag-tus-ye ... -kaldirin/
Burada anlatılanları adım adım yaptığımız da bizden 3-4 dk. kaybettirebiliyordu.Dedim ki kendi kendime neden bunu PowerSHELL ortamına havale etmiyorum. (betiksel otomasyon) Bu düşünceler içinde , bu anlatımı referans alarak aşağıdaki .ps1 betiğini kodsal tasarladım ve kendi sistemime birebir uyguladım,sonuç aşağıdaki gibidir.

KOD İÇERİĞİ ( Remove-BitmapFromNewMenu.ps1) :
Kod: Tümünü seç
<#
.SYNOPSIS
Removes/clears the "New > Bitmap image" display string from the Windows 11
right-click New menu (Turkish UI: "Bit eslem resmi"), which is regenerated
by the Microsoft Paint MSIX package via the MrtCache resource cache.
.DESCRIPTION
Manual removal via Regedit works (search HKCR\Local Settings\MrtCache for
a string value equal to the localized "Bitmap image" label and blank it
out), but the Paint app re-populates this cache whenever Microsoft Store
updates the package (roughly every 10-20 days). This script automates the
search-and-clear operation, backs up the affected registry branch first,
logs every change, and can optionally schedule itself to run automatically
every 2 weeks so the fix keeps reapplying without manual intervention.
.PARAMETER Force
Skip the confirmation prompt before clearing matched values.
.PARAMETER Silent
Skip the "restart Explorer now" prompt and restart it automatically.
Intended for unattended runs (e.g. from Task Scheduler).
.PARAMETER Schedule
Register a Scheduled Task that re-runs this script every 2 weeks with
-Force -Silent, so the fix reapplies itself automatically over time.
.PARAMETER Unschedule
Remove the Scheduled Task created by -Schedule.
.NOTES
Target key : HKCU:\Software\Classes\Local Settings\MrtCache
Scope : Current user only, no administrator rights required.
Effect : Explorer restart is required to see the New menu change.
.EXAMPLE
.\Remove-BitmapFromNewMenu.ps1
Interactive run: scans, shows matches, asks before clearing and before
restarting Explorer.
.EXAMPLE
.\Remove-BitmapFromNewMenu.ps1 -Force -Silent -Schedule
Clears matches immediately, restarts Explorer automatically, and installs
a recurring scheduled task so this keeps happening every 2 weeks.
#>
[CmdletBinding()]
param(
[switch]$Force,
[switch]$Silent,
[switch]$Schedule,
[switch]$Unschedule
)
$ErrorActionPreference = "Stop"
$TaskName = "RemoveBitmapFromNewMenu"
$ScriptPath = $MyInvocation.MyCommand.Path
$LogDir = Join-Path $env:USERPROFILE "Documents\BitmapNewMenuFix"
$LogFile = Join-Path $LogDir "removal-log.txt"
$BackupDir = Join-Path $LogDir "backups"
$MrtCacheKey = "HKCU:\Software\Classes\Local Settings\MrtCache"
function Write-Log {
param([string]$Message)
$line = "[{0}] {1}" -f (Get-Date -Format "yyyy-MM-dd HH:mm:ss"), $Message
Write-Host $line
Add-Content -Path $LogFile -Value $line
}
function Initialize-Environment {
if (-not (Test-Path $LogDir)) { New-Item -ItemType Directory -Path $LogDir -Force | Out-Null }
if (-not (Test-Path $BackupDir)) { New-Item -ItemType Directory -Path $BackupDir -Force | Out-Null }
}
function Backup-MrtCache {
if (-not (Test-Path $MrtCacheKey)) {
Write-Log "MrtCache key not found, nothing to back up."
return $false
}
$stamp = Get-Date -Format "yyyyMMdd_HHmmss"
$backupFile = Join-Path $BackupDir "MrtCache_$stamp.reg"
$regPath = "HKEY_CURRENT_USER\Software\Classes\Local Settings\MrtCache"
reg.exe export $regPath $backupFile /y | Out-Null
Write-Log "Backup created: $backupFile"
return $true
}
function Find-BitmapEntries {
$results = @()
if (-not (Test-Path $MrtCacheKey)) { return $results }
Get-ChildItem -Path $MrtCacheKey -Recurse -ErrorAction SilentlyContinue | ForEach-Object {
$key = $_.PSPath
if ($key -notlike "*Paint*") { return }
$props = Get-ItemProperty -Path $key -ErrorAction SilentlyContinue
if (-not $props) { return }
$props.PSObject.Properties |
Where-Object { $_.Name -notmatch "^PS(Path|ParentPath|ChildName|Drive|Provider)$" } |
ForEach-Object {
# "?" matches exactly one character, avoids hardcoding the
# Turkish "s with cedilla" letter in the source file.
if ($_.Value -is [string] -and $_.Value -like "Bit e?lem resmi") {
$results += [PSCustomObject]@{
KeyPath = $key
ValueName = $_.Name
OldValue = $_.Value
}
}
}
}
return $results
}
function Clear-BitmapEntries {
param([array]$Entries)
foreach ($entry in $Entries) {
Set-ItemProperty -Path $entry.KeyPath -Name $entry.ValueName -Value ""
Write-Log ("Cleared value '{0}' (was: '{1}') under {2}" -f $entry.ValueName, $entry.OldValue, $entry.KeyPath)
}
}
function Restart-Explorer {
Write-Log "Restarting Explorer to apply the change..."
Stop-Process -Name explorer -Force
Start-Sleep -Seconds 2
Start-Process explorer.exe
}
function Register-FixTask {
$action = "-NoProfile -ExecutionPolicy Bypass -File `"$ScriptPath`" -Force -Silent"
schtasks.exe /Create /TN $TaskName /TR "powershell.exe $action" /SC WEEKLY /MO 2 /ST 09:00 /RL LIMITED /F | Out-Null
Write-Log "Scheduled task '$TaskName' registered (runs every 2 weeks)."
}
function Unregister-FixTask {
schtasks.exe /Delete /TN $TaskName /F | Out-Null
Write-Log "Scheduled task '$TaskName' removed."
}
# --- Main ---
Initialize-Environment
if ($Unschedule) {
Unregister-FixTask
Read-Host "`nPress ENTER to exit."
exit
}
if ($Schedule) {
Register-FixTask
}
Write-Log "Scanning MrtCache for bitmap entries..."
# @() forces array context so a single match does not get unrolled into a
# scalar object, which would make $found.Count report blank/null.
$found = @(Find-BitmapEntries)
if ($found.Count -eq 0) {
Write-Log "No matching entries found. Nothing to do."
} else {
$suffix = "ies"
if ($found.Count -eq 1) { $suffix = "y" }
Write-Log ("Found {0} matching entr{1}:" -f $found.Count, $suffix)
$found | ForEach-Object { Write-Log (" - {0} => '{1}'" -f $_.KeyPath, $_.OldValue) }
$proceed = $Force
if (-not $proceed) {
$answer = Read-Host "Clear these values now? (Y/N)"
$proceed = ($answer -eq "Y" -or $answer -eq "y")
}
if ($proceed) {
Backup-MrtCache | Out-Null
Clear-BitmapEntries -Entries $found
$restart = $Silent
if (-not $restart) {
$answer = Read-Host "Restart Explorer now to apply the change? (Y/N)"
$restart = ($answer -eq "Y" -or $answer -eq "y")
}
if ($restart) { Restart-Explorer }
} else {
Write-Log "Operation cancelled by user."
}
}
Read-Host "`nPress ENTER to exit."






