我正在使用PowerShell v2并使用以下代码定义了一个名为Material的自定义类型:
add-type @"
public struct Material {
public string BusinessUnit;
public string Source;
public string PrimarySource;
public string LegacyMaterialNumber;
}
"@
...我收集了这种类型的对象,我正在使用Export-Csv cmdlet写入CSV文件。这工作正常,并生成具有如下指定的原始类型的数据:
#TYPE Material
BusinessUnit,Source,PrimarySource,LegacyMaterialNumber
BU1,NAFO,NAFO-FG,17502
BU1,NAFO,NAFO-FG,17504
BU1,NAFO,NAFO-FG,17739
BU1,NAFO,NAFO-FG,17837
BU1,NAFO,NAFO-FG,17841
我遇到的问题是当我使用 Import-Csv 导入此数据时,每行都被创建为类型:
CSV:Material
...而不是我开始使用的原始类型:
Material
在我的具体情况下,这是一个问题,因为我想将每个Material传递给一个函数,该函数具有一个特定类型为 Material 的参数。我可以解析每一行并使用数据重建我的Material对象,但是有一种快速方法可以将CSV数据导入为原始类型吗?
答案 0 :(得分:2)
Import-Csv
想要创建基于PSObject
的类型。您可以创建转换函数(或过滤器)以转换为材料类型。然后将import-csv
的输出传递给此函数并进入目标数组:
filter convert-csvToMaterial([Parameter(Mandatory=$true,ValueFromPipeline=$true)]$csvMaterial)
{
$material = new-object -TypeName Material
$material.BusinessUnit = $csvMaterial.BusinessUnit
$material.LegacyMaterialNumber = $csvMaterial.LegacyMaterialNumber
$material.PrimarySource = $csvMaterial.PrimarySource
$material.Source = $csvMaterial.Source
$material
}
$importedMaterial = import-csv .\materialList.csv | convert-csvToMaterial
答案 1 :(得分:0)
另一种选择是从Import-Csv
返回的自定义对象动态创建哈希表,并将它们用作New-Object
的-Property
参数:
filter Convert-CsvToType( [string]$TypeName ) {
$_.PSObject.Properties |
foreach { $h = @{} } {
$h[$_.Name] = $_.Value
} { New-Object $TypeName -Property $h }
}
Import-Csv .\materialList.csv | Convert-CsvToType Material