Exchange サーバーへのリモート PowerShell アクセスを制御する

Microsoft Exchange のリモート PowerShell を使用すると、内部ネットワーク上またはインターネット上のリモート コンピューターから Exchange organizationを管理できます。 リモート PowerShell と Exchange 管理シェルを使用して、ユーザーが Exchange サーバーに接続できるようにするか、無効にできます。 リモート PowerShell の詳細については、「Exchange Server PowerShell (Exchange 管理シェル)」を参照してください。

リモート PowerShell に関するその他の管理タスクについては、「リモート PowerShell を使用した Exchange サーバーへの接続」を参照してください。

はじめに把握しておくべき情報

  • 各手順の推定完了時間:5 分未満

  • 既定では、すべてのユーザー アカウントはリモート PowerShell にアクセスできます。 ただし、実際にリモート PowerShell を使用して Exchange サーバーに接続するには、ユーザーは管理役割グループのメンバーであるか、ユーザーが Exchange コマンドレットを実行できる管理役割に直接割り当てられている必要があります。 役割グループと管理ロールの詳細については、「Exchange Serverアクセス許可」を参照してください。

    重要

    organizationでリモート PowerShell アクセスを迅速かつグローバルに無効にする必要がある場合は、管理者アカウント、サービス アカウント、またはリモート PowerShell アクセスが必要な正常性監視メールボックスを考慮せずに、などのGet-User | Set-User -RemotePowerShellEnabled $falseコマンドに注意してください。 この記事の手順を使用して、リモート PowerShell アクセスを選択的に削除するか、グローバル削除コマンドで次の構文を使用して、必要なユーザーのアクセスを保持します Get-User | Where-Object {$_.UserPrincipalName -ne 'admin1@contoso.com' -and $_.UserPrincipalName -ne 'admin2@contoso.com'...} | Set-User -RemotePowerShellEnabled $false

    誤ってリモートの PowerShell アクセスからロックアウトした場合は、Exchange Management Shell スナップイン (Add-PSSnapIn Microsoft.Exchange.Management.PowerShell.SnapIn) を直接読み込んでアクセスできるようにする、非常に推奨されない方法を使用する必要があります。 このメソッドで使用している時間と変更を最小限に抑えます。 1 つのアカウントを修正し、Exchange 管理シェルを開いて追加の変更を行います。

  • PowerShell を使用してこれらの手順を実行することしかできません。 オンプレミスの Exchange 組織で Exchange 管理シェルを開く方法については、「 Open the Exchange Management Shell」をご覧ください。

  • Exchange の OPATH フィルター構文の詳細については、「 その他の OPATH 構文情報」を参照してください。

  • この手順を実行する際には、あらかじめアクセス許可が割り当てられている必要があります。 必要なアクセス許可を確認するには、 Exchange インフラストラクチャと PowerShell のアクセス許可に関する記事の「リモート PowerShell」エントリを参照してください。

  • サード パーティ製ツールを使用してユーザーのメール アドレスをカスタマイズする場合は、この記事の手順を実行する前に、影響を受けるユーザーのメール アドレス ポリシーを無効にする必要があります。 そうしないと、[ ユーザーの設定 ] コマンドによって、ユーザーのメール アドレスが、該当するメール アドレス ポリシーと一致するように変更されます。 ユーザーのメール アドレス ポリシーを無効にするには、 Set-Mailbox コマンドレットで EmailAddressPolicyEnabled パラメーターの値を$falseに設定します。

ヒント

問題が発生する場合 Exchange Serverフォーラムでヘルプを依頼してください。

ユーザーのリモート PowerShell アクセスを表示する

特定のユーザーのリモート PowerShell アクセス状態を表示するには、UserIdentity> をユーザーの名前またはユーザー プリンシパル名 (UPN) に置き換え<、次のコマンドを実行します。

Get-User -Identity "<UserIdentity>" | Format-List RemotePowerShellEnabled

すべてのユーザーのリモート PowerShell アクセス状態を表示するには、次のコマンドを実行します。

Get-User -ResultSize unlimited | Format-Table Name,DisplayName,RemotePowerShellEnabled -AutoSize

リモート PowerShell にアクセスできないすべてのユーザーを表示するには、次のコマンドを実行します。

Get-User -ResultSize unlimited -Filter 'RemotePowerShellEnabled -eq $false'

リモート PowerShell にアクセスできるすべてのユーザーを表示するには、次のコマンドを実行します。

Get-User -ResultSize unlimited -Filter 'RemotePowerShellEnabled -eq $true'

Exchange 管理シェル を使用して、ユーザーのリモート PowerShell へのアクセスを有効または無効にします。

この例では、Therese Lindqvist というユーザーのリモート PowerShell アクセスを無効にします。

Set-User "Therese Lindqvist" -RemotePowerShellEnabled $false

この例では、Sirirat Kitjakarn という名前のユーザーのリモート PowerShell へのアクセスを有効にします。

Set-User "Sirirat Kitjakarn" -RemotePowerShellEnabled $true

Exchange 管理シェルを使用して、多くのユーザーのリモート PowerShell アクセスを無効にする

特定の既存のユーザー グループのリモート PowerShell アクセスを禁止するには、次のオプションを使用できます。

  • 既存の属性に基づいてユーザーをフィルター処理する: このメソッドは、ターゲット ユーザー アカウントがすべて一意のフィルター可能な属性を共有することを前提としています。 Title、Department、住所情報、電話番号などの一部の属性は、 Get-User コマンドレットを使用した場合にのみ表示されます。 CustomAttribute1 ~ 15 のようなその他の属性は、 Get-Mailbox コマンドレットを使用した場合にのみ表示されます。

  • 特定のユーザーの一覧を使用する: 特定のユーザーの一覧を生成した後、その一覧を使用してリモート PowerShell へのアクセスを無効にすることができます。

既存の属性に基づいてユーザーにフィルターをかける

既存の属性に基づいて任意の数のユーザーに対してリモート PowerShell へのアクセスを無効にするには、次の構文を使用します。

$<VariableName> = <Get-Mailbox | Get-User> -ResultSize unlimited -Filter <Filter>

$<VariableName> | foreach {Set-User -Identity $_ -RemotePowerShellEnabled $false}

次の使用例は、 Title 属性に "Sales Associate" という値が含まれるすべてのユーザーのリモート PowerShell へのアクセスを削除します。

$DSA = Get-User -ResultSize unlimited -Filter "(RecipientType -eq 'UserMailbox') -and (Title -like '*Sales Associate*')"

$DSA | foreach {Set-User -Identity $_ -RemotePowerShellEnabled $false}

特定のユーザーのリストを使用する

特定のユーザーの一覧に対してリモート PowerShell へのアクセスを無効にするには、次の構文を使用します。

$<VariableName> = Get-Content <text file>

$<VariableName> | foreach {Set-User -Identity $_ -RemotePowerShellEnabled $false}

この例では、テキスト ファイル C:\My Documents\NoPowerShell.txt を使用して、ユーザー プリンシパル名 (UPN) によってユーザーを識別します。 テキスト ファイルには、次のように各行に 1 つの UPN が含まれている必要があります。

akol@contoso.com
tjohnston@contoso.com
kakers@contoso.com

更新するユーザー アカウントをテキスト ファイルに設定したら、次のコマンドを実行します。

$NPS = Get-Content "C:\My Documents\NoPowerShell.txt"

$NPS | foreach {Set-User -Identity $_ -RemotePowerShellEnabled $false}