PowerShell:在 where-object 中使用变量作为脚本块
PowerShell: Using variable as scriptblock in where-object
我正在编写一个脚本,尝试动态创建变量 $Filter 以在 Where-Object 中使用。
显然,这有效:
$state = Get-AzPolicyState
$stateFiltered = $state | Where-Object {$_.ResourceGroup -eq "MyRG"}
但是,当我使用变量时,过滤器不起作用并且 $stateFiltered 包含所有记录:
$Filter = "(`$_.ResourceGroup -eq `"MyRG`")"
$state = Get-AzPolicyState
$stateFiltered = $state | Where-Object {$Filter}
关于为什么这不起作用以及如何使它起作用的任何提示?
我通过其他适合我的渠道收到的解释:
在您之前的代码中,您将生成一个字符串,然后在您的过滤条件中有一个脚本块,您有一个脚本块只是 returns 该字符串(而不是 运行 它作为代码)。
该字符串不为空,因此条件始终为真。
下面的符号将从指定的字符串创建一个脚本块,所以你可以直接将它传递给参数,第三行不需要大括号(它们用于定义一个脚本块,但我们已经有了一个).
$Filter = [ScriptBlock]::Create("(`$_.ResourceGroup -eq `"MyRG`")")
$state = Get-AzPolicyState
$stateFiltered = $state | Where-Object $Filter
我正在编写一个脚本,尝试动态创建变量 $Filter 以在 Where-Object 中使用。
显然,这有效:
$state = Get-AzPolicyState
$stateFiltered = $state | Where-Object {$_.ResourceGroup -eq "MyRG"}
但是,当我使用变量时,过滤器不起作用并且 $stateFiltered 包含所有记录:
$Filter = "(`$_.ResourceGroup -eq `"MyRG`")"
$state = Get-AzPolicyState
$stateFiltered = $state | Where-Object {$Filter}
关于为什么这不起作用以及如何使它起作用的任何提示?
我通过其他适合我的渠道收到的解释:
在您之前的代码中,您将生成一个字符串,然后在您的过滤条件中有一个脚本块,您有一个脚本块只是 returns 该字符串(而不是 运行 它作为代码)。 该字符串不为空,因此条件始终为真。
下面的符号将从指定的字符串创建一个脚本块,所以你可以直接将它传递给参数,第三行不需要大括号(它们用于定义一个脚本块,但我们已经有了一个).
$Filter = [ScriptBlock]::Create("(`$_.ResourceGroup -eq `"MyRG`")")
$state = Get-AzPolicyState
$stateFiltered = $state | Where-Object $Filter