powershell - 使用 PowerShell 的 Import-Csv cmdlet 将 CSV 类型快速转换为原始类型的方法?

标签 powershell powershell-2.0

我正在使用 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 数据导入为原始类型?

最佳答案

Import-Csv 想要创建基于 PSObject 的类型。您可以创建转换函数(或过滤器)来转换为 Material 类型。然后将 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

关于powershell - 使用 PowerShell 的 Import-Csv cmdlet 将 CSV 类型快速转换为原始类型的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17857385/

相关文章:

powershell - 从PowerShell中的列表中选择一个项目

powershell - 与 PowerShell 中的拆分相反(非 cmdlet)

.net - 如何在 powershell 中将哈希表转换为 json 字符串?

powershell - 如何使用powershell替换msha文件中的值?

powershell - Powershell将持续时间字符串解析为秒

用于查看当前登录用户(域和机器)+状态(事件、空闲、离开)的 Powershell 脚本

python - PyCharm卡在subprocess.communicate上,脚本从CMD运行良好。 PATH在两者中都显示相同

Windows 10 Schtasks.exe 最终运行错误后删除

csv - 将制表符分隔符转换为分号

PowerShell 元编程 - 生成高级函数