昨年末ごろから、Exchange 2013の管理系の自作スクリプトが失敗する様になったという話を色々な所で耳にするようになりました。
Exchange Server 2013のコンソールからExchange管理シェルのプログラムを起動すると、黄色い字で「○○○(サーバ名)に接続しています/接続しました」と表示されます。
ただ、実際には別のサーバに接続しているケースがあります。例えば、下のスクリーンショットではmbxcas02ではなくmbxcas01に接続していることが、Get-ExchangeCertificateコマンドレットの実行結果からお分かり頂けると思います。
これは、Exchange Server 2013のCU 11から実装されたExchange管理シェル(EMS)の仕様変更に依るものです。
簡単に説明すると、今まではExchange管理シェルは接続した先のサーバにそのまま接続されていましたが、Exchange 2013 CU11からはCAS(クライアントアクセスサーバ)に接続した場合は自分のメールボックスの存在するメールボックスサーバ(メールボックスを持たないアカウントの場合は調停メールボックスの存在するサーバ)に接続するようになりました。
なので、ローカルサーバへのオペレーションだと思って実行しているコマンドは違うサーバに対して実行されてしまうことがあります。接続先のサーバが異なるADサイトに存在をしている場合、AD情報の同期タイミングも考慮しなければいけません。
なお、CASの役割がインストールされていないサーバ(メールボックスのみやエッジトランスポートサーバ)の場合は影響ありません。
基本的な対処策としては、例えば Get-ExchangeCertificate であればGet-ExchangeCertificate -Server (hostname)などとして、明示的に実行先のサーバを指定するようにするという形になります。
いままで通りでやりたい場合は、PowerShellを管理者権限で立ち上げたあと、
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn
と実行すれば今までと同じ感覚で利用できますので、私なんかは.ps1スクリプトにしてデスクトップに置いておいてます。
Pingback: Exchange 2013 CU12の管理シェルの変更点 | 日々徒然