azure-powershell - 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}
关于为什么这不起作用以及如何使它起作用的任何提示?
解决方案
我通过其他适合我的渠道收到的说明:
在您之前的代码中,您将生成一个字符串,然后在您的过滤条件中有一个脚本块,您有一个只返回该字符串的脚本块(而不是将其作为代码运行)。字符串不为空,因此条件始终为真。
下面的符号将从指定的字符串创建一个脚本块,因此您可以直接将其传递给参数,第三行不需要花括号(它们用于定义脚本块,但我们已经有了)。
$Filter = [ScriptBlock]::Create("(`$_.ResourceGroup -eq `"MyRG`")")
$state = Get-AzPolicyState
$stateFiltered = $state | Where-Object $Filter
推荐阅读
- javascript - Equivalent version of SHA256 ComputeHash (from C#) for React Native/JS
- c# - Entity Framework 相关实体生成同一张表的不必要的连接
- jquery - 如何使功能接连工作(包含ajax请求)
- node.js - 我正在尝试将一个频道专用于仅发送图片和 reddit 链接
- javascript - 类型错误:songs.map 不是函数
- css - clip-path: ellipse 属性如何工作?
- javascript - jQuery preventDefault onclick 函数
- spring - Kubernetes nodeport 外部 ip 不可访问
- c++ - 使用 HTTP2 发出 TLSv1.2 请求
- python - Pandas - 检查行是否包含特定字符串并在新列中返回结果