从数组重建注册表项

时间:2016-01-24 05:16:22

标签: arrays powershell split

我正在尝试获取变量,将其拆分然后重建它,以便我可以迭代地使用Test-Path。我不确定是否有可能。到目前为止我的基本形式的代码看起来像这样,我遇到的麻烦是重建注册表路径。

$Key = "HKCU:\SOFTWARE\MyKey\Test"
$SplitKey = $Key -split "\\"
#Write-Host $SplitKey.Length
$i = 0
do {
    if ($i -gt 0) {
        $x = $i - 1
        $sk = $SplitKey[$x] + "\" + $SplitKey[$i] + "\"
        Write-Host $sk
    } else {
        $sk = $SplitKey[$i] + "\"
        Write-Host $sk
    }
    $i++
} until ($i -ge $SplitKey.Length)

密钥的第一部分正是按照我想要的方式重建。我的计划是将Test-Path合并到循环中,如果New-Item失败,则需要Test-Path

任何人都可以帮助循环并逐步重建$SplitKey数组吗?

1 个答案:

答案 0 :(得分:1)

这就是导致问题的原因:

$x = $i - 1
$sk = $SplitKey[$x] + "\" + $SplitKey[$i] + "\"

您只需从上一个数组元素和当前数组元素创建$sk,其基本上如下:

Original string: HKCU:\SOFTWARE\MyKey\Test

1st iteration:   HKCU:\
2nd iteration:   HKCU:\SOFTWARE\
3rd iteration:         SOFTWARE\MyKey\
4th iteration:                  MyKey\Test\

你真正想要的是将当前数组元素连接到之前的所有内容,即连接到$sk的当前值:

$sk += "\" + $SplitKey[$i]

或者您可以将数组元素连接到当前索引:

$sk = $SplitKey[0..$i] -join '\'

话虽如此,我个人更喜欢递归算法来创建路径。从完整路径遍历到最长的现有路径,然后在从递归调用返回时下降时创建缺少的文件夹:

function New-Key([string]$Path) {
  $drive  = Split-Path $Path -Qualifier
  $parent = try { Split-Path $Path -NoQualifier | Split-Path -Parent } catch {}

  if (-not (Test-Path -LiteralPath $Path)) {
    New-Key (Join-Path $drive $parent)
    New-Item -Type Directory -Path $Path
  }
}