遍历 Exchange 传输规则的 SubjectOrBodyContainsWords

Iterate thru SubjectOrBodyContainsWords of an Exchange transport rule

我想创建一个 PowerShell 脚本来提取一个文本文件,其中包含在 Exchange Server 2016 传输规则中指定的单词列表。我坚持处理获得的列表。

要获取列表,我在 Exchange 管理中执行此操作 Shell:

$SubjectOrBodyContainsWords = Get-TransportRule "My rule name" | Select-Object -Property SubjectOrBodyContainsWords

我用这个验证列表是否正确:

$FormatEnumerationLimit = 10000
$SubjectOrBodyContainsWords | Format-Table -HideTableHeaders | Out-String -width 10000

输出看起来像(只是一个例子,实际列表要大得多):

{unsubscribe, mailing, blabla}

现在我想迭代列表以对每个项目执行某些操作。我试过这样的事情(只是一个简单的例子):

$I = 10;
foreach ($A in $SubjectOrBodyContainsWords)
{
    $I++;
    $I; 
    $A;
}

问题是它没有循环所有项目。好像只有一件。

我做错了什么?

谢谢。

我目前无法访问我的 Exchange 服务器,但请尝试以下建议。只需请求并展开 属性.

(Get-TransportRule "My rule name").SubjectOrBodyContainsWords

# Or

Get-TransportRule "My rule name" | 
Select-Object -ExpandProperty SubjectOrBodyContainsWords

由于这个 returns 数组,您需要扩展该列表。

或者您可以执行此操作以转换为列表以使用...

"{unsubscribe, mailing, blabla}" -replace '\s|{|}' -split ',' |  foreach {
    # Code to do something with each item
    $PSItem }

# Results
unsubscribe
mailing
blabla

...和

此用例可能重复