我希望能够Import-Csv
进入PowerShell表,以便我可以使用PowerShell脚本编辑每个部分,例如$table.row[0].name = 100
。 Import-Csv
不会使用CSV文件提供“表格”。
$tabName = "TableA"
$table = New-Object system.Data.DataTable "$tabName"
$col1 = New-Object system.Data.DataColumn ColumnName1,([string])
$col2 = New-Object system.Data.DataColumn ColumnName2,([int])
$table.columns.add($col1)
$table.columns.add($col2)
$row = $table.NewRow()
$row.ColumnName1 = "A"
$row.ColumnName2 = "1"
$table.Rows.Add($row)
$row = $table.NewRow()
$row.ColumnName1 = "B"
$row.ColumnName2 = "2"
$table.Rows.Add($row)
$table.PrimaryKey = $table.Columns[0]
$table | Export-Csv C:\test.csv
我想要一种$table | Import-Csv C:\test.csv
的方法,并且能够$table.row[0].columnname1 = "C"
并且将“A”更改为“C”。然后我可以在进行更改后重新导出它。
答案 0 :(得分:2)
您只需将表格导入DataTable
cmdlet即可将Export-Csv
对象导出为CSV:
$table | Export-Csv C:\table.csv -NoType
但是,通过这样做会丢失表列的所有类型信息(Export-Csv
cmdlet只能保存有关表示行的对象类型的信息,而不是有关其属性类型的信息。 / p>
保存和恢复DataTable
对象的更好方法是将表save作为XML:
$writer = New-Object IO.StreamWriter 'C:\path\to\data.xml'
$table.WriteXml($writer, [Data.XmlWriteMode]::WriteSchema)
$writer.Close()
$writer.Dispose()
将和restore XML转换为DataSet
:
$ds = New-Object Data.DataSet
$ds.ReadXml('C:\path\to\data.xml', [Data.XmlReadMode]::ReadSchema)
$table = $ds.Tables[0]
确保将模式与数据一起导出和导入,因为这是存储类型信息的地方。
答案 1 :(得分:0)
如您所见,import-csv的结果不是.NET DataTable对象。有这个函数可以转换为名为“Out-DataTable”https://gallery.technet.microsoft.com/scriptcenter/4208a159-a52e-4b99-83d4-8048468d29dd的DataTable。但我不知道它可以向两个方向发展。