![Powershell 无法写入注册表项 HKLM:\Software\Policies\Microsoft\Windows Defender\Real-Time Protection](https://linux22.com/image/1635421/Powershell%20%E6%97%A0%E6%B3%95%E5%86%99%E5%85%A5%E6%B3%A8%E5%86%8C%E8%A1%A8%E9%A1%B9%20HKLM%3A%5CSoftware%5CPolicies%5CMicrosoft%5CWindows%20Defender%5CReal-Time%20Protection.png)
我想使用 Powershell 添加一个注册表项来设置一个组策略,以禁用 Windows Defender 中的 OnAccessProtection,以下操作不会以管理员身份运行而产生任何错误,但不执行任何操作:
-
$registryPath = "HKLM:\Software\Policies\Microsoft\Windows Defender\Real-Time Protection" $Name = "DisableOnAccessProtection" $value = "1" if(!(Test-Path $registryPath)) { New-Item -Path $registryPath -Force | Out-Null } New-ItemProperty -Path $registryPath -Name $name -Value $value -PropertyType DWORD -Force
- 当我打开
RegEdit
尝试添加时DWORD
,收到错误:Cannot create value: Error writing to the registry
因此,即使是管理员,我在这里也没有访问权限;我该如何设置注册表值?
答案1
观察:在全新安装的 Windows 10 上进行测试,无需以管理员身份运行对相关注册表项的权限进行任何编辑。
1.如果不存在 Reg 键,您可以创建
2.设置值后Type
改为PropertyType
3.您还可以检查键是否存在,以及值是否存在1
4.如果键存在并且值等于1
,则您的脚本无需执行任何操作!
$registryPath='HKLM:\Software\Policies\Microsoft\Windows Defender\Real-Time Protection'
$Name ="DisableOnAccessProtection"; $Value= '1'
if (!(Test-Path $registryPath)) {
New-Item -Path $registryPath -Force | Out-Null
Set-ItemProperty -Path $registryPath -Name $Name -Value $Value -Type DWORD -Force | Out-Null
} elseif ((Get-ItemProperty $registryPath).$Name -ne $Value) {
Set-ItemProperty -Path $registryPath -Name $Name -Value $Value -Type DWORD -Force | Out-Null
} else {
Write-Host nothing to do!
}