如何实现PowerShell脚本循环:检查注册表键值并执行reg文件
PowerShell循环检查注册表并执行.reg文件
需求说明
作为PowerShell新手,需要实现以下功能:
- 循环检查注册表路径
HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles\{0406A191-78E7-4590-9C4D-AA69EE7B5073}下的Description值 - 若该值不等于
"SOS-246",则运行C:\Temp\win11-right-click.reg文件 - 脚本持续循环执行,每次循环间隔15秒
原错误代码
$loop = start-sleep -s 15 $v1 = Get-ItemPropertyValue -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles\{0406A191-78E7-4590-9C4D-AA69EE7B5073}' -Name Description If ($v1 -ne "SOS-246") { Do {Start-Process -NoNewWindow -FilePath "C:\Temp\win11-right-click.reg" } else { Continue $loop }
修正后的代码
# 无限循环执行 while ($true) { try { # 获取注册表中的Description值 $v1 = Get-ItemPropertyValue -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles\{0406A191-78E7-4590-9C4D-AA69EE7B5073}' -Name Description -ErrorAction Stop # 判断值是否不等于目标字符串 if ($v1 -ne "SOS-246") { # 调用reg.exe导入注册表文件,确保操作可控 Start-Process -FilePath "reg.exe" -ArgumentList "import", "C:\Temp\win11-right-click.reg" -NoNewWindow -Wait Write-Host "已执行注册表文件导入" } else { Write-Host "注册表值符合要求,跳过操作" } } catch { Write-Host "读取注册表失败:$_" } # 每次循环间隔15秒 Start-Sleep -Seconds 15 }
关键说明
- 用
while ($true)创建标准的无限循环结构,替代原代码中错误的循环逻辑 - 直接启动
.reg文件会调用系统默认程序,改用reg.exe import更可控,还能等待导入完成 - 添加
try/catch块处理注册表读取失败的情况(比如路径不存在、权限不足) - 将15秒延迟放在循环末尾,确保每次循环完成后都有固定间隔
内容的提问来源于stack exchange,提问作者Sam Kamran
相关产品推荐
相关产品推荐

