gpt4 book ai didi

powershell 从正文中获取特定行

转载 作者:行者123 更新时间:2023-12-05 00:51:55 30 4
gpt4 key购买 nike

我在从 powershell 主体中获取特定行时遇到了一些问题。 HR 团队向我们发送电子邮件,逻辑应用获取电子邮件正文并将其传递给禁用用户的脚本。

body 是这样的:

Hi,

the following user have to be dismiss:

#mail: user1@mycompany.com
#mail: user2@mycompany.com
#mail: user2@mycompany.com


Bye
hr team

hrteam@mycompany.com

我只想获取特定的行:

    #mail: user1@mycompany.com
#mail: user2@mycompany.com
#mail: user2@mycompany.com

为此,我使用以下代码做了一个技巧:

    $Body
$SplitBody = $Body.split("").split(" ").Split("#")
$objetbody = $SplitBody.Replace(" ","").Trim()

我得到了以下结果:

Hi,
the
following
user
have
to
be
dismiss:

mail:
user1@mycompany.com

mail:
user2@mycompany.com

mail:
user2@mycompany.com
Bye
hr
team
hrteam@mycompany.com

之后我将 $objetbody 传递给一个 foreach 并循环所有行(在这个 foreach 的末尾放置一个中断,因为它可以禁用 HR 邮件)。如果 HR 只发送了 1 封邮件来禁用,流程就可以工作。

我的问题是有没有办法获得包含邮件的特定行?

谢谢

最佳答案

这是一个使用 .NET RegEx 输出所有电子邮件地址的单行程序类:

[RegEx]::Matches( $body, '(?<=#mail:\s*)\S+' ).Value

同样可以使用 Select-String :

($body | Select-String '(?<=#mail:\s*)\S+' -AllMatches).Matches.Value

RegEx 分割:

  • (?<= ... 在模式后面开始一个积极的看法,这意味着我们搜索的子字符串必须在给定模式之前,但这个模式不会包含在结果中
    • #mail:\s* ... 文字 "#mail:"后跟可选空格
  • ) ... 结束模式的外观
  • \S+ ...任何非空白字符序列 -> 电子邮件地址

我保持电子邮件地址模式简单,因为正确 matching email addresses using RegEx可能很难。无论如何,您可能希望将验证作为一个单独的步骤进行,以便您可以报告无效地址。这可以使用 .NET MailAddress 更简单地完成。类:

$mailAddresses = [RegEx]::Matches( $body, '(?<=#mail:\s*)\S+' ).Value

foreach( $adr in $mailAddresses) {
try {
[System.Net.Mail.MailAddress]::new( $adr )
} catch {
# The MailAddress constructor throws FormatException for invalid address
Write-Error "Invalid mail address: '$adr'"
}
}

关于powershell 从正文中获取特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70824765/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com