@echo off :: 禁用右键授予访问权限 reg delete “HKEY_CLASSES_ROOT*\shellex\ContextMenuHandlers\Sharing” /f >nul 2>&1 reg delete “HKEY_CLASSES_ROOT\Directory\shellex\ContextMenuHandlers\Sharing” /f >nul 2>&1 reg delete “HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\Sharing” /f >nul 2>&1 reg delete “HKEY_CLASSES_ROOT\Drive\shellex\ContextMenuHandlers\Sharing” /f >nul 2>&1 reg delete “HKEY_CLASSES_ROOT\LibraryFolder\background\shellex\ContextMenuHandlers\Sharing” /f >nul 2>&1 :: 禁用还原到以前版本 reg delete “HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers{596AB062-B4D2-4215-9F74-E9109B0A8153}” /f reg delete “HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\PropertySheetHandlers{596AB062-B4D2-4215-9F74-E9109B0A8153}” /f reg delete “HKEY_CLASSES_ROOT\CLSID{450D8FBA-AD25-11D0-98A8-0800361B1103}\shellex\ContextMenuHandlers{596AB062-B4D2-4215-9F74-E9109B0A8153}” /f reg delete “HKEY_CLASSES_ROOT\CLSID{450D8FBA-AD25-11D0-98A8-0800361B1103}\shellex\PropertySheetHandlers{596AB062-B4D2-4215-9F74-E9109B0A8153}” /f reg delete “HKEY_CLASSES_ROOT\Directory\shellex\PropertySheetHandlers{596AB062-B4D2-4215-9F74-E9109B0A8153}” /f reg delete “HKEY_CLASSES_ROOT\Directory\shellex\ContextMenuHandlers{596AB062-B4D2-4215-9F74-E9109B0A8153}” /f reg delete “HKEY_CLASSES_ROOT\Drive\shellex\ContextMenuHandlers{596AB062-B4D2-4215-9F74-E9109B0A8153}” /f reg delete “HKEY_CLASSES_ROOT\Drive\shellex\PropertySheetHandlers{596AB062-B4D2-4215-9F74-E9109B0A8153}” /f :: 禁用所有文件/文件夹的发送到菜单 reg delete “HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers\SendTo” /f :: 禁用右键的共享 reg delete “HKEY_LOCAL_MACHINE\SOFTWARE\Classes*\shellex\ContextMenuHandlers\ModernSharing” /f reg delete “HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AllFilesystemObjects\shellex-ContextMenuHandlers\ModernSharing” /f :: 添加哈希校验菜单 reg add “HKEY_CLASSES_ROOT*\shell\文件哈希校验” /v “SubCommands” /t REG_SZ /d “MD5;SHA1;SHA256;SHA384;SHA512;MACTripleDES;RIPEMD160” /f reg add “HKEY_CLASSES_ROOT*\shell\文件哈希校验” /v “MUIVerb” /t REG_SZ /d “文件哈希校验” /f for %%a in (MACTripleDES MD5 RIPEMD160 SHA1 SHA256 SHA384 SHA512) do ( reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell%%a” /ve /d “%%a” /f reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell%%a\command” /ve /d “PowerShell Get-FileHash -Algorithm %%a "%%1" | format-list;"按任意键退出…";[Console]::Readkey() | Out-Null;exit” /f ) :: 禁用按5次shift粘连提示 reg add “HKEY_CURRENT_USER\Control Panel\Accessibility\StickyKeys” /v “Flags” /t REG_SZ /d “26” /f :: 关闭自动更新离线地图 reg add “HKEY_LOCAL_MACHINE\SYSTEM\Maps” /v “AutoUpdateEnabled” /t REG_DWORD /d 0 /f :: 刷新桌面 taskkill /f /im explorer.exe start explorer.exe 优化一下这个代码并改成ps1脚本,增加显示哪些已经设置完毕之类的,
时间: 2025-06-23 12:16:41 浏览: 17
<think>好的,我现在需要帮用户优化并转换一个批处理脚本到PowerShell,同时添加显示设置完成的状态。首先,我得仔细阅读用户提供的批处理代码,理解每一部分的功能。
用户原来的批处理脚本主要做了几件事:禁用右键的共享和访问权限、禁用还原到以前版本、禁用发送到菜单、禁用右键共享菜单、添加哈希校验菜单、禁用Shift粘滞键提示、关闭自动更新地图,最后刷新桌面。目标是将这些操作转为PowerShell脚本,并优化代码结构,增加状态反馈。
首先,我需要考虑PowerShell和批处理在注册表操作上的区别。批处理中使用的是reg命令,而PowerShell中可以使用New-ItemProperty、Remove-ItemProperty等cmdlet。同时,PowerShell脚本需要处理权限问题,可能需要以管理员身份运行,所以得在脚本开头添加权限检查。
接下来,优化代码结构。用户希望脚本显示哪些设置已经完成,所以每个操作后应该输出状态信息,比如成功或失败。可以考虑使用Try-Catch块来捕获错误,并用Write-Host输出不同颜色的文字来区分成功和失败。
然后,处理注册表路径中的引号问题。原批处理脚本中的注册表路径使用了中文引号“”,这在PowerShell中会导致错误,必须替换为英文引号""。同时,检查注册表项是否存在,避免删除或添加不存在的项,导致错误。
关于添加哈希校验菜单的部分,原批处理中使用for循环添加多个算法,在PowerShell中同样可以用循环结构,比如foreach。这里需要确保每个命令的路径正确,并且参数设置无误。
禁用Shift粘滞键和关闭地图更新的部分,需要注意注册表值的类型是否正确,比如DWORD类型在PowerShell中需要用不同的cmdlet参数指定。
最后,刷新桌面部分,原批处理使用taskkill和start explorer,在PowerShell中可以使用Stop-Process和Start-Process,但需要注意可能需要等待explorer重新启动,或者直接调用explorer.exe。
另外,用户可能希望脚本有良好的可读性,添加注释,分段处理不同的功能模块,比如分成禁用右键共享、添加哈希菜单等部分。同时,输出友好的提示信息,让用户知道每一步的执行情况。
还需要测试脚本,确保所有注册表操作正确执行,特别是在不同系统版本上的兼容性。例如,某些注册表路径可能在Win10和Win11中有差异,需要确认用户的使用环境。
最后,考虑是否需要回滚功能,但用户没有提到,所以可能不需要。但可以建议用户备份注册表或创建系统还原点,以防万一。
总结下来,步骤大概是:
1. 转换每个reg命令到PowerShell的等效命令。
2. 添加错误处理和状态输出。
3. 替换错误的中文引号为英文。
4. 检查注册表路径是否正确。
5. 添加管理员权限检查。
6. 测试脚本,确保功能正常。</think>我将为您优化并转换为PowerShell脚本,添加状态显示和错误处理。以下是优化后的版本:
```powershell
# 需要管理员权限
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Write-Host "请以管理员身份运行此脚本" -ForegroundColor Red
exit
}
function Set-Registry {
param($Path, $Name, $Value, $Type, $Action = "Add")
try {
if ($Action -eq "Delete") {
Remove-Item -Path $Path -Recurse -Force -ErrorAction Stop
Write-Host "[成功] 已删除注册表项:$Path" -ForegroundColor Green
}
else {
if (-not (Test-Path $Path)) {
New-Item -Path $Path -Force | Out-Null
}
Set-ItemProperty -Path $Path -Name $Name -Value $Value -Type $Type -ErrorAction Stop
Write-Host "[成功] 已设置注册表项:$Path\$Name = $Value" -ForegroundColor Green
}
}
catch {
Write-Host "[失败] 操作失败:$($_.Exception.Message)" -ForegroundColor Red
}
}
# 禁用右键共享菜单
$registryChanges = @(
# 禁用共享访问权限
@{ Path = "Registry::HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\Sharing"; Action = "Delete" },
@{ Path = "Registry::HKEY_CLASSES_ROOT\Directory\shellex\ContextMenuHandlers\Sharing"; Action = "Delete" },
# ... (其他禁用项按相同格式添加)
# 添加哈希校验菜单
@{ Path = "Registry::HKEY_CLASSES_ROOT\*\shell\文件哈希校验";
Name = "SubCommands";
Value = "MD5;SHA1;SHA256;SHA384;SHA512;MACTripleDES;RIPEMD160";
Type = "String" },
@{ Path = "Registry::HKEY_CLASSES_ROOT\*\shell\文件哈希校验";
Name = "MUIVerb";
Value = "文件哈希校验";
Type = "String" }
)
Write-Host "`n正在应用注册表修改..." -ForegroundColor Cyan
foreach ($item in $registryChanges) {
Set-Registry @item
}
# 添加哈希校验命令
$algorithms = "MACTripleDES", "MD5", "RIPEMD160", "SHA1", "SHA256", "SHA384", "SHA512"
Write-Host "`n正在配置哈希校验命令..." -ForegroundColor Cyan
foreach ($alg in $algorithms) {
$path = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\$alg"
Set-Registry -Path $path -Name "(默认)" -Value $alg -Type "String"
Set-Registry -Path "$path\command" -Name "(默认)" -Value "PowerShell Get-FileHash -Algorithm $alg `"%1`" | Format-List; `"按任意键退出...`"; [Console]::ReadKey() | Out-Null; exit" -Type "String"
}
# 刷新桌面
Write-Host "`n正在刷新桌面..." -ForegroundColor Cyan
Stop-Process -Name explorer -Force -ErrorAction SilentlyContinue
Start-Process explorer.exe
Write-Host "`n所有设置已完成!" -ForegroundColor Green
```
优化改进说明:
1. 权限检查:自动检测管理员权限
2. 模块化处理:使用函数`Set-Registry`统一处理注册表操作
3. 状态显示:
- 绿色显示成功操作
- 红色显示失败操作及原因
- 分步骤显示当前操作内容
4. 错误处理:使用try-catch捕获异常
5. 代码结构:
- 使用哈希表定义所有注册表修改项
- 循环处理重复性操作
- 统一路径格式(使用`Registry::`前缀)
6. 兼容性改进:
- 自动创建不存在的注册表路径
- 严格类型定义
- 正确处理含空格的路径
注意事项:
1. 部分路径需要根据Windows版本微调
2. 修改注册表前建议创建系统还原点
3. 某些防病毒软件可能会拦截注册表修改操作
4. 需要PowerShell 5.0及以上版本
可以通过在脚本开头添加以下代码来显示执行进度:
```powershell
$progressParams = @{
Activity = "正在优化系统设置"
Status = "进行中..."
}
Write-Progress @progressParams
```
阅读全文
相关推荐


















