如何在PowerShell中将字符串转换为表格或对象

4
如何将下面导出的文本转换为 CSV 格式,以便在 PowerShell 中使用它作为对象。例如:
where{$_.qlimit -eq 27}

Text:

  samid            qlimit    qused  
  Administrator    -1        0      
  Guest            -1        0      
  admin            27        8      
  krbtgt           -1        0      
  r                -1        0      
  admin2           44        0  

现在我觉得最后的编辑并没有反映出真实的输入数据:) - sodawillow
3个回答

7
使用Get-Content命令加载文件,替换两个或多个空格为逗号,并使用ConvertFrom-Csv命令将其转换为CSV格式:
$object = (Get-Content 'your_file').Trim() -replace '\s{2,}', ',' | ConvertFrom-Csv

如果您现在查询您的对象:
$object | where qlimit -eq 27

您将获得所需的输出:
samid qlimit qused
----- ------ -----
admin 27     8    

我现在遇到以下错误.. PS C:\Users\Administrator> $object = (Get-Content c:\temp.txt) -replace '\s{2,}', ',' | ConvertFrom-Csv ConvertFrom-Csv : 无法处理参数,因为参数“name”的值无效。更改“name”参数的值,然后重新运行操作。 位于第 1 行第 77 字符处
  • $object = (Get-Content c:\temp.txt) -replace '\s{2,}', ',' | ConvertFrom-Csv <<<<
    • CategoryInfo : InvalidArgument: (:) [ConvertFrom-Csv], PSArgumentException
    • FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.ConvertFromCsvCommand
- vinu
我无法重现这个问题。你能上传文本文件吗? - Martin Brandl
马丁,它起作用了..谢谢..请看我的以下代码:$object = $users -replace '\s{3,}', ',' | ConvertFrom-Csv $object | where {$_.samid -eq "r"}$object where $_.qlimit -eq 44 - vinu
好的,但是你应该使用.Trim()(请参见我的更新答案)。另外,请考虑接受这个答案。 - Martin Brandl
我应该在哪里使用 trim 函数? - vinu
谢谢你的好答案,它对我很有用。我稍微修改了这段代码,将表格中的行转换为对象属性。示例代码:$header = "Property", "Value" $collection = $stringTable.Trim() -replace '\s{2,}', ',' | ConvertFrom-Csv -Header $header现在我可以这样做: $collection | ForEach-Object {Write-Host "使用 $($.Property) 和 $($.Value) 做些什么"} - Stoimen

2
您可以使用PowerShell Gallery中的ConvertFrom-SourceTable cmdlet,轻松地将您的表格转换为PowerShell对象:
ConvertFrom-SourceTable '
  samid            qlimit    qused  
  Administrator    -1        0      
  Guest            -1        0      
  admin            27        8      
  krbtgt           -1        0      
  r                -1        0      
  admin2           44        0  
' | Where-Object {$_.qlimit -eq 27}

结果:

samid qlimit qused
----- ------ -----
admin 27     8

0

使用ConvertFrom-String的另一种方法(文件中没有标题):

(Get-Content 'your_file').trim() | ConvertFrom-String -PropertyNames samid,qlimit,qused

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