因为我是一个初学者,所以我对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 '(^|$)', '"' }