Powershell - 使用For Each将变量附加到数组

时间:2018-04-17 17:12:37

标签: arrays list powershell

我目前正在尝试将注册表项添加到多个注册表文件夹中。但是,因为您不能通过组策略使用通配符注册表项,而是使用ps1脚本添加这些键。基本上我想在这个位置添加一个十六进制值为00 00 00 00的REG_Binary键:HKCU:\ SOFTWARE \ Microsoft \ Office \ 15.0 \ Outlook \ Profiles \ outlook of outlook profile \ c02ebc5353d9cd11975200aa004ae40e。

我有一个代码,可以使用一行PS在一个配置文件中添加此密钥。这是:

$path = "HKCU:\SOFTWARE\Microsoft\Office\15.0\Outlook\Profiles\Name of Outlook Profile\c02ebc5353d9cd11975200aa004ae40e"

New-ItemProperty -Path $path -Name 00030354 -PropertyType Binary -Value ([byte[]](0x00,0x00,0x00,0x00)) -Force

这非常有效,但我需要在profiles目录中的所有文件夹上执行此操作。 我可以通过以下命令找到此字符串中的所有配置文件名称:

$Profilelist = get-childItem "HKCU:\Software\Microsoft\Office\15.0\Outlook\Profiles\*" | select name

如何添加值" \ c02ebc5353d9cd11975200aa004ae40e"到这个数组/列表的每一行?

添加后,我将能够使用a为每个命令添加密钥。

如果有人知道更好的方式我会接受其他想法!

提前致谢! :)

2 个答案:

答案 0 :(得分:1)

IMO使用计算属性的最简单方法:

$Profilelist = get-childItem "HKCU:\Software\Microsoft\Office\15.0\Outlook\Profiles\*" | select @{n='extendedname'; e={'{0}\c02ebc5353d9cd11975200aa004ae40e' -f $_.Name.Replace('HKEY_CURRENT_USER\', 'HKCU:\'}}

答案 1 :(得分:1)

尝试:

Get-ChildItem -Path "HKCU:\SOFTWARE\Microsoft\Office\15.0\Outlook\Profiles" | ForEach-Object {
    $path = Join-Path $_.Name "c02ebc5353d9cd11975200aa004ae40e"
    #Create key if missing
    if(-not (Test-Path $path)) { New-Item -ItemType RegistryKey -Path $path }
    New-ItemProperty -Path $path -Name 00030354 -PropertyType Binary -Value ([byte[]](0x00,0x00,0x00,0x00)) -Force
}