import/export 包含 [ ] 的 csv

import/export csv that contains [ ]

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

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

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

"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 有点陌生,基本上可以从这个 site/google 中拼凑出一些东西。

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

ps。如果格式不正确以符合本网站的标准,我深表歉意。我刚开始在这里发帖,我知道 VM 名称/VMXPath 信息有点长...

在正则表达式中

  • [表示字符class的开始,所以必须是 匹配文字时用反斜杠转义。
  • 要在开始处锚定模式,您可以使用 ^(对于结尾 $
  • 到 negate/inverse 一个字符 class 使用相同的插入符号 [^ ] (这里它意味着除 space 之外的所有内容)
  • | 标记模式中的一个或条件,它匹配一个或另一个。

所以这个脚本即使有更多生成的测试数据也能正常工作:

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