【问题标题】:import/export csv that contains [ ]导入/导出包含 [ ] 的 csv
【发布时间】:2017-07-21 07:03:57
【问题描述】:

我正在 vCloud Director 环境中为 VMware DR 创建一个脚本。我有几个脚本可以生成不同的 csv 文件,其中包含我的整个环境。我正在尝试导入较大的全包 CSV 文件之一以创建一个 csv 导出文件,该文件仅包含与特定客户端 VM 的名称列中的三个字母代码和 VMXPath 中列出的每个数据存储上的三个字母代码匹配的行标识存储是否被复制的列。

脚本导出目标: 匹配名称列中的 ABC 并匹配 VMXPath 列中的 NLR 或 S4R。

示例: 对于下面的示例,我删除了 CSV 文件中的所有其他列,因为它们有很多,留下我试图根据我的脚本标准排序/导出的两列。这是 csv 中包含的列标题和示例数据的示例。

"Name","VMXPath"
"ABC04W09A001 (74342f44-cd05-490e-87bc-3803e8656b33)","[NLR_ABC_DST_505] ABC04W09A001 (74342f44-cd05-490e-87bc-3803e8656b33)/ABC04W09A001 (74342f44-cd05-490e-87bc-3803e8656b33).vmx"

这是我正在使用的脚本代码,它无法生成正确的导出文件。我可以让它与客户端 ABC 匹配,但即使我将命令剥离为仅尝试基于 VMXPath 标准导出,它仍然会失败。

    $drinventory = Import-Csv C:\reports\dr\co_prod_all_inventory.csv

    $abcinventory | where {($_.Name -match “abc”) -and ($_.VMXPath -match "NLR" -or "S4R")} | Export-Csv C:\reports\dr\abc_dr.csv -NoTypeInformation

我不确定根本原因可能是什么。我觉得它可能与 [ ] 有关,因为我认为这就是数组包含的内容?我对powershell有点陌生,基本上可以从这个站点/谷歌拼凑起来。

非常感谢您提供的任何帮助,并提前非常感谢您。

ps。如果这没有正确格式化以符合本网站的标准,我深表歉意。我是新来的,我知道 VM 名称/VMXPath 信息有点长...

【问题讨论】:

  • “abc” - 这些不是标准的 ASCII 双引号。

标签: powershell csv import export


【解决方案1】:

在正则表达式中

  • [ 表示字符类的开始,所以它必须是 匹配文字时用反斜杠转义。
  • 要在开头锚定一个模式,请使用^(结尾是$
  • 要否定/反转字符类,使用相同的插入符号 [^ ](这里它表示除空格之外的所有内容)
  • | 标记模式中的一个或条件,它匹配一个或另一个。

因此,即使生成更多的测试数据,此脚本也能正常工作:

$drinventory = Import-Csv ".\co_prod_all_inventory.csv"
$drinventory | 
  where {($_.Name -match "^abc") -and ($_.VMXPath -match "^\[NLR|^\[S4R")} | 
    Export-Csv ".\abc_dr.csv" -NoTypeInformation

【讨论】:

  • 非常感谢您为我回答这个问题。这正是我一直在寻找的,我的脚本现在可以完美运行。感谢您解释您的更改是如何工作的,因为现在我也接受了未来的教育。再次感谢!
猜你喜欢
  • 2017-04-23
  • 2019-08-28
  • 2015-02-08
  • 1970-01-01
  • 1970-01-01
  • 2015-02-17
  • 1970-01-01
  • 2015-07-21
  • 1970-01-01
相关资源
最近更新 更多