【发布时间】:2015-12-10 21:09:45
【问题描述】:
我有一个脚本可以在 Exchange 命令行管理程序中设置 代表发送 权限,但是当您尝试使用它时它会失败,因为第一部分的输出太长并且截断超过 2 行.
我们要做的第一件事是从人员列表中构建我们的数组,并将它们放入一些变量中以传递:
function Add-Send ($mailbox, $target) {
#"Granting send on behalf for $mailbox to $target"
Set-Mailbox -Identity $mailbox -GrantSendOnBehalfTo @{ Add = $target }
}
我们传递一个很长的列表作为$target,邮箱名称是$mailbox,如果我们输出文本,我们会得到:
Set-Mailbox -Identity "mr.jeff" -GrantSendOnBehalfTo @{ Add = "alan.alanson", "bob.bobson", "steve.stevenson" }
一切都很好,但是如果输出中有超过N 个字符,那么我们会得到一个换行符:
Set-Mailbox -Identity "mr.jeff" -GrantSendOnBehalfTo @{ Add = "alan.alanson", "bob.bobson", "steve.stevenson", ...
..., "cath.cathdotir" }
当您使用超长输出运行此脚本时,命令会失败,因为应该传递给 CLI 的输出传递超过一行。 PowerShell 将每一行视为一个单独的命令,它们显然会因语法错误而失败。
我们的字符串是从我们这样构建的数组中输出的:
function Send-Array ($mailbox) {
$target = Get-Content ".\list\dpt1.txt"
$target += Get-Content ".\list\$mailbox.txt"
$target += Get-Content ".\list\dpt2.txt"
$target = $target | Select-Object -Unique
$separator = '", "'
$target= $target -replace '^|$','"' -join ','
Add-Send $mailbox $target
}
这为我们提供了一个包含如下字符串的数组:
"alan.alanson", "bob.bobson", "steve.stevenson"
从这里我不知所措,任何想法都将不胜感激。
显而易见的解决方案是一次传递一个名称,但由于每次使用 PowerShell 设置 代表发送 权限时,Exchange Server 都会遇到问题,它会擦除现有权限,因此您最终只会得到他最后一个被授予权限的人能够代表发送。
【问题讨论】:
-
不,显而易见的解决方案是不将 Add-Send 的输出写入屏幕 - 要么直接将其分配给变量,要么直接在此处执行
-
文本输出仅供我们测试,通常直接执行。我已经修改了原始帖子以更好地反映这一点。
-
嗨VPope,你检查过这个吗? mandie.net/2013/01/23/… 它似乎解决了您在尝试添加新权限(并保留现有权限)时遇到的具体问题。
-
通讯组的有趣使用我现在将研究它作为一个选项
标签: powershell exchange-server ems