【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})
