1

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 アドレス。

4

2 に答える 2