【问题标题】:Import CSV while populating variables referenced in the file在填充文件中引用的变量时导入 CSV
【发布时间】:2016-08-26 06:41:20
【问题描述】:

我有一个包含如下行的 CSV 文件:

"标题","路径"
"新闻","/somepath/news.json/$variable1$variable2"
"Boards","/somepath/$year/$variable3/boardfile.json"

我在脚本中设置了所有这些变量,然后使用Import-Csv cmdlet 导入数据。结果,我得到了具有 Title 和 Path 属性的对象,这就是我所需要的。但问题是 CSV 文件中的变量在导入期间没有被实际值替换。 我知道Get-ContentExpandVariable 有一个解决方案,但它会产生一个字符串数组,我宁愿拥有一个属性类似于Import-Csv 产生的对象(或者可能是一个哈希表?)。 有没有办法在仍然使用Import-Csv 的同时将变量替换为值并得到一个功能齐全的对象?

【问题讨论】:

    标签: csv powershell import


    【解决方案1】:

    Import-Csv 不会扩展导入数据中的变量,因此 CSV 中的值的行为就像它们在单引号字符串中一样。您需要这样的东西才能在导入后扩展变量:

    Import-Csv 'C:\path\to\your.csv' | Select-Object Title,
        @{n='Path';e={$ExecutionContext.InvokeCommand.ExpandString($_.Path)}}
    

    【讨论】:

    • 您能解释一下这部分的内容吗? @{n='Name';e={$ExecutionContext.InvokeCommand.ExpandString($_.Path)}}
    • 为什么我们不能只使用 ForEach-Object,对每条记录执行 ExpandString($_.Path) 并重新分配新值?
    • 我没有说你不能。以上只是实现您想要的一种方式(在这种情况下,IMO 更方便)。
    • 计算属性确实解决了我的任务。谢谢!
    猜你喜欢
    • 2020-12-17
    • 2014-05-21
    • 2012-10-07
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多