在Powershell中 - 以自定义格式将对象导出到文本文件

时间:2013-05-21 09:34:31

标签: powershell powershell-v2.0

因为我是初学者,所以我对powershell编程没有多少动手。尽管如此 我开发了一个脚本,用于将数据从数组插入到csv文件中,如下所示:

#Following is the array
$InventoryReport = New-Object -TypeName PSobject -Property @{
                        ComputerName = "1myComputerName"
                        DomainName = "2myComputerDomain"
                        Manufacturer = "3myComputerManufacturer"
}

#Now to export the data to csv, i am using following:
$InventoryReport |Select-Object -Property ComputerName, DomainName, Manufacturer | Export-Csv -Path "c:\abc.csv" -NoTypeInformation -ErrorAction Stop

#This works fine

并且上面的输出是:

  

“计算机名”, “域名”, “制造商”   “1myComputerName”, “2myComputerDomain”, “3myComputerManufacturer”

.... 现在,我不希望这样,我希望输出以柱状方式出现,即

"ComputerName","1myComputerName"
"DomainName","2myComputerDomain"
"Manufacturer","3myComputerManufacturer"

为实现这一目标,应该进行哪些代码更改。 ?

2 个答案:

答案 0 :(得分:1)

您想要CSV,您已经拥有,或者您想要一个自定义的txt文件。如果你想要后者,试试这个:

$comp = gwmi win32_computersystem

@"
"ComputerName","$($comp.Name)"
"DomainName","$($comp.Domain)"
"Manufacturer","$($comp.Manufacturer)"
"@ | Out-File test.txt

下面的test.txt输出示例。我有一个非域名,定制的电脑,所以不要担心这些价值。

"ComputerName","GRAIMER-PC"
"DomainName","WORKGROUP"
"Manufacturer","System manufacturer"

编辑我建议您了解CSV是什么。请记住,CSV不是文件格式,它是普通文本文件中使用的格式化样式。 .csv扩展只是让人们知道文本文件使用csv样式的装饰。查看WikipediaTechnet

  

在CSV文件中,每个对象由逗号分隔的列表表示   对象的属性值。属性值是   转换为字符串(通过使用对象的ToString()方法),   所以它们通常用属性值的名称表示。   Export-CSV不会导出对象的方法。

     

导出文件的格式如下:

     

- CSV文件的第一行包含字符串' #TYPE'后跟对象的完全限定名称,例如#TYPE   的System.Diagnostics.Process。要禁止此行,请使用   NoTypeInformation参数。

     

- CSV文件的下一行代表列标题。它包含逗号分隔的所有属性名称列表   第一个对象。

     

- 该文件的其他行包含每个对象的属性值的逗号分隔列表。

答案 1 :(得分:0)

您可以尝试这样的事情:

$InventoryReport | Format-List ComputerName, DomainName, Manufacturer `
  | Out-String -Stream `
  | ? { $_ -ne '' } `
  | % { $_ -replace '\s+:\s+', '","' -replace '(^|$)', '"' }