验证PSCustomObject中的每个值- Powershell

yzckvree  于 2023-05-07  发布在  Shell
关注(0)|答案(1)|浏览(108)

我在做一些可能很容易做的东西时遇到了点麻烦,但我找不到方法。
我试图使一个验证器PSCustomObject来验证多个输入从整个程序,所以在最后,它启用了一个按钮(有wpf接口)。
现在我使用一个带有多个条件的IF语句(一个条件对应于验证器对象中的每个属性)来检查是否所有验证都为真,但是在脚本中占用了相当长的时间。
下面是我现在拥有的一个例子:

PSCustomObject]$verifier = @{
  'Item1' = $false
  'Item2' = $false
  'Item3' = $false
  'Item4' = $false
  'Item5' = $false
}

*code where users modifies the input that alters the items in the pscustomobject*

if(($verifier.Item1) -and ($verifier.Item2) -and ($verifier.Item3) -and ($verifier.Item4) -and ($verifier.Item5)){
  *enable the button*
}
else{
  *graphically show the user the wrong/missing input*
}

有没有什么方法可以让这个IF语句更简单?尝试使用foreach,但它同时验证所有值,而不是评估每个值。我希望条件在所有值都为真时返回真,在任何值为假时返回假,并恢复那些为假的值。
提前感谢您的帮助!

ccrfmcuu

ccrfmcuu1#

有没有什么方法可以让这个IF语句更简单?
当然,使用containment操作符:

$verifier = [PSCustomObject]@{
    'Item1' = $true
    'Item2' = $true
    'Item3' = $true
    'Item4' = $true
    'Item5' = $true
}

if($verifier.PSObject.Properties.Value -notcontains $false) {
    'enable the button'
}
else {
    'graphically show the user the wrong/missing input'
}

您可以通过PSObject内部成员访问所有属性的值。

注意:$verifier = [PSCustomObject]@{[PSCustomObject] $verifier = @{有明显区别,前者返回自定义对象,后者返回哈希表。[pscustomobject]类型加速器仅在强制转换为哈希表时有效,而在约束变量时无效。

如果你想使用hashtable而不是PSCustomObject,那么从它调用.Values属性:

$verifier = @{
    'Item1' = $true
    'Item2' = $true
    'Item3' = $true
    'Item4' = $true
    'Item5' = $true
}

if($verifier.Values -notcontains $false) {
    'enable the button'
}
else {
    'graphically show the user the wrong/missing input'
}

相关问题