如果所有值都相同,Powershell仅返回TRUE

时间:2020-10-18 22:46:40

标签: powershell

我有下面的脚本从特定键中读取注册表值(不计其功)。我的最终目标是仅在数组Match中的所有值都匹配时返回TRUE。但是我不太理解

Example Registry Entry

$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
}
}

更新:我刚刚尝试过一次,看来我的数组是空的。因此欢迎您提出任何提示。

2 个答案:

答案 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
相关问题