REST API 接続での Invoke-Command シナリオの回避策
同じウィンドウ内の Exchange Online または Security & Compliance PowerShell への複数の接続では、Invoke-Command コマンドレットを使用して、特定のリモート PowerShell セッションでスクリプトまたはコマンドを実行します。 ただし、Invoke-Command コマンドレットは、Exchange Onlineまたはセキュリティ & コンプライアンス PowerShell への REST API 接続では機能しません。
この記事では、 Invoke-Command コマンドを使用するシナリオの REST API の代替手段について説明します。
シナリオ 1: Exchange Online コマンドレットを実行する
この例では、他のユーザー ($Us = $User.Identity
) の ID を検索します。
ヒント
の値を取得するには、その他の $User
コマンドが $Us
必要でした。 これらのコマンドは重要ではありません。 使用されている全体的なアプローチが重要です。
リモート PowerShell セッションの場合: Get-PSSession コマンドレットを使用して、 という名前
$Session
の変数にリモート PowerShell セッションの詳細を格納し、次のコマンドを実行します。Invoke-Command -Session $Session -ScriptBlock {Get-User $Using:Us | Select-Object DistinguishedName, ExternalDirectoryObjectId} -ErrorAction SilentlyContinue
REST API セッション: 次のコマンドを実行します。
Get-User $Us | Format-List DistinguishedName, ExternalDirectoryObjectId
次の例では、グループ メンバーの ID を検索します。
リモート PowerShell セッションの場合: Get-PSSession コマンドレットを使用して、 という名前
$Session
の変数にリモート PowerShell セッションの詳細を格納し、次のコマンドを実行します。Invoke-Command -Session $Session -ScriptBlock {Get-Recipient -Filter "Members -eq '$($User.DistinguishedName)'" -RecipientTypeDetails MailUniversalDistributionGroup | Select-Object DisplayName, ExternalDirectoryObjectId, RecipientTypeDetails} -ErrorAction SilentlyContinue -HideComputerName
REST API セッション: 次のコマンドを実行します。
Get-Recipient -Filter "Members -eq '$($User.DistinguishedName)'" -RecipientTypeDetails MailUniversalDistributionGroup | Format-List DisplayName, ExternalDirectoryObjectId, RecipientTypeDetails
シナリオ 2: コマンドレットExchange Online実行し、特定のプロパティを展開する
次の使用例は、GrantSendOnBehalfTo アクセス許可が設定されているすべてのメールボックスを検索し、メールボックスに対するアクセス許可を持つユーザーを返します。
リモート PowerShell セッションの場合: Get-PSSession コマンドレットを使用して、 という名前
$Session
の変数にリモート PowerShell セッションの詳細を格納し、次のコマンドを実行します。Invoke-Command -Session $Session -ScriptBlock {Get-Mailbox -Filter "GrantSendOnBehalfTo -ne `$null" -ErrorAction SilentlyContinue | Select-Object ExternalDirectoryObjectId, GrantSendOnBehalfTo -ExpandProperty GrantSendOnBehalfTo}
REST API セッション: 次のコマンドを実行します。
$mailboxes = Get-Mailbox -Filter "GrantSendOnBehalfTo -ne `$null" foreach ($mailbox in $mailboxes) { $users = $mailbox | Select-Object GrantSendOnBehalfTo -ExpandProperty GrantSendOnBehalfTo | Get-User $users | Select-Object Name, Guid }
シナリオ 3: 複数のセッションが存在する場合、特定の PowerShell セッションでExchange Onlineコマンドレットを実行する
この例では、同じウィンドウに 2 つの PowerShell セッションを作成し、各セッションで Get-Mailbox コマンドレットを実行する方法を示します。
リモート PowerShell セッションでは、次の操作を行います。
Get-PSSession コマンドレットを使用して、最初のリモート PowerShell セッションの詳細を という名前
$Session1
の変数に格納します。Get-PSSession コマンドレットを使用して、2 番目のリモート PowerShell セッションの詳細を という名前
$Session2
の変数に格納します。次のコマンドを実行します。
Invoke-Command -Session $Session1 -ScriptBlock {Get-Mailbox -ResultSize 1} Invoke-Command -Session $Session2 -ScriptBlock {Get-Mailbox -ResultSize 1}
REST API セッションでは、次の手順を実行します。
最初の Connect-ExchangeOnline コマンドで、パラメーター Prefix と値 C1 を使用します。
次のコマンドを実行して、最初の REST API 接続の詳細を という名前
$ConnectionInfo1
の変数に格納します。$ConnectionInfo1 = Get-ConnectionInformation | Where-Object { $_.ModulePrefix -eq "C1"}
2 番目の Connect-ExchangeOnline コマンドで、パラメーター Prefix と値 C2 を使用します。
次のコマンドを実行して、 という名前
$ConnectionInfo2
の変数に 2 つ目の REST API 接続の詳細を格納します。$ConnectionInfo1 = Get-ConnectionInformation | Where-Object { $_.ModulePrefix -eq "C2"}
これで、どちらのセッションでもコマンドを実行できます。 次に例を示します。
$CommandStr1 = "Get-$($ConnectionInfo1.ModulePrefix)Mailbox -ResultSize 10" Invoke-Expression $CommandStr1
または
$CommandStr2 = "Get-$($ConnectionInfo2.ModulePrefix)Mailbox -ResultSize 10" Invoke-Expression $CommandStr2
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示