Cmdlets for OData

Build 25.0.9434

接続の確立

CData Cmdlets ユーザーは、データモジュールをインストールし、接続プロパティを設定してスクリプトを開始できます。このセクションでは、CSV インポートおよびエクスポートcmdlet などのネイティブPowerShell cmdlet でOData Cmdlets を使用する例を示します。

OData への接続

OData に接続するには、URL を有効なOData サービスルートURI に設定する必要があります。 OData サービスにルートドキュメントがない場合、テーブルとして公開したい特定のエンティティをFeedURL に指定してください。

また、CacheLocation を指定してOData 組織のメタデータを格納することもできます。これにより、CData Cmdlets PowerShell Module for OData は各接続でメタデータの要求を送信する必要がなくなります。

OData への認証

OData は、以下を経由する認証をサポートします。

  • HTTP
  • Kerberos
  • SharePoint Online
  • OAuth
  • Azure AD

HTTP 認証スキーム

HTTP で認証する場合は、次の表に従ってAuthScheme を設定します。

Scheme AuthScheme その他の設定
None None 認証を必要としない場合に使用。
Basic Basic UserPassword
NTLM(1) NTLM UserPassword
Digest(サポートされている場合) Digest UserPassword

(1) NTLM は、Windows ユーザー資格情報を使用して、LAN でよく使用されるWindows 認証の一種です。Windows マシンから接続していない場合や、現在ログインしているユーザーアカウントを接続に使用しない場合は、User およびPassword を設定します。

Kerberos

Kerberos を使用してOData への認証を行うには、次のプロパティを設定します。

  • hive.server2.authentication:Kerberos
  • AuthSchemeNEGOTIATE
  • KerberosKDC:Kerberos KDC マシンのホスト名またはIP アドレス。
  • KerberosSPN:OData のKerberos プリンシパルのサービスとホスト。この値は、principal value の'@' 記号のすぐ前にあります。

SharePoint Online

SharePoint Online 接続は、SharePoint Online cookie を取得することで確立できます。認証するには、次のプロパティを設定します。

  • AuthSchemeSharePointOnline
  • User:認証するSharePoint Online ユーザーアカウント。
  • Password:認証するアカウントのパスワード。

OAuth

OData のすべてのOAuth フローでこの認証を有効にするには、カスタムOAuth アプリケーションを作成し、AuthSchemeOAuth に設定する必要があります。

以下のサブセクションでは、3つの一般的な認証フローでのOData への認証について詳しく説明します。カスタムOAuth アプリケーションの作成については、カスタムOAuth アプリケーションの作成 を参照してください。 OData で利用可能な接続文字列プロパティの全リストは、Connection を参照してください。

デスクトップアプリケーション

カスタムOAuth アプリケーションの資格情報を使用して認証するには、OAuth アクセストークンを取得し、更新する必要があります。これらを設定すると、接続の準備が整います。

次のプロパティを設定します。

  • OAuthClientId:カスタムOAuth アプリケーションの登録時に割り当てられたクライアントId。
  • OAuthClientSecret:カスタムOAuth アプリケーションの登録時に割り当てられたクライアントシークレット。
  • CallbackURL:カスタムOAuth アプリケーションの登録時に定義されたリダイレクトURI。

接続すると、本製品 はデフォルトブラウザでOData のOAuth エンドポイントを開きます。ログインして、アプリケーションにアクセス許可を与えます。

アクセストークンの期限が切れたときは、本製品 は自動でアクセストークンをリフレッシュします。

OAuth アクセストークンの自動リフレッシュ:

本製品 がOAuth アクセストークンを自動的にリフレッシュするようにするには:

  1. はじめてデータに接続する前に、次の接続パラメータを設定します。
  2. その後のデータ接続では、以下を設定します。

OAuth アクセストークンの手動リフレッシュ:

OAuth アクセストークンを手動でリフレッシュするために必要な唯一の値は、OAuth リフレッシュトークンです。

  1. ExpiresIn 期間(GetOAuthAccessToken が返す)が経過した後にOAuthAccessToken を手動でリフレッシュするには、RefreshOAuthAccessToken ストアドプロシージャを呼び出します。
  2. 次の接続プロパティを設定します。

    • OAuthClientId:カスタムOAuth アプリケーション設定のクライアントId。
    • OAuthClientSecret:カスタムOAuth アプリケーション設定のクライアントシークレット。

  3. RefreshOAuthAccessToken を呼び出し、OAuthRefreshToken にGetOAuthAccessToken によって返されたOAuth リフレッシュトークンを設定します。
  4. 新しいトークンが取得できたら、OAuthAccessToken プロパティにRefreshOAuthAccessToken によって返された値を設定します。これで新規接続が開かれます。

OAuth リフレッシュトークンを保存し、OAuth アクセストークンの有効期限が切れた後に手動でリフレッシュできるようにします。

ヘッドレスマシン

ヘッドレスマシンに置かれているリソースにログインする必要がある場合は、インターネットブラウザに対応した別の端末で認証する必要があります。 以下のいずれかの方法で行います。

  • オプション1:OAuthVerifier 値を取得します。
  • オプション2:インターネットブラウザに対応したマシンに本製品 をインストールし、通常のブラウザベースのフローで認証した後でOAuth 認証値を転送します。

オプション1またはオプション2を実行後、ヘッドレスマシンからアクセストークンを自動的にリフレッシュするようにドライバーを設定します。

オプション1:Verifier コードを取得および交換

Verifier コードを取得するには、次のようにOAuth Authorization URL で認証する必要があります。

  1. インターネットブラウザに対応したマシンから認証してOAuthVerifier 接続プロパティを取得します。

    次のプロパティを設定します。

    • InitiateOAuthOFF
    • OAuthClientId:カスタムOAuth アプリケーションの登録時に割り当てられたクライアントId。
    • OAuthClientSecret:カスタムOAuth アプリケーションの登録時に割り当てられたクライアントシークレット。

  2. GetOAuthAuthorizationUrl ストアドプロシージャを呼び出します。ストアドプロシージャは、カスタムOAuth アプリケーションが登録されたときに構築されたCallbackURL を返します。 (カスタムOAuth アプリケーションの作成 を参照してください。)

    このURL をコピーして、新しいブラウザのタブに貼り付けます。

  3. ログインして、本製品 にアクセス許可を与えます。OAuth アプリケーションは、code というパラメータを付加したリダイレクトURI にリダイレクトします。このパラメータの値を控えておきます。OAuthVerifier 接続プロパティを設定するために、後で必要になります。

  4. OAuth verifier code をOAuth リフレッシュトークンおよびアクセストークンと交換します。ヘッドレスマシンでは、OAuth 認証値を取得するには次のプロパティを設定します。

    • InitiateOAuthREFRESH
    • OAuthVerifier:控えておいたverifier code(リダイレクトURI のcode パラメータの値)。
    • OAuthSettingsLocation:暗号化されたOAuth 認証値を指定されたファイルに永続化。
    • OAuthClientId:カスタムOAuth アプリケーション設定のクライアントId。
    • OAuthClientSecret:カスタムOAuth アプリケーション設定のクライアントシークレット。

  5. 接続をテストしてOAuth 設定ファイルを生成します。

  6. これらのプロパティを再設定すると、接続の準備が整います。

    • InitiateOAuthREFRESH
    • OAuthSettingsLocation:暗号化されたOAuth 認証値を含むファイル。アクセストークンの自動リフレッシュを有効にするには、このファイルが本製品 に読み書きのアクセス許可を与えることを確認してください。
    • OAuthClientId:カスタムOAuth アプリケーションの登録時に割り当てられたクライアントId。
    • OAuthClientSecret:カスタムOAuth アプリケーションの登録時に割り当てられたクライアントシークレット。

オプション2:OAuth 設定を転送

ヘッドレスマシンでの接続に先立ち、インターネットブラウザに対応したデバイスでドライバーとの接続をインストールし、作成する必要があります。上述の「デスクトップアプリケーション」の説明に従って、接続プロパティを設定します。

「デスクトップアプリケーション」の手順が完了すると、生成された認証値は、OAuthSettingsLocation で指定されたパスに暗号化されて書き込まれます。デフォルトのファイル名はOAuthSettings.txt です。

接続をテストしてOAuth 設定ファイルを生成し、OAuth 設定ファイルをヘッドレスマシンにコピーします。

ヘッドレスマシンでデータに接続するには、次の接続プロパティを設定します。

  • InitiateOAuthREFRESH
  • OAuthSettingsLocation:ブラウザでマシンからコピーしたOAuth 設定ファイルへのパス。アクセストークンの自動リフレッシュを有効にするために、このファイルが本製品 に読み書きのアクセス許可を与えることを確認してください。
  • OAuthClientId:カスタムOAuth アプリケーションの登録時に割り当てられたクライアントId。
  • OAuthClientSecret:カスタムOAuth アプリケーションの登録時に割り当てられたクライアントシークレット。

Azure AD

AzureAD は、Azure を経由するOAuth の形式をサポートします。AuthSchemeAzureAD に設定します。

CData Cmdlets PowerShell Module for OData は、自動的に内部で既知のAzure URL を処理するので、OAuthAccessTokenURLOAuthAuthorizationURLOAuthRefreshTokenURLOAuthRequestTokenURL のような通常のOAuth 接続プロパティを指定する必要は ありません

この接続メソッドには、以下のような他の接続プロパティが必要な場合があります。

  • ScopeInitiateOAuth がGETANDREFRESH に設定されている場合は、資格情報の取得中にScope がMicrosoft に送信されるため、これを指定する必要があります。これはサービスによって異なりますが、一般的には、リソース(URL のhostname)とパーミッション名の組み合わせになります。例:https://host/user_impersonation
  • AzureADResource:Microsoft ログイン時に認証する特定のAzure リソース。 何も指定されていない場合は、ユーザーアカウントのデフォルトリソースが使用されます。
  • AzureADTenant:Microsoft ログイン中に認証する特定のAzure テナント。何も指定されていない場合は、common ログインエンドポイントを介したユーザーアカウントのデフォルトテナントが使用されます。これは、接続する特定のリソースや、リソースが別のテナントに保存されている場合などによっては、正しくないことがあります。

それ以外は、認証手順はデスクトップ認証、Web 認証、ヘッドレスマシン認証の説明と同じです。

Azure AD で使用するカスタムOAuth アプリケーションの作成については、カスタムOAuth アプリケーションの作成 を参照してください。

セキュアなOData への接続

デフォルトでは、本製品 はサーバーの証明書をシステムの信頼できる証明書ストアと照合してSSL/TLS のネゴシエーションを試みます。別の証明書を指定するには、利用可能なフォーマットについてSSLServerCert プロパティを参照してください。

接続オブジェクトの作成

Connect-OData cmdlet を使って、別のcmdlet に渡すことができる接続オブジェクトを作成します。

$conn = Connect-OData -User 'MyUser' -Password 'MyPassword' -URL 'http://myserver/myOrgRoot'

データの取得

Select-OData cmdlet はデータを取得するためのネイティブなPowerShell インターフェースを提供します。

$results = Select-OData -Connection $conn -Table "Lead" -Columns @("Id, FullName") -Where "FirstName='Bartholomew'"
Invoke-OData cmdlet はSQL インターフェースを提供します。このcmdlet を使うと、Query パラメータを介してSQL クエリを実行できます。

cmdlet 出力のパイプ処理

cmdlet は行オブジェクトをパイプラインに一度に一行ずつ返します。以下は、結果をCSV ファイルにエクスポートします。

Select-OData -Connection $conn -Table Lead -Where "FirstName <> 'Bartholomew'" | Select -Property * -ExcludeProperty Connection,Table,Columns | Export-Csv -Path c:\myLeadData.csv -NoTypeInformation

Select-OData からの結果をSelect-Object cmdlet にパイプして、Export-CSV cmdlet にパイプする前にいくつかのプロパティを実行していることがわかるでしょう。これをする理由は、CData Cmdlets は接続、テーブル、およびカラムの情報を結果セットの各行オブジェクトに追加しますが、必ずしもその情報がCSV ファイルに必要ではないからです。

ただし、これによってcmdlet の出力を別のcmdlet にパイプすることが容易になります。以下に、結果セットをJSON に変換する例を示します。

 
PS C:\> $conn  = Connect-OData -User 'MyUser' -Password 'MyPassword' -URL 'http://myserver/myOrgRoot'
PS C:\> $row = Select-OData -Connection $conn -Table "Lead" -Columns (Id, FullName) -Where "FirstName <> 'Bartholomew'" | select -first 1
PS C:\> $row | ConvertTo-Json
{
  "Connection":  {

  },
  "Table":  "Lead",
  "Columns":  [

  ],
  "Id":  "MyId",
  "FullName":  "MyFullName"
} 

データの削除

以下は、抽出条件に合うあらゆるレコードを削除します。

Select-OData -Connection $conn -Table Lead -Where "FirstName = 'Bartholomew'" | Remove-OData

データの変更

cmdlet はデータクレンジング同様、データの変換を容易にします。次の例は、レコードがすでに存在するかどうか、挿入する前に更新が必要かどうかをチェックしてから、CSV ファイルのデータをOData にロードします。

Import-Csv -Path C:\MyLeadUpdates.csv | %{
  $record = Select-OData -Connection $conn -Table Lead -Where ("Id = `'"+$_.Id+"`'")
  if($record){
    Update-OData -Connection $conn -Table Lead -Columns @("Id","FullName") -Values @($_.Id, $_.FullName) -Where "Id  = `'$_.Id`'"
  }else{
    Add-OData -Connection $conn -Table Lead -Columns @("Id","FullName") -Values @($_.Id, $_.FullName)
  }
}

Copyright (c) 2025 CData Software, Inc. - All rights reserved.
Build 25.0.9434