2

私は自分のビジネスから AD のダンプを処理しています。ユーザー名、名前、およびグループが与えられます。私の最終的な目標は、csv ファイルを定期的にダンプし、SSIS パッケージがそれを取得し、グループからすべてのゴミを削除してから、ユーザーが誰かの名前またはユーザー名を検索できるようにレポート フィードを作成することです。所属するグループを一覧表示します。

私が直面している問題は、グループ セクションが大量のゴミで満たされていることです。たとえば、次のようなものが与えられます。

CN=Standards of Conduct,CN=Users,DC=rlhk,DC=local|CN=ManagementLevel-9,OU=Groups,OU=rem,DC=rlhk,DC=local

これは非常に短いものです (3000 文字を超えるものもあります)。この中から抽出したい部分は、行動基準とManagementLevel-9です。これは半ランダムだと言います。明らかに全員が同じグループに属しているわけではなく、すべてが同じ順序であるとは思えないからです。

グループは常に |CN= の直後に続きます。最初の出現には | がありません。前は単に CN= です。

私は次のようなことを試しました:

SUBSTRING(Groups,FINDSTRING(Groups,"|CN=",1 ) + 3,FINDSTRING(Groups,",",1) - 4)

ただし、明らかに「| CN =」の最初の反復のみを取得し、それらすべてを取得する方法がわかりません。

ありがとうございました

4

1 に答える 1

1

以下の正規表現コードは、概要を説明したルールに従っている場合、グループと一致します。正規表現は、CN= のすべてのインスタンスの入力文字列を検索し、その後にコンマまですべてが続きます。

    string groupString = "CN=Standards of Conduct,CN=Users,DC=rlhk,DC=local|CN=ManagementLevel-9,OU=Groups,OU=rem,DC=rlhk,DC=local";
    foreach (Match match in Regex.Matches(groupString , @"CN=([^,]*)"))
    {
        Console.WriteLine(match.Groups[1].Value);
    }
    Console.ReadLine();

結果を にキャプチャする別のバージョン (非コンソール) を次に示します。これにより、結果をList<string>反復処理したり、特定の値が含まれているかどうかを確認したりできます。

        string groupString = "CN=Standards of Conduct,CN=Users,DC=rlhk,DC=local|CN=ManagementLevel-9,OU=Groups,OU=rem,DC=rlhk,DC=local";
        List<string> matchedGroups = new List<string>();
        foreach (Match match in Regex.Matches(groupString , @"CN=([^,]*)"))
        {
            matchedGroups.Add(match.Groups[1].Value);
        }
        //Use the matchedGroups collection here

これを SSIS パッケージで使用するには、スクリプト コンポーネントを変換として追加し、[入力列] タブで、そのフィールド (識別名) に対応するボックスをオンにして、それが ReadWrite であることを示します。

    foreach (Match match in Regex.Matches(Row.distinguishedname, @"CN=([^,]*)"))
    {
        Row.distinguishedname = (match.Groups[1].Value);
    }

これを新しい列にする場合は、[入力と出力] タブに移動し、[出力 0] を展開して、[出力列] を選択し、[列の追加] をクリックして、新しい名前とデータ型 (simplifiedName、DT_STR 3000 コードページ 1252) を指定する必要があります。 )。次に、上記の行を次のように変更します

        Row.simplifiedName = (match.Groups[1].Value);

RegularExpressions アセンブリへの参照を追加することを忘れないでくださいusing System.Text.RegularExpressions;

于 2012-10-23T18:00:23.257 に答える