我有下面的脚本从特定键中读取注册表值(不计其功)。我的最终目标是仅在数组Match中的所有值都匹配时返回TRUE。但是我不太理解
$array = @()
$regval = Get-Item -Path HKLM:\SOFTWARE\Runner\Event
$regval.GetValueNames() |
ForEach-Object {
$name = $_
$rv.Value
$array += New-Object psobject -Property @{'Value' = $rv.Value }
}
$Matchvalue = 'A'
Foreach ($v in $array){
if ($v -match $Matchvalue){
$true
}
}
更新:我刚刚尝试过一次,看来我的数组是空的。因此欢迎您提出任何提示。
答案 0 :(得分:1)
如何?
$regkey = Get-Item HKLM:\SOFTWARE\Runner\Event
$matchPattern = 'A'
$values = $regkey.GetValueNames()
$matchingValues = $values | Where { $regkey.GetValue($_) -match $matchPattern }
# this is going to be true or false
$values.Count -eq $matchingValues.Count
请注意,默认情况下,Powershell不区分大小写。因此$matchPattern = 'A'
和$matchPattern = 'a'
的行为将相同。
答案 1 :(得分:0)
这是我尝试做类似Haskell的“全部”的事情。
function foldr ($sb, $accum, $list) {
if ($list.count -eq 0) { $accum }
else { & $sb $list[0] (foldr $sb $accum $list[1..$list.length]) }
}
function and ($list) {
foldr { $args[0] -and $args[1] } $true $list
}
function all ($list, $sb) {
and ( $list | foreach $sb )
}
all 1,1,1 { $_ -eq 1 }
True
all 1,2,1 { $_ -eq 1 }
False