【Powershell】EWS Managed API のTraceログを利用する

PowershellからEWS Managed APIを使う時に、Traceを使う方法の備忘録


Excchange Web Serviceをつかっていて、AutoDiscoverでなんどもコケたので、エラーを調べるための情報を探したらMicrosoftの情報がヒットしました。
Trace request and response for trouble shooting of EWS Managed API

いつもどおりC#の情報なのですが、TraceListener Classをつくってオブジェクトを作りましょう、とあります。

Powershellで作ろうとすると、クラスがないのですが、C#のソースを書いてAdd-Typeすればつくれるそうで、
サンプルソース参考にしながら動かしてみたのがこちら。

param(
$ExchangeUser = "user01@xxx.onmicrosoft.com" ,# Office365に接続するログインIDとパスワードです
$ExchangePassword = "xxxxxxxx"
)
#PowerShellにOffice365のExchange Web Services Managed APIをImport
$EWS_DLL = "C:\Program Files\PackageManagement\NuGet\Packages\exchange.webservices.managed.api.2.2.1.2\lib\net35\Microsoft.Exchange.WebServices.dll"
Import-Module  $EWS_DLL

#EWSのTrace Logのファイルを指定する C#の形式にする
$TraceLog ="C:\\log\\Trace.log"
#TraceListner classのソースをヒアドキュメントで書きます。
$Source = @"
  using System;
  using System.Text;
  using Microsoft.Exchange.WebServices.Data;
  public class TraceListener : Microsoft.Exchange.WebServices.Data.ITraceListener
       {
          public void Trace(string traceType, string traceMessage)
          {
              CreateXMLTextFile(traceType, traceMessage.ToString());
          }
          private void CreateXMLTextFile(string fileName, string traceContent)
          {           
             string strPath = "$TraceLog";
              System.IO.FileStream fs;
              if (System.IO.File.Exists(strPath) == false)
               {
                  fs = System.IO.File.Create(strPath);
              }
              else
              {
                  fs = System.IO.File.OpenWrite(strPath);
              }
              fs.Close();
              // Create an instance of StreamWriter to write text to a file.
              System.IO.StreamWriter sw = System.IO.File.AppendText(strPath);
               sw.WriteLine(System.DateTime.Now.ToString() + ": " + traceContent);
              sw.Close();
          }
      }
"@
Add-Type -ReferencedAssemblies $EWS_DLL -TypeDefinition $Source -Language CSharp

$ExchangeCredential = New-Object Microsoft.Exchange.WebServices.Data.WebCredentials($ExchangeUser,$ExchangePassword)  

$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService
$service.Credentials = $ExchangeCredential

# Enable Tracing
$service.TraceEnabled = $true
$service.TraceEnablePrettyPrinting = $true
$service.TraceFlags = [Microsoft.Exchange.WebServices.Data.TraceFlags]::All
$service.TraceListener = new-object TraceListener

#2007以降のEXchangeは自己署名付き X509 証明書を使用して、EWS からの呼び出しを認証します。
#ManagedAPIを使う場合、CallBack Method(Script Block)を指定しないとエラーを起こします。詳細は下記を参照してください。
#https://docs.microsoft.com/ja-jp/exchange/client-developer/exchange-web-services/how-to-validate-a-server-certificate-for-the-ews-managed-api
$service.AutodiscoverUrl($ExchangeUser, {$true})

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください