我有 CSV 中的开关列表和这些开关所在的数据空间列表。在我的数据空间列表中,我有一个代表其关联的 DataSpace_Name 的 DataSpace_ID 字段。
我的交换机列表有一个 Host_Name 和 IP_Address 字段。我想要的是使用 PowerShell 和使用通配符进行正则表达式匹配,我想将 DataSpace 字段示例“ABC-COM”与列出 Host_Name 的开关匹配,该开关将是 ABC-COM-3750-SW1。我只想匹配ABC-COM...
然后对于我的结果,我希望输出根据找到的匹配项关联找到的 DataSpace_ID 值并将其包含在开关列表的输出中。
假设我匹配 ABC-COM = DATASPACE_ID 1 和 DEF-COM = DataSpace_ID 2,我的开关数据是:
主机名 IP 地址 ABC-COM-3750-SW1 IP 192.168.1.2 ABC-COM-3750-SW2 IP:192.168.1.3 DEF-COM-3750-SW1 IP:192.168.3.5 DEF-COM-3750-SW2 IP:192.168.3.6
因此,最后您将根据数据空间列表的比较从开关列表中获得此输出,除了它将从数据空间名称的其他比较列表中添加 DataSpace_ID 列...开关列表输出将如下所示:
DataSpace_ID Host_Name IP_Address 1 ABC-COM-3750-SW1 IP 192.168.1.2 1 ABC-COM-3750-SW2 IP:192.168.1.3 2 DEF-COM-3750-SW1 IP:192.168.3.5 2 DEF-COM-3750-SW2 IP:192.168.3.6
这是我根据您的一些输入修改的最新代码,我不再收到错误,但是我的输出也没有返回任何结果。
清除主机 $hash.clear() $dataSpacesExport = Import-Csv -Path .\DataSpaces_Export.csv -Header 'DataSpace_ID', 'DataSpace_Name' -Delimiter "," $accessSwitchesForExport = Import-Csv -Path .\AccessSwitchesForExport.csv -Header 'Host_Name', 'IP_Address' -Delimiter "," # 创建哈希表 $哈希=@{} # 创建正则表达式条件 $re = [正则表达式]".+(?=-\d+)" $dataSpaces 导出 | ConvertFrom-Csv | % { $hash.Add($_,”$_”) } # 输出 $accessSwitchesForExport | ConvertFrom-Csv | 选择对象@{ n = "DataSpace_ID"; e = { $hash[$re.Match($_.Host_Name).Value] } },* | Where-Object { $_.DataSpace_ID -ne $null }
我的 CSV 文件正如一些人所要求的那样,示例数据是:DataSpaces 和开关输出示例在帖子下方。DataSpaces 包含 DataSpace_ID 和 DataSpace_Name,开关 csv 包含 Host_Name 和 IP_Address 字段。
输出,如下所示,基于两个 csv 的比较,应显示:匹配 DataSpace_ID 和匹配的 Host_Name,以及最终表中的相关 IP 地址。