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



因为我是一个初学者,所以我对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

,上面的输出为:

"ComputerName"、"域名","制造商"mycomputername 1"、"2 mycomputerdomain","3 mycomputermanufacturer"

现在,我不想这样,我想要输出以列形式出现,即

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

应该做哪些代码更改来实现这一点。div ?

您要么想要CSV(您已经有了),要么想要一个自定义文本文件。如果您想要后者,请尝试:

$comp = gwmi win32_computersystem
@"
"ComputerName","$($comp.Name)"
"DomainName","$($comp.Domain)"
"Manufacturer","$($comp.Manufacturer)"
"@ | Out-File test.txt
下面test.txt输出的

示例。我有一个非域名,定制的pc,所以不用担心值。

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

EDIT我建议你学习什么是CSV。请记住,CSV不是文件格式,而是普通文本文件中使用的一种格式样式。.csv扩展只是装饰,让人们知道文本文件使用csv样式。查看Wikipedia和Technet

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

导出的文件格式如下:

——CSV文件的第一行包含字符串'#TYPE ',后面是对象的完全限定名,例如#TYPESystem.Diagnostics.Process。要抑制该行,请使用NoTypeInformation参数。

——CSV文件的下一行表示列标题。的所有属性名称的逗号分隔列表第一个对象

——文件的附加行由逗号分隔的每个对象的属性值列表组成。

你可以尝试这样做:

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

相关内容

  • 没有找到相关文章

最新更新