【问题标题】:Formating an Object as a neatly looking List将对象格式化为外观整洁的列表
【发布时间】:2016-10-29 16:13:51
【问题描述】:

我正在尝试这样输出对象:

通过Format-List 对包含对象的变量进行管道传输会产生空行,从而产生问题。使用$obj = $obj | ? {$_}时由于某种原因我无法删除空行

我希望包含对象的变量包含正确数量的对象。

当我首先运行$Host(具有我正在寻找的格式)然后运行变量$obj 时,足够有趣,然后我得到了我正在寻找的结果。

非常感谢任何帮助。

代码如下:

$String = @"


   FileName: O:\iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
iiiiiiiiiiiiiii.txt

:`$DATA                                      9
SummaryInformation                       128
{4c8cc155-6c1e-11d1-8e41-00c04fb9386d}      0




   FileName: O:\ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
sssssssssssssss.txt

:`$DATA                                      9
SummaryInformation                       128
{4c8cc155-6c1e-11d1-8e41-00c04fb9386d}      0




   FileName: 
O:\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.txt

:`$DATA      0
Lzip        7



"@

[regex]$pattern1 = '(?s)\s+FileName:\s+(?<FullName>.*?)\s+:\$DATA'
$Match1 = $String | Select-String -Pattern $pattern1 -AllMatches |
          % { $_.Matches }  

[regex]$pattern2 = '(?sm)(?:(?<Stream>^:\$DATA.*?)\s+FileName|(?<Stream>^:.*))'
$Match2 = $String | Select-String -Pattern $pattern2 -AllMatches |
          % { $_.Matches }

$obj = 0..($Match1.Count -1) | % {    
    New-Object -TypeName PsObject -Property @{
        FullName = $Match1[$_].Groups['FullName'].Value
        Streams  = $Match2[$_].Groups['Stream'].Value
    }
}

$obj

编辑:即使按照建议删除换行符,我也会得到以下输出:

全名
--------
O:\iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
O:\ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss...
O:\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    

【问题讨论】:

  • 尝试使用 Trim 方法去除多余的空格。
  • 谢谢,我想我处理的是对象,而不是字符串。你能举个例子吗?
  • 请展示您想要的输出示例。显然这不是您在问题开头的屏幕截图中显示的内容。
  • 我想要的输出在屏幕截图中。我要的是列表,而不是表格。当我使用像 它添加空行。我希望每个对象都具有属性 FullName 和 Streams,并且我希望变量包含具有正确计数 (3) 的对象列表并显示为列表。问题不在于创建对象时,因为我可以通过 看到该表包含 3 个计数。问题是对象的输出。我希望输出如屏幕截图所示:一个列表。
  • $obj | Format-List 从您的屏幕截图生成输出。你在说什么?

标签: list powershell object format output


【解决方案1】:

您不会从从字符串中解析的文件名中删除换行符。这很可能是您的列表输出没有按照您希望的方式包装的原因。

改变这个:

$obj = 0..($Match1.Count -1) | % {    
    New-Object -TypeName PsObject -Property @{
        FullName = $Match1[$_].Groups['FullName'].Value
        Streams  = $Match2[$_].Groups['Stream'].Value
    }
}

到这里:

$obj = 0..($Match1.Count -1) | % {    
    New-Object -TypeName PsObject -Property @{
        FullName = $Match1[$_].Groups['FullName'].Value -replace '[\r\n]+'
        Streams  = $Match2[$_].Groups['Stream'].Value
    }
}

问题应该会消失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 2018-12-26
    相关资源
    最近更新 更多