【问题标题】:Select-String in Powershell only displaying part of the line from a text file, need it to display whole thingPowershell中的Select-String仅显示文本文件中的部分行,需要它来显示整个内容
【发布时间】:2017-07-04 04:50:42
【问题描述】:

我正在尝试编写一个简单的 PS 脚本来检查大型 .txt 日志文件中的短字符串:“SRVE0242I:”

$lines = Select-String -Path $logDir -Pattern "SRVE0242I:" | Select-Object line | Out-String

但在输出时,它只显示以下内容:

线路
[28/06/17 13:48:27:839] 00000020 ServletWrappe I SRVE0242I:[用户] [用户] [com_xxxxxxx_...

而不是整行。这个拉多少字符有限制吗?我找不到有关 Select-String cmdlet 的任何限制的任何信息。有没有更好的方法来做到这一点,这样我就不会 a)在我的行列表中拉出标题“行”(真的不想为这样一个简单的输出创建表格格式)和 b)得到整行我什么时候提取信息?

【问题讨论】:

  • 你可以使用Select-String -Path $logDir -Pattern "SRVE0242I:" | Select-Object line 而不是(Select-String -Path $logDir -Pattern "SRVE0242I:").line 这摆脱了选择字符串的输出长度限制。

标签: powershell powershell-cmdlet select-string


【解决方案1】:

您看到它是因为它使用默认的Format-Table 视图显示Line 属性并将其缩短到控制台的宽度。

改为这样做:

$lines = Select-String -Path $logDir -Pattern "SRVE0242I:" | Select-Object -ExpandProperty line

这会将Line 属性的值作为字符串返回给$lines 变量。你不需要使用Out-String

【讨论】:

    【解决方案2】:

    有!长话短说,Select-Object 在这里进行截断。这是在 Select-String 输出中获取第一个未截断行的一种方法

    $(Select-String -Path $logDir -Pattern "SRVE0242I:")[0].Line
    

    当您遇到这样的事情时,您可以分解各个步骤,通过将事情传递给 Get-Member 来确定发生了什么。以下是上面代码中发生的事情:

    Select-String <# args #> | Get-Member
    

    Select-String 为我们提供了一个 MatchInfo 对象,该对象(正如您正确确定的那样)具有“Line”属性。当它自己运行时,Select-String 实际上会吐出您正在寻找的所有信息,并且默认情况下不会截断它(至少在 v6.0.0-beta 上)。如果它找到多个匹配项,它确实会为您提供一个 MatchInfo 对象数组,因此如果您只想要第一个匹配项(就像我在上面所做的那样),则必须对该数组进行索引。

    Select-String <# args #> | Select-Object Line | Get-Member
    

    Select-Object 为对象应用 PowerShell 的默认格式,在大多数情况下,这些格式会截断您的输出以便于查看。对于具有一堆成员的对象(如 MatchInfo 对象),默认情况下它会尝试每行一个。

    Select-String <# args #> | Select-Object Line | Out-String | Get-Member
    

    Out-String 直接将其输入转换为字符串。也就是说,与其尝试将某些内容强制转换为字符串或将字符串属性从传递给它的对象中提取出来,它只是将接收到的任何内容更改为对象。在这种情况下,它将已经格式化的 MatchInfo 输出转换为字符串。终端上的输出没有任何反应,但 Get-Member 将显示一个 String 而不是 MatchInfo 对象。

    这里不直接相关,但如果您有兴趣修改默认格式,则由types.ps1xml 文件管理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-20
      • 2016-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多