汎用 CSV コネクタ - ステップ バイ ステップ リファレンス ガイド (プレビュー)
この記事では、汎用 CSV コネクタについて説明します。 この記事は次の製品に適用されます。
MIM 2016 の場合、コネクタは Microsoft ダウンロード センターからダウンロードできます。
注意
Azure AD プロビジョニング サービスでは、完全な MIM 同期のデプロイなしで、CSV ファイルにユーザーをプロビジョニングするための軽量のエージェント ベースのソリューションが提供されるようになりました。 ニーズを満たしているかどうかを評価することをお勧めします。 詳細については、こちらを参照してください。
サンプル CSV ファイルを準備する
MIM 同期サーバーを実行しているサーバーで、 フォルダー C:\GCSV を作成し、「 付録 A – サンプル CSV ファイル 」にある次の CSV ファイルをそこにコピーします。 MIM 同期サービス アカウントに、そのフォルダーに対する読み取りと書き込みの両方のアクセス許可を付与してください。
次の CSV を C:\GCSV\SCRIPTS フォルダーにコピーします。
- サンプル ユーザー CSV ファイル (Users.csv)
- サンプル グループ CSV ファイル (Groups.csv)
- サンプル メンバー CSV ファイル (Members.csv)
注意
このガイドでは、CSV ファイルが MIM 同期サーバー上の次のパスにあることを前提としています: C:\GCSV と、指定されたファイル名を使用して保存されます。 別の場所にインストールするか、これらのファイルの名前を変更する場合は、このガイドのリセットを通じて適切な変更を行う必要があります。
サンプル PowerShell スクリプトを準備する
MIM 同期サーバーを実行しているサーバーで、 フォルダー C:\GCSV\SCRIPTS を作成し、「 付録 B - サンプル PowerShell ファイル 」にあるサンプル PowerShell スクリプトをそこにコピーします。 スクリプトを実行するために、MIM 同期サービス アカウントに適切な PowerShell ExecutePolicy アクセス許可 があることを確認します。
次の PowerShell スクリプトを C:\GCSV\SCRIPTS フォルダーにコピーします。
- サンプルのインポート前スクリプト (Pre-Import.ps1)
- インポート後スクリプトのサンプル (Post-Import.ps1)
- サンプルのエクスポート前スクリプト (Pre-Export.ps1)
- サンプルのエクスポート後スクリプト (Post-Export.ps1)
注意
このガイドでは、CSV ファイルが MIM 同期サーバー上の次のパスにあることを前提としています: C:\GCSV\SCRIPTS。 別の場所にインストールする場合は、このガイドのリセットを通じて適切な変更を行う必要があります。
重要
MIM 同期サービス アカウントでは、サンプルの PowerShell スクリプトを実行するために、MIM 同期サーバーに対する適切な PowerShell ExecutePolicy アクセス許可 が必要です。
新しいコネクタを作成する
次の一覧は、このガイドで説明されている手順の概要です。 そのためには、MIM Syncs 管理 ロールを持つアカウントを使用して、次のタスクを実行する必要があります。
- MIM 同期Service Managerから [新しい管理エージェント (MA) の作成] ウィンドウを開きます。
- コネクタの種類として [ 汎用 CSV コネクタ ] を選択します。
- インポートまたはエクスポートする CSV ファイルのファイル パスと名前を指定します。
- CSV ファイルのファイル エンコード、値区切り記号、複数値区切り記号、およびテキスト修飾子を指定します。
- 最初の行の値をヘッダー フィールドとして使用するかどうかを選択します。
- CSV ファイルからインポートまたはエクスポートするオブジェクトの種類と属性を選択します。
- MA のパーティション、実行プロファイル、マッピングの詳細を構成します。
- PowerShell スクリプトのスクリプト パスとパラメーター (存在する場合) を指定します。
- MA を実行して、インポート、同期、またはエクスポート操作を実行します。
- 結果を評価します。
始めましょう。
汎用 CSV コネクタを作成するには、[MIM 同期] Service Manager [管理エージェント] と [作成] を選択します。 汎用 CSV (Microsoft) コネクタを選択します。
コネクタの名前 (汎用 CSV など) を確認し、[ 次へ ] ボタンをクリックします。
接続
[接続] ページには、コネクタが User、Groups、および Group Members CSV ファイルを検索できるファイル パスが含まれています。
次の図は、[ 接続] ページの例です。
このページの設定に指定する必要がある値の一覧を次に示します。
設定名 | 値の設定 | メモ |
---|---|---|
ユーザー ファイル | C:\GCSV\USERS.CSV | (完全修飾パスとファイル名が使用されます)。 |
グループ ファイル | C:\GCSV\GROUPS.CSV | (完全修飾パスとファイル名が使用されます)。 |
メンバー ファイル | C:\GCSV\MEMBERS.CSV | (完全修飾パスとファイル名が使用されます)。 |
設定が指定された値と一致することを確認したら、[ 次へ ] ボタンをクリックします。
機能
このページでは、コネクタの機能について説明します。 GCSV コネクタの機能は固定されており、変更することはできません。
次の図は、[ 機能 ] ページの例です。
これらの機能設定の詳細については、「 汎用 CSV コネクタ - テクニカル リファレンス ガイド」を参照してください。
構成を確認したら、[ 次へ ] ボタンをクリックします。
スキーマ 1 (CSV ファイル形式の構成)
汎用 CSV (GCSV) コネクタでは、3 種類の区切り記号 (または区切り記号) を使用して、CSV フィールドとその値を区切って解析します。 値の区切り記号、 複数値の区切り記号、 およびテキスト修飾子。 これらの区切り記号の種類の詳細については、「汎用 CSV コネクタ - テクニカル リファレンス ガイド」を参照してください。
このページには、これらの区切り記号の文字値の設定と、ファイルを CSV として作成するために使用されたエンコードの種類が含まれています。
次の図は、 スキーマ 1 (CSV ファイル形式の構成) ページの例です。
次のセクションでは、個々の構成の一覧を示します。
- スキーマ検出にヘッダーを使用する: このオプションを選択すると、コネクタは各 CSV ファイルの最初のレコードをデータ レコードとして無視し、ヘッダー レコード (つまり、各フィールドの名前を持つ) として使用するようにコネクタに指示します。このオプションが選択されていない場合、コネクタは各フィールド (Attribute1、Attribute2 など) に汎用名を付け、最初の行をデータ レコードとして使用します。
- 値の区切り記号: この文字は、CSV レコードのフィールド (つまり値) を区切ります。 コンマ (,) が既定ですが、印刷できる任意の英数字を使用できます。
- 複数値区切り記号: この種類の区切り記号は、複数値の文字列 (プロキシ アドレスなど) または参照属性 (下位など) の個々の値を区切るために使用されます。既定値はセミコロン (;)ですが、印刷可能な英数字は使用できます。
- テキスト修飾子: 文字列値に区切り記号として解釈される文字 (コンマなど) が含まれている場合は、CSV パーサーが文字列を 1 つのフィールドとして正しく解釈できるように、値を修飾する必要があります。 二重引用符 (") は既定ですが、印刷できる任意の英数字を使用できます。
- [ファイルのエンコード]: この設定は、[接続] タブに追加された CSV ファイルで使用されるエンコードを示します。CSV ファイルのエンコードと一致していることを確認します。
注意
CSV ファイルのエンコードの種類がわからない場合は、既定の Unicode エンコードの種類を使用してください。 Unicode は、多くの文字と記号をサポートする一般的な標準であり、ほとんどの言語または文字セットでテキスト データをエンコードする場合に適したオプションです。
スキーマ 2 (ID と参照フィールドの構成)
アンカー値は、CSV ファイル内のレコードの一意の識別子です。 1 つのレコードと他のレコードを区別します。 GCSV コネクタでは、この値を使用して、コネクタ スペース オブジェクトを一意に識別する識別名 (DN) も作成されます。
このページでは、[接続] ページに一覧表示されている CSV ファイルごとにアンカー属性の設定が設定されます。
次の図は、 スキーマ 2 (ID と参照フィールドの構成) ページの例です。
次の表に、このページの各設定に割り当てる必要がある個々の値を示します。
設定名 | 設定値 |
---|---|
ユーザー レコード ID フィールド | EmployeeID |
ユーザー レコード ID フィールド属性の種類 | String |
グループ レコード ID フィールド | GroupID |
グループ レコード ID フィールド属性の種類 | String |
親グループ ID | ParentID |
メンバー ID | MemberID |
メンバー オブジェクトの種類 | ObjectType |
設定が指定された値と一致することを確認したら、[ 次へ ] ボタンをクリックします。
スキーマ 3 (ユーザー ファイル属性スキーマ構成)
このページは、Users CSV ファイルのスキーマ内の各属性のデータ型と、複数の値を持つことができるかどうかを割り当てるために使用されます。
次の図は、 スキーマ 3 (ユーザー ファイル属性スキーマ構成) ページの例です。
次の表に、このページの各設定に割り当てる必要がある個々の値を示します。
設定名 | 設定値 | メモ |
---|---|---|
DisplayName 属性の種類 | String | 修飾文字列の例は、このフィールドにあります |
DisplayName が複数値である | false | -- |
AccountName 属性の種類 | String | -- |
AccountName が複数値である | false | -- |
CountryCode 属性の種類 | 整数 | -- |
CountryCode は複数値です | false | -- |
Manager 属性の種類 | リファレンス | 割り当てられたマネージャー ユーザー レコードのアンカー属性値を格納します ( 例: E001)。 |
マネージャーが複数値を持つ | false | -- |
ProxyAddresses 属性の種類 | String | -- |
ProxyAddresses は複数値です | TRUE | 複数値の文字列を区切る方法の例が含まれています |
IsActive 属性の種類 | Boolean | -- |
IsActive は複数値です | false | -- |
ProfilePic 属性の種類 | Binary | -- |
ProfilePic は複数値です | false | -- |
設定が指定された値と一致することを確認したら、[ 次へ ] ボタンをクリックします。
スキーマ 4 (グループ ファイル属性スキーマ構成)
このページは、グループ CSV ファイルのスキーマ内の各属性のデータ型と、複数の値を持つことができるかどうかを割り当てるために使用されます。
次の図は、 スキーマ 4 (グループ ファイル属性スキーマ構成) ページの例です。
次の表に、このページの各設定に割り当てる必要がある個々の値を示します。
設定名 | 設定値 | メモ |
---|---|---|
DisplayName 属性の種類 | String | -- |
DisplayName が複数値である | false | 修飾文字列値の例を示します。 |
Description 属性の種類 | String | -- |
説明は複数値です | false | -- |
所有者属性の種類 | リファレンス | 参照値の例を示します。 |
所有者が複数値を持つ | false | -- |
設定が指定された値と一致することを確認したら、[ 次へ ] ボタンをクリックします。
グローバル パラメーター (PowerShell スクリプトの構成)
このページでは、インポート操作やエクスポート操作の前後に実行される PowerShell スクリプトを構成できます。 この入力パラメーターの値を使用すると、ID ユーザーおよびグループ レコードに対してさまざまな前処理アクションと事後処理アクションを実行できます。
次の図は、[ グローバル パラメーター] ページの例です。
次の表に、このページの各設定に割り当てる必要がある個々の値を示します。
設定名 | 設定値 | メモ |
---|---|---|
インポート前ファイル | C:\GCSV\SCRIPTS\PRE-IMPORT.CSV | このスクリプトは、完全インポートの前に実行されます |
インポート後のファイル | C:\GCSV\SCRIPTS\POST-IMPORT.CSV | このスクリプトは、完全インポート後に実行されます |
ファイルの事前エクスポート | C:\GCSV\SCRIPTS\PRE-EXPORT.CSV | このスクリプトは、完全エクスポートまたは (デルタ) エクスポートの前に実行されます |
エクスポート後のファイル | C:\GCSV\SCRIPTS\POST-EXPORT.CSV | このスクリプトは、完全エクスポートまたは (デルタ) エクスポートの前に実行されます |
設定が指定された値と一致することを確認したら、[ 次へ ] ボタンをクリックします。
PowerShell スクリプトの実行
GCSV コネクタは、構成された各 PowerShell スクリプトを独自のセッションで実行し、スクリプトの実行間で変数を渡すサポートを提供しません。
さらに、GCSV コネクタは、コマンドレットとしてではなく、ファイル内で PowerShell スクリプトを実行します。 つまり、入力パラメーターをパス ステートメントの末尾に追加してスクリプトに渡すことはできません。 これを行うと、スクリプトの実行が失敗します。
重要
GCSV コネクタでは、PowerShell スクリプトの実行での入力パラメーターの受け渡しの使用はサポートされていません。
インポート前またはエクスポート前のスクリプト実行で例外がスローされた場合、不適切に処理されたユーザーまたはグループ レコードのインポートまたはエクスポートを防ぐために、GCSV コネクタは実行プロファイル全体の実行を中止して停止します。
同様に、インポート後またはエクスポート後の操作で例外が発生すると、操作の状態が失敗します。
PowerShell スクリプトの実行中に発生したエラーは、MIM 同期サーバーの *イベント *ログに記録されます。
PowerShell 入力パラメーター: OperationType
入力パラメーターの使用はサポートされていませんが、GCSV コネクタは、すべての PowerShell スクリプト OperationType
の実行に 1 つの入力パラメーターを渡します。
入力変数OperationType
には、スクリプトで実行されている操作の種類 (完全インポート、デルタ インポート、完全エクスポート、(Delta) エクスポートなど) を示す Full または Delta の値が含まれます。 この値を使用すると、スクリプトが完全または差分のインポート/エクスポート コンテキストで実行されている場合にチェックし、それに応じて前処理タスクまたは後処理タスクを実行できます。
Provisioning Hierarchy
CSV ファイルは階層構造に情報を格納しないためです。汎用 CSV コネクタでは、階層型プロビジョニング構成はサポートされていません。
次の図は、[ プロビジョニング階層 ] ページの例です。
設定が指定された値と一致することを確認したら、[ 次へ ] ボタンをクリックします。
パーティションと階層
汎用 CSV コネクタは、次の LDAP 形式に従って、コネクタ 空間内のすべてのユーザーおよびグループ レコードに対して個別の識別名 (DN) を作成します。
CN=[ANCHOR_VALUE],Object=User|Group,O=CSV
次の図は、[ パーティションと階層] ページの例です。
設定が指定された値と一致することを確認したら、[ 次へ ] ボタンをクリックします。
オブジェクトの種類
汎用 CSV コネクタでは、少なくとも User オブジェクトの種類を指定する必要があります。 Group オブジェクトの種類の選択は省略可能です。
次の図は、[ オブジェクトの種類] ページの例です。
設定が指定された値と一致することを確認したら、[ 次へ ] ボタンをクリックします。
属性
このページには、選択したすべてのオブジェクト型スキーマのすべての属性の正規化された一覧が表示されます。
次の図は、[ 属性] ページの例です。
設定が指定された値と一致することを確認したら、[ 次へ ] ボタンをクリックします。
注意
GCSV コネクタが正しく動作するためには、常にアンカー属性が必要です。
アンカー
汎用 CSV コネクタでは、対応するオブジェクトの CSV ファイルのアンカー ID フィールドの指定とは異なる複雑なアンカーまたはアンカー属性の構成の使用はサポートされていません。 このため、アンカー選択フィールドはロックされます。 アンカー属性の指定を変更するには、 スキーマ 2 (ID と参照フィールドの構成) ページに戻ります。
次の図は、[ アンカー] ページの例です。
ページの既定の設定を確認したら、[ 次へ ] ボタンをクリックします。
コネクタ フィルター
このガイドでは、コネクタ フィルター構成を使用しません。 このセクションでは、ガイドの継続性を提供します。
次の図は、[ コネクタ フィルター] ページの例です。
ページの既定の設定を確認したら、[ 次へ ] ボタンをクリックします。
参加とプロジェクションのルール
このガイドでは、結合とプロジェクションルールの構成は使用されません。 このセクションでは、ガイドの継続性を提供します。
次の図は、[ 結合と射影ルール] ページの例です。
ページの既定の設定を確認したら、[ 次へ ] ボタンをクリックします。
属性フロー
このガイドでは、属性フロー ルールの構成を使用しません。 このセクションでは、ガイドの継続性を提供します。
次の図は、[ 属性フロー ] ページの例です。
設定が既定値と一致することを確認したら、[ 次へ ] ボタンをクリックします。
Deprovisioning
このガイドでは、このコネクタの既定のプロビジョニング解除設定は変更しません。 このセクションでは、ガイドの継続性を提供します。
次の図は、 プロビジョニング解除 ページの例です。
設定が既定値と一致することを確認したら、[ 次へ ] ボタンをクリックします。
フル インポート実行プロファイルを作成する
CSV レコードから Connector Space オブジェクトにユーザーとグループの ID データをインポートするには、フル インポート実行プロファイルが必要です。
次の手順に従って、新しいフル インポート実行プロファイルを作成します。
- [同期] Service Managerに戻るします。
- GCSV 管理エージェントを選択します。
- それを右クリックし、[ 実行プロファイルの構成] を選択します。
- [ 新しいプロファイル] をクリックします。
[実行プロファイルの構成] ウィンドウが表示されます。
実行プロファイルに名前を付けます
[プロファイル名] ページで、「Full Import」と入力します
次の図は、[プロファイル] ページの例です。
設定が指定された値と一致することを確認したら、[ 次へ ] ボタンをクリックします。
型の指定
[ステップの構成] ページで、[種類: 完全インポート] を選択します。
コネクタのフィルター処理は、他の ECMA コネクタと同じように GCSV コネクタで動作します。
次の図は、[ コネクタ フィルター] ページの例です。
設定が指定された値と一致することを確認したら、[ 次へ ] ボタンをクリックします。
管理エージェントの構成の種類
[管理エージェントの構成の種類] ページで、 O=CSV パーティションが選択されていることを確認します。
残りの設定は既定値のままにします。 [ 完了 ] ボタンをクリックすると、実行プロファイルが作成されます。
結果の検証
このセクションでは、新しい GCSV コネクタを作成し、サンプル CSV ファイルから User レコードと Group レコードをインポートした結果を検証するために必要な手順について説明します。
フル インポートの実行
実行プロファイルを作成した後、次の手順を使用して、この新しいフル インポート実行プロファイルを実行します。
- 同期Service Managerに戻るします。
- GCSV 管理エージェントを選択します。
- それを右クリックし、[実行] を選択 します。
- [ フル インポート ] を選択し、[ OK] をクリックします。
完全なインポート操作の結果を検証する
サンプル CSV ファイルの内容に基づいて、次の 5 つを追加する必要があります。
次の図は、サンプル CSV ファイルの内容を正常にインポートした結果の例です。
GCSV コネクタ スペースを調べる
実行プロファイルを作成した後、次の手順に従って、この新しいフル インポート実行プロファイルを実行します。
- 同期Service Managerに戻るします。
- GCSV コネクタ管理エージェントを選択します。
- それを右クリックし、[コネクタ スペースSearch選択します。
- スコープは既定値の Subtree のままにし、[Search] ボタンをクリックします。
次の図は、表示される [Search コネクタ スペース] ウィンドウの例です。
ユーザー オブジェクトの検証
検査するユーザー オブジェクトの 1 つを選択します。 次の図は、ユーザーの GCSV コネクタ スペース オブジェクトの例です。
DisplayName フィールドを調べると、修飾文字列が正しく解析された方法が示されます。
ProxyAddresses エントリ内のボタンをクリックすると、複数値の文字列も個々の値に適切に解析されたことが示されます。
グループ オブジェクトの検証
検査対象のグループ オブジェクトの 1 つを選択します。 次の図は、グループの GCSV コネクタ スペース オブジェクトの例です。
[メンバー] エントリ内のボタンをクリックすると、メンバー ファイルと関連付けられているレコード グループ ファイルのメンバー レコードがメンバーとして正しく読み込まれている方法が表示されます。
PowerShell 実行ログの検証
このガイドで提供されるサンプル PowerShell スクリプトは、CSV エントリを中央ログに追加して、実行の成功を示すように設計されています。
このログの既定の場所は C:\GCSV\PS_Run_Ledger.csvです。
ログを開くと、次の情報が表示されます。
"DateTime","Stage","Name","Type","Description"
"3/17/2024 1:05:44 PM","Pre","Import","Full","The Pre-Import PowerShell script was executed successfully."
"3/17/2024 1:05:46 PM","Pre","Import","Full","The Post-Import PowerShell script was executed successfully."
これら 2 つのレコードは、インポート前とインポート後の両方の PowerShell スクリプトが正常に実行されたことを示しています。 [種類] フィールドは、これらの PowerShell スクリプトがフル インポート中に実行されたことを示します。 スクリプトが Full 操作または Delta 操作中に実行されたかどうかを示す OperationType PowerShell 入力パラメーターからこれらの値を取得します。
付録 A - CSV ファイルのサンプル
次のセクションには、このガイドで使用される CSV ファイルが含まれています。
サンプル ユーザー CSV ファイル
コネクタの構成では、このガイドでは USERS.CSVのファイル 名を前提としています。
EmployeeID,DisplayName,AccountName,CountryCode,Manager,ProxyAddresses,IsActive,ProfilePic
E001,"Smith, John",JS001,1,,SMTP:john.smith@contoso.com;smtp:js001@contoso.com,True,SgBTADAAMAAxAA==
E002,"Doe, Jane",JD003,1,E001,SMTP:jane.doe@contoso.com;smtp:jd002@contoso.com,True,SgBEADAAMAAyAA==
E003,"Perez, Juan",JP003,1,E001,SMTP:juan.perez@contoso.com;smtp:jp003@contoso.com,False,SgBEADAAMAAyAA==
サンプル グループ CSV ファイル
コネクタの構成では、このガイドでは GROUPS.CSVのファイル 名を前提としています。
GroupID,DisplayName,Description,Owner
G001,Test Group (G001),"This group is for teams A, B, and C",E002
G002,Test Group (G002),"This group is for teams D, E, and F",E003
サンプル メンバー CSV ファイル
コネクタの構成では、このガイドでは MEMBERS.CSVのファイル 名を前提としています。
ParentID,MemberID,ObjectType
G001,E001,USER
G001,E002,USER
G001,E003,USER
G002,E001,USER
G002,E002,USER
G002,E003,USER
G002,G001,GROUP
G003,E001,USER
G003,E002,USER
G003,E003,USER
G003,G001,GROUP
付録 B - PowerShell ファイルのサンプル
この付録には、このガイドで使用される一連のサンプル PowerShell スクリプトが含まれています。 次のセクションでは、次の場合に行う必要があるいくつかの考慮事項について詳しく説明します
重要
PowerShell スクリプトでコマンドを使用 write-host
すると、スクリプトの実行が失敗します。
サンプルのインポート前 PowerShell スクリプト
コネクタの構成では、このガイドでは PRE-IMPORT.PS1のファイル 名を前提としています。
param ([string]$OperationType)
[string]$stage = "Pre"
[string]$operation = "Import"
[string]$filePath = "C:\GCSV\PS_Run_Ledger.csv"
# Create a new record
$record = [PSCustomObject]@{
"DateTime" = (Get-Date).ToString()
"Stage" = $stage
"Type" = $OperationType
"Name" = $operation
"Description" = "The $stage-$operation PowerShell script was successfully executed before a $OperationType-$operation."
}
$record | Export-Csv -Path $FilePath -NoTypeInformation -Append
PowerShell スクリプトのインポート後のサンプル
コネクタの構成では、このガイドでは POST-IMPORT.PS1のファイル 名を前提としています。
param ([string]$OperationType)
[string]$stage = "Post"
[string]$operation = "Import"
[string]$filePath = "C:\GCSV\PS_Run_Ledger.csv"
# Create a new record
$record = [PSCustomObject]@{
"DateTime" = (Get-Date).ToString()
"Stage" = $stage
"Type" = $OperationType
"Name" = $operation
"Description" = "The $stage-$operation PowerShell script was successfully executed after a $OperationType-$operation."
}
$record | Export-Csv -Path $FilePath -NoTypeInformation -Append
サンプルのエクスポート前 PowerShell スクリプト
コネクタの構成では、このガイドでは PRE-EXPORT.PS1のファイル 名を前提としています。
param ([string]$OperationType)
[string]$stage = "Pre"
[string]$operation = "Export"
[string]$filePath = "C:\GCSV\PS_Run_Ledger.csv"
# Create a new record
$record = [PSCustomObject]@{
"DateTime" = (Get-Date).ToString()
"Stage" = $stage
"Type" = $OperationType
"Name" = $operation
"Description" = "The $stage-$operation PowerShell script was successfully executed before a $OperationType-$operation."
}
$record | Export-Csv -Path $FilePath -NoTypeInformation -Append
PowerShell スクリプトのエクスポート後のサンプル
コネクタの構成では、このガイドでは POST-EXPORT.PS1のファイル 名を前提としています。
param ([string]$OperationType)
[string]$stage = "Post"
[string]$operation = "Export"
[string]$filePath = "C:\GCSV\PS_Run_Ledger.csv"
# Create a new record
$record = [PSCustomObject]@{
"DateTime" = (Get-Date).ToString()
"Stage" = $stage
"Type" = $OperationType
"Name" = $operation
"Description" = "The $stage-$operation PowerShell script was successfully executed after a $OperationType-$operation."
}
$record | Export-Csv -Path $FilePath -NoTypeInformation -Append