首页 > 解决方案 > 如何使用变量在 New-DynamicDistributionGroup 上设置 -RecipientFilter

问题描述

我想通过 csv 导入创建一些动态分发列表。我希望 -RecipientFilter 使用 csv 数据中的值。所以,我正在努力解决语法并且没有运气。我的实际过滤器将有几个部分,但我什至无法让这个简单的部分工作。

通过变量设置 -Name 可以正常工作。

$dgName = "AAC"
$dgCode1 = "QQ"

New-DynamicDistributionGroup -Name $dgName  -RecipientFilter { ExtensionCustomAttribute1 -eq 'QQ'  }

设置 -RecipientFilter 表达式不会。

New-DynamicDistributionGroup -Name $dgName  -RecipientFilter { ExtensionCustomAttribute1 -eq $dgCode1  }

正如我最终'$dgCode1'在过滤器中一样。

我试过调用表达式:

$myCommand = "New-DynamicDistributionGroup -Name $dgName -RecipientFilter { ExtensionCustomAttribute1 -eq $dgCode1 }"

Invoke-Expression $myCommand

但这会引发"Cannot bind parameter 'RecipientFilter' to the target. Exception setting "RecipientFilter": "Invalid filter syntax. For a description of the filter parameter syntax see the command help."

我已经阅读了我能找到的所有内容,但找不到这样做的方法。我什至尝试了字符串连接:

$myCommand = "New-DynamicDistributionGroup -Name $dgName  -RecipientFilter { ExtensionCustomAttribute1 -eq " + $dgCode1 + " }"

但这仍然引发了“无效的过滤器语法”错误。

请问这怎么做?我对 PowerShell 很陌生。

谢谢,默里

编辑:感谢@AdminOfThings

一个更完整的示例,可以复制我试图实现的目标(为了便于阅读,线喙):

$dgName = "Class2-3Parents"
$dgCode1 = "P"
$dgSubCode1 = "Class2"
$dgSubCode2 = "Class3"

New-DynamicDistributionGroup -Name $dgName -RecipientFilter
"ExtensionCustomAttribute1 -eq '$dgCode1' -and ( ExtensionCustomAttribute2 -eq '$dgSubCode1' -or ExtensionCustomAttribute2 -eq '$dgSubCode2' ) "

导致过滤器:

((ExtensionCustomAttribute1 -eq 'P') -and (((ExtensionCustomAttribute2 -eq 'Class2') -or (ExtensionCustomAttribute2 -eq 'Class3')))) ...

非常感谢。默里

标签: powershell

解决方案


这似乎是对过滤器使用脚本块表示法的问题。所有 Microsoft 帮助页面都显示将脚本块 ( {}) 用于 OPATH 过滤器(由 Exchange 命令使用)和 Active Directory 过滤器(由 ActiveDirectory 模块使用),这是不正确的做法,因为它们不是脚本块。下面会有更好的结果。

New-DynamicDistributionGroup -Name $dgName -RecipientFilter "ExtensionCustomAttribute1 -eq '$dgCode1'"

某些脚本块将有自己的范围。该作用域对在作用域之外创建的变量一无所知。


推荐阅读