【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すればつくれるそうで、
サンプルソース参考にしながら動かしてみたのがこちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
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}) |