首页 > 解决方案 > PowerShell:在 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}

关于为什么这不起作用以及如何使它起作用的任何提示?

标签: azure-powershell

解决方案


我通过其他适合我的渠道收到的说明:

在您之前的代码中,您将生成一个字符串,然后在您的过滤条件中有一个脚本块,您有一个只返回该字符串的脚本块(而不是将其作为代码运行)。字符串不为空,因此条件始终为真。

下面的符号将从指定的字符串创建一个脚本块,因此您可以直接将其传递给参数,第三行不需要花括号(它们用于定义脚本块,但我们已经有了)。

$Filter = [ScriptBlock]::Create("(`$_.ResourceGroup -eq `"MyRG`")")
$state = Get-AzPolicyState
$stateFiltered = $state | Where-Object $Filter

推荐阅读