使用Powershell获取变量中字符串的第一行

18

这行代码:

$eventResult = Get-EventLog -Source ".net runtime" -LogName Application -Newest 1 | select -expandproperty message

将一个非常长的字符串输出到$eventResult中。

我想做的是获取它的第一行。

这将输出$eventResult的全部内容:

$eventResult | select-object -first 1

然而,将数据输出到文件中,然后解析它会非常顺利:

$eventResult | out-file c:\output.txt
cat c:\output.txt | select-object -first 1

我在这里错过了什么?

更新: 如果输出如下:

 Line1...
 Line2...
 Line3...

我想要的就是“Line1...”

更新2:

我编辑了$eventResult(忘记加上| select message了)。


你的帖子有点含糊不清,关于“第一行”的语言。你是想在没有标题的情况下获取数据吗?这就是你所说的第一行吗? - dfundako
我指的是字面上的第一行。 我会试着重新表达。 - JustAGuy
2个回答

28

将字符串按换行符拆分成数组,然后取数组的第一个元素将起作用,虽然可能不是最有效的方法。

($eventResult.Message -split '\n')[0]

不是很高效,但它能用 :) 向你致敬,我的朋友。 - JustAGuy
(-split $eventResult.Message)[0] - Jaro

14

Select-Object 返回整个 $eventResult 内容,因为整个 $eventResult 是第一个对象。

要使此查询返回第一行,每行在 $eventResult 中都需要成为自己的对象,例如:

$eventResult.Split([Environment]::NewLine) | Select -First 1

2
使用 [Environment]::NewLine 是使此代码跨平台工作的关键。 - Joe Johnston
$eventResult.Split([Environment]::NewLine) | Select -Skip 1 可以跳过第一行并获取其余内容。更多详细信息请参见 https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-object?view=powershell-7.1 - Shrikant Prabhu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接