CSV 内のスイッチのリストと、これらのスイッチがあるデータ スペースのリストがあります。データ スペースのリストには、関連する DataSpace_Name を表す DataSpace_ID フィールドがあります。
スイッチのリストには、Host_Name フィールドと IP_Address フィールドがあります。私が欲しいのは、ワイルドカードを使用した PowerShell と正規表現の一致を使用することです。DataSpace フィールドの例「ABC-COM」を、ABC-COM-3750-SW1 になるスイッチ リスト Host_Name に一致させたいと考えています。ABC-COMとだけマッチングしたい…
次に、結果として、見つかった一致に基づいて出力に、見つかった DataSpace_ID 値を関連付け、それをスイッチ リストの出力に含めます。
ABC-COM = DATASPACE_ID 1 と DEF-COM = DataSpace_ID 2 を一致させ、スイッチ データを次のようにするとします。
Host_Name IP_Address 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 = [regex]".+(?=-\d+)" $dataSpacesExport | ConvertFrom-Csv | % { $hash.Add($_,”$_”) } # 出力 $accessSwitchesForExport | ConvertFrom-Csv | Select-Object @{ 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 フィールドが含まれます。
以下のような出力は、2 つの csv の比較に基づいて次のように表示されます: 一致する DataSpace_ID と一致する Host_Name、および最終テーブルの関連する IP アドレス。