我创建了一个包含AD中所有用户的数组列表。
$array = [System.Collections.ArrayList]::New()
Get-AzureADUser -All $true | ForEach-Object -Process {
if ($_.mail) {
$array.Add($_.mail)
}
}
然后我将数组转换为用逗号分隔的字符串
$array = $($array -join ",")
现在,如果我在另一个cmdlet(Outlook收件箱规则)中使用数组,则仅采用第一个值。
New-InboxRule -Name "New Rule" -Mailbox "John Doe" -MoveToFolder ":\Inbox" -SentTo $array
在Outlook中,我只能看到一个用户。
$array
的值和格式正确
Email,Email,Email,...
,当我手动将Write-Host $array
的输出作为参数复制/粘贴时,效果很好。
答案 0 :(得分:1)
根据documentation,参数-SentTo
需要一个数组,而不是逗号分隔的字符串。
将您的代码更改为以下内容:
$array = Get-AzureADUser -All $true | Where-Object { $_.mail }
New-InboxRule ... -SentTo $array
答案 1 :(得分:0)
如Ansgar Wiecher的helpful answer中所述,您应该将数组而不是逗号分隔的列表传递给-SentTo
参数。
但是,在测试时,我用Get-InboxRule
检查了此属性是否由邮箱的专有名称填充。如果我指定了电子邮件地址,那么它总是会给我带来错误(无论格式如何)。
您可以使用.propertyName
轻松地将要使用的属性提取为数组:
$array = (Get-Mailbox -ResultSize Unlimited).distinguishedname
New-InboxRule -Name "New Rule" -Mailbox $name -MoveToFolder ":\Inbox" -SentTo $array
注意:我不确定创建此规则的目的是什么,但是如果您要绕过“垃圾”,我强烈建议您使用New-TransportRule
cmdlet而不是创建用户级别的单独收件箱规则。
根据某些条件(发件人地址不一定是最好的,因为它很容易被欺骗)将SCL设置为-1即可。