将值写入数组中的注册表项

时间:2015-01-20 17:08:58

标签: arrays powershell registry

尝试编写一个脚本,该脚本将采用预先解析的数组并将这些值添加到注册表项中。以下工作,但不会在值之间放置逗号。

$apps = @("whatApp.exe","thatApp.exe","thisAapp.exe")
set-location HKLM:\
foreach($app in $apps){
    set-itemproperty -path Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Citrix\wfshell\TWI -Name logoffCheckSysModulestest -Value $apps
}

另外,我如何检查这些应用程序是否已经在该密钥中并继续使用下一个值而不是第二次添加它?

1 个答案:

答案 0 :(得分:2)

你可以做到这一点的其他方法,但这将是一个简单易读的方法。

$regPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Citrix\wfshell\TWI"
$regName = "logoffCheckSysModulestest"

$apps = @("whatApp.exe","thatApp.exe","thisAapp.exe")

$values = (Get-ItemProperty -Path $regPath | Select -ExpandProperty $regName).Split(",")

$apps | ForEach-Object{
    If($values -notcontains $_){
        $values += $_
    }
}

Set-ItemProperty -Path $regPath -Name $regName -Value ($values -join ",")

首先,我们在注册表中获取该键名的当前值,并将其拆分为数组。然后我们将该数组与$apps中的元素列表进行比较。如果缺少其中一个元素,则将其附加到$values arrray。

然后应该使用尚未存在的所有新条目更新$values数组。 -Join然后返回并将更改写回注册表。

代替ForEach-Object循环,您也可以使用Compare-Object来完成工作

$apps = @("whatApp.exe","thatApp.exe","thisAapp.exe")

$values = (Get-ItemProperty -Path $regPath | Select -ExpandProperty $regName).Split(",")

Set-ItemProperty -Path $regPath -Name $regName -Value ((Compare-Object $apps $values -IncludeEqual -PassThru) -join ",")
相关问题