在PowerShell中设置新注册表项和所有属性

在PowerShell中设置新注册表项和所有属性,powershell,Powershell,我正在尝试测试32位和64位,然后根据环境创建一个或两个新密钥 如果可以的话,我希望代码保持简单,如果可以的话,我只需要一次性设置类型、名称、值等。在线查看似乎可以完成,但每当我尝试运行它时,都会收到提示输入一个类型: 寻求帮助/见解 这似乎很简单,以下是我的开始: $RegLocation1 = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_ALLOW_USER32_EX

我正在尝试测试32位和64位,然后根据环境创建一个或两个新密钥

如果可以的话,我希望代码保持简单,如果可以的话,我只需要一次性设置类型、名称、值等。在线查看似乎可以完成,但每当我尝试运行它时,都会收到提示输入一个类型:

寻求帮助/见解

这似乎很简单,以下是我的开始:

$RegLocation1 = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_ALLOW_USER32_EXCEPTION_HANDLER_HARDENING\"
$RegLocation2 = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_ALLOW_USER32_EXCEPTION_HANDLER_HARDENING"

If ([System.Environment]::Is32BitProcess) {
    New-Item -Path $RegLocation1 -Force
    New-ItemProperty -Path $RegLocation1 -Name "iexplore.exe" -Value 1 -ErrorAction SilentlyContinue -PropertyType DWord 
}Else {
    New-Item -Path $RegLocation1 -Force
    New-ItemProperty -Path $RegLocation1 -Name "iexplore.exe" -Value 1 -ErrorAction SilentlyContinue -PropertyType DWord 
    New-Item -Path $RegLocation2 -Force
    New-ItemProperty -Path $RegLocation2 -Name "iexplore.exe" -Value 1 -ErrorAction SilentlyContinue -PropertyType DWord
}

如果要测试当前进程是32位还是64位,则需要测试
[System.Environment]::Is64Process


另一方面,如果要根据操作系统是32位还是64位添加
WOW6432节点
键,则需要测试
[system.Environment]::is64位操作系统

为了避免太多的代码重复,请将关键路径存储在一个数组中,并根据测试添加
Wow6432Node
节点,然后在循环中对其进行迭代:

$RegLocations = @("HKLM:\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_ALLOW_USER32_EXCEPTION_HANDLER_HARDENING")

if([System.Environment]::Is64BitProcess){
    $RegLocations += "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_ALLOW_USER32_EXCEPTION_HANDLER_HARDENING"
}

foreach($Key in $RegLocations)
{
    if(-not(Test-Path $Key)){
        New-Item -Path $Key -Force
    }
    New-ItemProperty -Path $Key -Name "iexplore.exe" -Value 1 -ErrorAction SilentlyContinue -PropertyType DWord 
}

HKEY\U LOCAL\U MACHINE
->
注册表::HKEY\U LOCAL\U MACHINE
HKLM:
[System.Environment]::IS32位进程
->
![System.Environment]::is64位进程
如果这些新注册表项不存在,脚本会创建它们吗?我看到了64位的测试,同时删除了32位的测试,这是有意义的,但是没有任何东西可以创建一个新的密钥。我错过了什么?好吧,我想我明白我的沟通失误了FEATURE_ALLOW_USER32_EXCEPTION_HANDLER_加固是我需要创建的新密钥。然后我需要在键内生成一个双字(1代表32位)(2代表64位),并将双字值设置为1。这有用吗?也谢谢你的帮助@如何计算如果键已经存在,它将被覆盖(包括所有子键和现有值),这要归功于
-Force
开关。如果它还不存在,它将被简单地创建出来——所以是的,它完全按照你的想法来做describe@HowToComputer添加了一个条件以测试密钥是否已存在再次感谢您。我被分配给$Key数组的内容卡住了,但是你的数组马上就工作了。SOLVED@HowToComputer
foreach
循环的运行次数与
$RegLocations
数组中的项目相同,每次都将数组中的下一个值分配给
$Key
变量(在本例中,该变量是字符串,而不是数组)