给定为参数时,仅取字符串/数组中的第一个值

时间:2019-07-17 12:10:33

标签: powershell outlook

我创建了一个包含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的输出作为参数复制/粘贴时,效果很好。

2 个答案:

答案 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即可。