You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将数组元素传递给带Filter参数的PowerShell命令

操作可行性说明

该需求完全可以实现,报错来自两处语法使用错误:

  • 你使用了Bash风格的变量赋值语法,PowerShell中所有变量必须以$开头,且直接用类Bash的$()捕获命令输出时,不会自动按行分割为独立数组元素,可能导致遍历逻辑失效。
  • Get-AzureADApplication的-Filter参数遵循OData筛选规则,字符串类型的匹配值必须用单引号包裹,你直接插入变量的写法会生成无边界的筛选语句,触发位置语法错误。
修正后的可执行代码
# 强制将az cli输出按行分割为PowerShell数组,变量名前补全$符号
$accounts = @(az ad sp list --show-mine --query [].appDisplayName -o tsv)

foreach ($myApp in $accounts) {
    # 给筛选的字符串值包裹单引号,符合OData语法要求
    Get-AzureADApplication -Filter "DisplayName eq '$myApp'"
}
特殊场景兼容

如果你的服务主体显示名称本身包含单引号字符,需要提前对变量做转义处理,将名称内的单引号替换为两个连续单引号即可,避免筛选语句语法断裂:

$accounts = @(az ad sp list --show-mine --query [].appDisplayName -o tsv)
foreach ($myApp in $accounts) {
    $escapedAppName = $myApp -replace "'", "''"
    Get-AzureADApplication -Filter "DisplayName eq '$escapedAppName'"
}
校验方法

执行代码前可以先验证数组赋值是否正确:

  • 运行$accounts.Count,如果返回值和你名下拥有的服务主体数量一致,说明数组生成正常
  • 如果返回值为1,说明输出没有被正确分割,上述代码中套在@()内的强制数组写法已经可以解决这个问题

内容的提问来源于stack exchange,提问作者Jona187

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 09:48:15