Powershell哈希表键中的逗号

时间:2016-09-01 00:36:10

标签: powershell

拿这个.txt文件:

11111-2222, My, file, is, here.xml
22222-1111, My, filename.xml
22222-2323, My filename 2.xml
22222-2323, Myfilename3.xml

此文本文件表示将ID与文件系统目录中的文件名相关联的映射(每行是一个条目,由ID号后面的第一个逗号分隔)。我有一个powershell脚本,在高级别将这个.txt文件导入为CSV并将其放在一个地图中,我可以将文件名与其对应的ID号匹配,我需要将其附加到端点的PUT请求

我的脚本非常适用于.txt中的第3行和第4行...除了逗号的文件名。由于我们使用逗号分隔,因此Powershell会缩短这些字段名称,导致字段值不正确。

代码段:

$mapFile = "location\of\mytextfilehere.txt"
$contentObjects = "location\of\filesIwantToPost"
$map = @{}
Import-Csv $mapFile -Header ID,Filename | ForEach-Object { $map[$_.Filename] = $_.ID }

foreach ($file in $contentObjects) {
        $content = Get-Content $object.PSPath
        $putURI = "http://myendpoint:3000/" + $map[$file.Name]
            $request = Invoke-WebRequest -Uri $putURI -Method PUT -Body $content
}

尝试PUT文件"My, file, is, here.xml""My, filename.xml"时,上述操作会中断。地图构建仅保存“我的”作为键值,因为我们以逗号分隔。 有没有办法帮助我处理这些逗号并完全正确地保存这些字段?也许用管道而不是逗号分隔我的.txt?或者有不同的替代方法吗?

1 个答案:

答案 0 :(得分:0)

您的文件不是CSV。用引号包装名称或手动解析它,如下所示:

#test data
new-item sample.txt -ItemType File -Value "11111-2222, My, file, is, here.xml
22222-1111, My, filename.xml
22222-2323, My filename 2.xml
22222-2323, Myfilename3.xml"

#parse
cat sample.txt | %{
    $ID, $File = $_ -split ',',2;
    [PSCustomObject]@{ ID=$ID; File=$File.Trim() }
}