我最近的任务是创建一个PowerShell脚本,将一堆特定设置应用于Windows 10系统,其中许多(但不是全部)需要修改注册表,而且我遇到了一些问题。相当有趣的行为。
这是我一直在使用的最小测试用例:
function set-regkey ($key, $name, $type, $value) {
if (!(test-path $key)) {
new-item -path $key -force
}
new-itemproperty -path $key -name $name -value $value -propertytype $type -force
}
set-regkey "HKCU:\SOFTWARE\Microsoft\TabletTip\1.7" "EnableAutocorrection" DWORD 0
set-regkey "HKCU:\SOFTWARE\Microsoft\TabletTip\1.7" "EnableSpellChecking" DWORD 0
此代码段应关闭Windows设置应用程序的“键入”部分中的“拼写检查”和“自动更正”功能。通过手动将其输入Powershell窗口逐行执行,它就是这样做的。我可以手动切换它们,手动运行测试用例,然后切换它们。但是,当通过右键单击脚本并选择' Run with Powershell'作为同一用户从脚本运行时,它不起作用。我仍然可以从New-ItemProperty
来电获得完全相同的可见输出,但设置完全没有变化,即使在退出并重新登录或重新启动系统后也是如此。
当尝试使用reg add
命令而不是New-ItemProperty
来修改完全相同的键时,我得到完全相同的结果,它在手动逐行运行时有效,但在运行时失败作为剧本的一部分。
到目前为止,我发现的所有Microsoft TechNet文档都没有帮助,我开始怀疑我是否看到了注册表虚拟化的影响,但我可以&#39 ;弄清楚为什么或如何防止它。