首页 > 解决方案 > 在 Powershell Substring(0, IndexOf) 中不匹配时返回整个字符串

问题描述

我有一些适用于 Outlook 文件夹中邮件的 Powershell。大多数电子邮件都有一个以 text 开头的页脚"------"。我想在这个字符串之后转储所有文本。

我添加了一个表达式,Select-Object如下所示:

$cleanser = {($_.Body).Substring(0, ($_.Body).IndexOf("------"))}
$someObj | Select-Object -Property @{ Name = 'Body'; Expression = $cleanser}

这在IndexOf()返回匹配时有效......但是当我的Select-Object输出不匹配时null

返回时如何更新我的表达式以返回原始IndexOf字符串null

标签: powershellpowershell-5.0

解决方案


我同意@mklement0 和@PetSerAl 正则表达式给出了最好的答案。耶!正则表达式来拯救!

编辑:修复我原来的帖子。

遵循@Adam 在表达式中使用脚本块的想法,您只需在脚本块中添加更多逻辑以在使用之前先检查索引:

$cleanser = {
    $index = ($_.Body).IndexOf("------");
    if($index -eq -1){
        $index = $_.Body.Length
    };
    ($_.Body).Substring(0, $index)
}

$someObj | Select-Object -Property @{ Name = 'Body'; Expression = $cleanser}

推荐阅读