我有注册表项,我需要从中检索字符串的名称。
例如:HKLM:\Software\MyRegKey
中有四个字符串值。字符串A,字符串B,字符串C和字符串D。我使用以下Powershell收集此信息
Get-Item -Path HKLM:\Software\MyRegKey | select-object -expandproperty`
property
以上内容将返回以下内容:
A
B
C
D
我需要做的是输出格式不同的格式。简而言之,我需要它仅返回一个值,然后将其放入foreach语句中以迭代并返回其余值。
这可能吗?
Get-Item -Path HKLM:\Software\MyRegKey | select-object -expandproperty`
property
Get-Item -Path HKLM:\Software\MyRegKey | select-object -expandproperty`
property
以上内容将返回以下内容:
A
B
C
D
所需的输出:
A
然后运行一个foreach语句以分别收集每个值。
答案 0 :(得分:0)
如果您在这样的字符串中有多个值:
$MyRegKey = "A B C D"
$MyRegKey.Count
1
您想逐步浏览它们,可以像这样在“空格”字符上进行分割。
$MyRegKey = $MyRegKey.Split()
$MyRegKey.Count
4
这为您提供了一些您可以使用For-EachObject
cmdlet进行迭代的东西。
$MyRegKey
A
B
C
D
更新
想象一下,像这样制作一个新的注册表项:
New-Item HKCU:\Software\MyRegKey
New-ItemProperty -Path HKCU:\Software\MyRegKey -Name MyRegValue -PropertyType String -Value "A B C D"
这将创建以下密钥:
我可以使用以下代码检索其值:
$MyRegKey = Get-ItemProperty -Path HKCU:\Software\MyRegKey -Name MyRegValue
$MyRegKey.MyRegValue.Split()
A
B
C
D
我们可以遍历像这样的值:
MyRegKey.MyRegValue.Split() | ForEach-Object { "Property $i of MyRegKey = $_" ;$i++}
Property 0 of MyRegKey = A
Property 1 of MyRegKey = B
Property 2 of MyRegKey = C
Property 3 of MyRegKey = D
我们可以使用此代码快速创建以下注册表项:
'A','B','C','D' | % {
New-ItemProperty -Path HKCU:\Software\MyRegKey -Name $_ -PropertyType String -Value "A B C D"
}
为我们提供这些值:
要在ForEach-Object
循环中对此进行操作,我们可以使用以下代码:
(Get-Item -Path HKCU:\Software\MyRegKey).Property | ForEach-Object {
Write-Host "The key $_ has a value of $((Get-ItemProperty HKCU:\Software\MyRegKey -Name $_).$_)"
}
这将提供以下输出:
The key A has a value of A B C D
The key B has a value of A B C D
The key C has a value of A B C D
The key D has a value of A B C D
答案 1 :(得分:0)
以下是我的结论,由于变量$i
仅包含一个值,因此似乎可以正常工作。 $t = get-item -Path HKLM:\Software\MyRegKey | select-object -expandproperty property
foreach($i in $t){$i}
通过更改我执行foreach循环的方式来工作。我错误地将变量传递给了foreach循环。