如何使用 powershell return 为用户交换所有通讯组

How to use powershell to return all exchange distribution groups for a user

我正在尝试使用 powershell 为特定用户提取 Office365 通讯组列表。当我为用户键入(或粘贴)捕获的 $DN 时,以下工作正常,但如果我捕获 $DN 并将其用作变量,则无法获得正确的结果。

这个有效:

$mailbox=get-Mailbox user@domain.com
$DN=$mailbox.DistinguishedName
$DLs=Get-DistributionGroup -ResultSize Unlimited -Filter {Members -like "CN=Lastname\, First M,OU=domain.onmicrosoft.com,OU=Microsoft Exchange Hosted Organizations,DC=NAMPR02A003,DC=prod,DC=outlook,DC=com"}

这些不:

$DLs=Get-DistributionGroup -ResultSize Unlimited -Filter {Members -like $DN}
$DLs=Get-DistributionGroup -ResultSize Unlimited -Filter {Members -like '$DN'}
$DLs=Get-DistributionGroup -ResultSize Unlimited -Filter {Members -like "$DN"}

谁能告诉我如何让 $DN 的变量在脚本中工作?

这就是你需要的:

$Mailbox=get-Mailbox user@domain.com
$DN=$mailbox.DistinguishedName
$Filter = "Members -like ""$DN"""
Get-DistributionGroup -ResultSize Unlimited -Filter $Filter

Get-DistributionGroup 不是 recognize/expand 位于 {ScriptBlock}

中的过滤器

您应该创建一个 $Filter 变量,该变量不在 {ScriptBlock} 中,但它在外部的 "Quotes" 和内部的 ""DoubleQuotes"" 中,以便变量扩展。

一行:

Get-DistributionGroup -ResultSize Unlimited -Filter "Members -like ""$((get-Mailbox NT_ID).DistinguishedName)""" | sort name

Avshalom 感谢这个很棒的脚本。

我添加这个是为了清理结果。只需将 "Domain" 替换为您公司的域名即可。

| Select-Object Name, @{label='PrimarySmtpAddress';expression={$_.PrimarySmtpAddress -replace '@domain.com'}}

注意:-filter {Members...} 可能在 get-distributiongroup 命令中被破坏。似乎不接受成员作为可过滤的 属性。 :(