gpt4 book ai didi

powershell - IF 语句中的动态条件参数?

转载 作者:行者123 更新时间:2023-12-01 04:56:23 28 4
gpt4 key购买 nike

我想知道在 powershell 中使用 IF 语句时如何或是否可以使用动态条件参数?

本质上,条件列表可以是 1 对多,我将不得不构建某种过滤器,但不确定如何在 powershell 中实现这一点,或者如果可能的话。

我创建了一个我想要做的小例子,显然在一个真实的例子中,参数将是真正动态的。

$include = @("*dynamic*", "*text*")

$testString = "This is a string of text where I want to match dynamic conditional statements"

$filter = ""

foreach ($i in $include) {
$filter = $([string]::Format('{0} -like "{1}"', $filter, $i))
}

write-host $filter

#What I want it to do in pseduo code
#if ($testString matches $filter) { DoSomething }

#What it should literally do based on above example
if ($testString -like "*dynamic*" -and $testString -like "*text*") { write-host $testString }

这就是我让它为遇到问题并需要更清晰示例的其他人工作的方式。我基本上在包含参数的数组的内容上使用 foreach 循环构建了该语句。如果它是第一个参数,则它包含初始 IF 语句,并且在循环完成后,它会添加到右括号以及如果满足 IF 条件要运行的代码。
$include = @("*dynamic*", "*text*")

$testString = "This is a string of text where I want to match dynamic conditional statements"

$varnametocompare = '$testString'

$x = 0
$filter = ""

foreach ($i in $include) {
if ($x -eq 0) {
$filter = $([string]::Format('if({0} -like "{1}"', $varnametocompare, $i))
$x++
}
else {
$filter = $([string]::Format('{0} -or {1} -like "{2}"', $filter, $varnametocompare, $i))
}
}
$filter = $([string]::Format('{0}) {{ Write-Host {1} }}', $filter, $varnametocompare))

Invoke-Expression $filter

最佳答案

PowerShell 基本上已经通过 Where-Object 做到了这一点。 ,所以你可以使用它。
[ScriptBlock] s基本上都是[string] s 已经。

if ($testString | Where-Object $filter) { <# ... #> }

其实我现在意识到这不会奏效。但是你可以使用 Invoke-Expression反而:
if ((Invoke-Expression $filter)) { <# ... #> }

关于powershell - IF 语句中的动态条件参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36900510/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com