我们正在尝试制定一条规则,如果邮件主题中包含 XXXXX,则将其移至垃圾邮件文件夹。
我已授予我的用户对服务器上所有邮箱的完全访问权限。
我已确认可以针对用户单独创建规则
问题是该命令对某些用户有效,但对其他用户无效。同样,该命令为某些用户创建规则的多个副本,但对其他用户无效。这似乎没有任何规律。
这是我的命令
[PS] C:\Windows\system32>get-mailbox -organizationalunit "supernova.local/Active Users" -resultsize unlimited| foreach {
new-inboxrule -name "Spam Move" -mailbox kerry -MoveToFolder "kerry:\Junk E-Mail" -SubjectContainsWords "[Spam:" -StopP
rocessingRules $true -confirm:$false -force }
当您为个人用户执行此操作时(在本例中为“Kerry”),这里是输出。
Pipeline not executed because a pipeline is already executing. Pipelines cannot be executed concurrently.
+ CategoryInfo : OperationStopped: (Microsoft.Power...tHelperRunspace:ExecutionCmdletHelperRunspace) [],
PSInvalidOperationException
+ FullyQualifiedErrorId : RemotePipelineExecutionFailed
Name Enabled Priority RuleIdentity
---- ------- -------- ------------
Spam Move True 1 13037078695330709505
Spam Move True 1 13109136289368637441
Spam Move True 1 13181193883406565377
当为多个用户将“Kerry”替换为 $($_.Alias) 时,它只对某些用户有效。其他用户会获得规则的两份或更多份副本,而其他用户则完全得不到它......
很奇怪。
我在这里可能遗漏了什么?
答案1
第一个错误是因为 PowerShell 隐式远程处理不支持管道 ForEach。您必须分配给一个变量,然后执行 ForEach In,如下所示:
$MBs = Get-Mailbox -OrganizationalUnit "supernova.local/Active Users" -ResultSize Unlimited
ForEach($MB in $MBs)
{
New-InboxRule -Name "Spam Move" -Mailbox $MB -MoveToFolder "kerry:\Junk E-Mail" `
-SubjectContainsWords "[Spam:" -StopProcessingRules $true -Confirm:$false -Force
}
我看到的第二个问题是您在命令中指定了 -Mailbox on,但这应该来自管道。在上面的例子中,由于它在 ForEach 中,因此引用迭代变量 $MB。我猜您在 -MoveToFolder 中指定的文件夹 ID 也必须不同,可能类似于$($MB.SamAccountName)
:\Junk E-Mail`。您可能需要对其中的一些进行修改。
请记住,我偶然发现了这个帖子,因为我自己在使用 New-InboxRule 时遇到了麻烦,所以它可能仍然无法工作。由于这些其他问题,我无法测试这一点。话虽如此,我在这里指出的一切都是一般语法,无论如何都应该适用。
让我知道事情的后续...