【问题标题】:spliting a string after the second ":"在第二个“:”之后分割一个字符串
【发布时间】:2018-02-22 09:16:03
【问题描述】:

我正在尝试从Get-WinEvent 消息块中获取文本,通常我只是使用它来获取第一句话:

($_.Message).split(".")[0]

如果第一部分由 . 分隔,这很好用

消息块如下所示:

Remotedesktopdienste: Die Sitzungsanmeldung war erfolgreich: 贝努策:testlab\testuser.local Sitzungs-ID: 1 Quellnetzwerkadresse:LOKAL。

我尝试只提取Remotedesktopdienste: Die Sitzungsanmeldung war erfolgreich: 部分(包括: 将是完美的,但不是强制性的)

仅使用: 作为分隔符不起作用(缺少第二部分)。

之后,我尝试使用

($_.Message).split(':',2)[0]

应该是消息块中的第二个:,这会给出Remotedesktopdienste

另一个想法是使用

($_.Message).split('[\r\n]',2)[0] 

使用第二个新行,也没有成功,结果是Remotedesktopdie

【问题讨论】:

  • 这样的东西应该可以工作:($_.Message).split("`r")[0]
  • ... 或n`. Keep in mind, PowerShell doen't escape using `\,它使用反引号```` 哦,该代码突出显示的废话.... 我想说的是:反斜杠(Schraegstrich)不能用作转义字符在 PS 中。使用反引号(撇号或你会这样称呼它。)
  • Jayvee 你的解决方案有效,我使用($_.Message).split("r")[0]`,工作正常。

标签: powershell


【解决方案1】:

所以你想用换行符分割:

 $MessageArray = $Message.Split("`n")

然后你可以遍历它

$Counter = 0
$MessageBody = ""
foreach($Line in $MessageArray) {
     if($Counter -eq 0) {
          $FirstLine = $Line
     } else {
          $MessageBody += $Line + "`n"
     }
     $Counter++
}

结果是:$FirstLine 包含您的第一行 .. $MessageBody 包含其余消息

更新:你甚至可以用这个在线人来做到这一点

 $FirstLine,$MessageBody = $Message.Split("`n")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多