我正在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 Name / VMXPath信息有点长...
答案 0 :(得分:0)
在正则表达式中
[
表示字符类的开头,所以它必须是
在匹配文字时使用反斜杠进行转义。^
的开头处锚定模式(结束时为$
)[^ ]
来否定/反转一个字符类(这里它意味着除了空格之外的所有内容)|
标记模式中的条件或条件,它与一个或另一个匹配。因此即使使用更多生成的测试数据,此脚本也能正常工作:
$drinventory = Import-Csv ".\co_prod_all_inventory.csv"
$drinventory |
where {($_.Name -match "^abc") -and ($_.VMXPath -match "^\[NLR|^\[S4R")} |
Export-Csv ".\abc_dr.csv" -NoTypeInformation