【问题标题】:Iterate thru SubjectOrBodyContainsWords of an Exchange transport rule遍历 Exchange 传输规则的 SubjectOrBodyContainsWords
【发布时间】:2020-05-20 01:03:10
【问题描述】:

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

要获取列表,我在 Exchange 命令行管理程序中执行此操作:

$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;
}

问题在于它不会循环所有项目。好像只有一项。

我做错了什么?

谢谢。

【问题讨论】:

    标签: powershell exchange-server


    【解决方案1】:

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

    (Get-TransportRule "My rule name").SubjectOrBodyContainsWords
    
    # Or
    
    Get-TransportRule "My rule name" | 
    Select-Object -ExpandProperty SubjectOrBodyContainsWords
    

    由于这会返回一个数组,因此您需要展开该列表。

    或者您可以这样做以将其转换为可使用的列表...

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

    ...和

    此用例的可能重复

    Exchange Shell - SubjectOrBodyContainsWords

    【讨论】:

    • 谢谢您,第一个建议 100% 有效。无法使用第二个命题,因为实际返回的文本可能包含未“转义”的逗号和大括号。
    • 不用担心。很高兴它有帮助。仅供参考,至于逗号/大括号等可能在返回的字符串中,您可以更改 -replace 正则表达式比较以查看并删除您期望的任何特殊字符。既然你只展示了两个,这就是我这样设置的唯一原因。在此处查看详细信息:lazywinadmin.com/2015/08/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 2011-05-07
    • 1970-01-01
    相关资源
    最近更新 更多