Quantcast
Channel: Microsoft Office 365 Community
Viewing all articles
Browse latest Browse all 476

PowerShell を使用した Office 365 のレポート作成

$
0
0

 

対象: 新Office365 Office 365 Enterprise, Office 365 Small Business, Office 365 Midsize Business

(この記事は 2014 年 8 月 6 日に Hey, Scripting Guy! Blog に投稿された記事 Use PowerShell for Office 365 Reportingの翻訳です。最新情報については、翻訳元の記事をご参照ください。)

 

概要: Windows PowerShell を使用して Office 365 レポート Web サービスを照会する方法について説明します。

  Scripting Guy さん、こんにちは。Office 365 管理ページには、さまざまなボタンから数多くのレポートを利用できますが、しかしコマンドレットでレポートを利用している人はあまり多くないようです。Windows PowerShell を使用して、レポートの作成を自動化したり、レポートの結果をカスタマイズしたりする方法はありませんか?

—GB

  こんにちは、GB さん。

Microsoft Scripting Guy こと Ed Wilson です。今朝、Zune でアリス クーパーでも聴こうかという気分の中、朝食にベーグルと 1 杯のコーヒーをとりました。Teresa がペルー産のオーガニック コーヒー豆を手に入れたんです。以前リマで Windows PowerShell のクラスを受け持っていたときから、私はすっかりペルー コーヒーのファンです。リマは魅力的な街で、一緒に仕事をした仲間も優秀な人たちばかりでした。ある日の午後にリマで撮った写真を載せておきます。

音楽、音楽プレーヤー、そして朝食と、今日はなんだかオールド スクール尽くしの 1 日になりそうです。

そうそう、オールド スクールと言えば…

Office 365 レポート Web サービスを使用する

Office 365 に関する情報のソースは、Office 365 レポート Web サービスから利用可能です。このサービスの説明と関連情報は、MSDN の「Office 365 レポート Web サービス」でご覧いただけます。Office 365 Web サービスは、開発者やカスタム レポートを作成する皆様を主な対象としています。レポートはすべて、管理ポータルで利用可能です。Windows PowerShell コマンドレットからアクセスできるレポートは、レポート Web サービス経由でアクセスできます。この Web サービスの使い方はとても簡単なので、Hey, Scripting Guy! ブログをご愛読いただいている皆様には朝飯前でしょう。

Office 365 レポート Web サービスで苦労するポイントとなるのが Invoke-RestMethodを呼び出す一環として渡されるクエリ文字列の作成ですが、スクリプト センターのリポジトリ「Office 365 レポート Web サービスに PowerShell からアクセスする (英語)」で Alan Byrne が作成したスクリプトを見たとき、クエリ文字列を簡単に作成する方法を思いつきました。Alan は Hey, Scripting Guy! ブログに何度か寄稿 (英語)してくれているので、遠慮せずコードを拝借したいと思います。

もちろん、コードは手を加える必要があるので、Alan から拝借したコードを次のように修正します。

$Root = "https://reports.office365.com/ecp/reportingwebservice/reporting.svc/" 

$Format = "`$format=JSON"

$WebService = "ConnectionbyClientTypeYearly"

$Select = "`$select=Date,ClientType,TenantName,Count" 

# Build report URL

$url = ($Root + $WebService + "/?" + $Select + "&" + $Format)  

使用するレポートに応じて、コードを 2 か所変更しました。$WebService変数には Office 365 レポート Web サービスの記事から取得した名前が格納されます。たとえば、このスクリプトでは ConnectionbyClientTypeYearlyレポートを照会します。MSDN によれば、このレポートには次のフィールドがあります。

  • ClientType
  • Count
  • Date
  • TenantGuid
  • TenantName

利用可能なフィールドの一覧を参考に、$Select変数を次のように修正します。

$Select = "`$select=Date,ClientType,TenantName,Count"

ConnectionbyClientType*には、次の 4 種類のレポートがあります。

  • ConnectionbyClientTypeDaily
  • ConnectionbyClientTypeWeekly
  • ConnectionbyClientTypeMonthly
  • ConnectionbyClientTypeYearly

メモ他にも ConnectionbyClientTypeDetail*という一連のレポートがあります。私は当初混同してしまったので、皆様もお気を付けください。これらのレポートは、指定できるフィールドが異なります。

いつものように保管されている資格情報を使用することにします。そのために XML ファイルから資格情報を読み取ります。次のようになります。

$cred = Import-Clixml C:\fso\ScriptingGuyCredential.xml

 

PowerShell はとっても便利

Windows PowerShell を知っている方は、PowerShell の万能性をよくご理解いただいていることでしょう。Invoke-RestMethodから取得した結果を Foreach-Objectコマンドレットにパイプ処理して、カスタム オブジェクトを作成します。カスタム オブジェクトの作成には Windows PowerShell 3.0 構文を使用します (この方法と、この方法を用いる理由については Hey, Scripting Guy! ブログの「PowerShell オブジェクトのレッスン: パート 3 (英語)」で取り上げました)。

カスタムの Windows PowerShell オブジェクトを作成して使用すると、何でも好きなことができるというメリットがあります。カスタム オブジェクトは次のようなスクリプトで作成します。

(Invoke-RestMethod -Credential $cred -uri $url).d.results   |

    Foreach-Object {

      [PSCustomObject] @{

        Date = $_.date.tostring("yyyy-MM-dd")

        WindowsLiveID = $_.WindowsLiveID

        UserName = $_.UserName

        ClientType = $_.ClientType

        Count = $_.Count } }  

さあ、このスクリプトでどんな処理をしましょうか。たとえば、返されたオブジェクトを Out-Gridviewにパイプ処理することができます。次のように、Count=$_.Countに続く 2 つの閉じ括弧の後にコードを追加します。

Count = $_.Count } }  | Out-GridView

テキスト ファイルに書き込むときに出力をきれいな表に整えるには、すべての変数に値を代入したスクリプトの冒頭にテキスト ファイルのパスを追加し、Count = Count スクリプトの後に Format-Tableコマンドレットを追加します。次のようになります。

$OutputFile = "c:\fso\connecttype.txt"    

 <# … #>

Count = $_.Count } }  |

Format-Table |  Out-File -FilePath $OutputFile -Encoding ascii

CSV ファイルへの書き込みには Export-CSVを使用します。次のようになります。

Count = $_.Count } }  | Export-Csv -Path $OutputFile

このように、レポートからオブジェクトを作成したら、後は自由に利用できます。スクリプト全文 (修正なし) は次のとおりです。

$cred = Import-Clixml C:\fso\ScriptingGuyCredential.xml

$Root = "https://reports.office365.com/ecp/reportingwebservice/reporting.svc/" 

$Format = "`$format=JSON"

$WebService = "ConnectionbyClientTypeYearly"

$Select = "`$select=Date,ClientType,TenantName,Count" 

# Build report URL

$url = ($Root + $WebService + "/?" + $Select + "&" + $Format)  

 

(Invoke-RestMethod -Credential $cred -uri $url).d.results   |

    Foreach-Object {

      [PSCustomObject] @{

        Date = $_.date.tostring("yyyy-MM-dd")

        WindowsLiveID = $_.WindowsLiveID

        UserName = $_.UserName

        ClientType = $_.ClientType

        Count = $_.Count } }  

GB さん、Windows PowerShell を使用して Office 365 レポート Web サービスを照会する方法については以上です。引き続き Office 365 Week として、明日も便利な情報をお届けします。

Twitter (英語)Facebook (英語)でも情報を発信していますので、ぜひフォローをお願いします。ご不明な点がございましたら、私のアドレス (scripter@microsoft.com) 宛てに電子メールをお送りいただくか、公式の Scripting Guys フォーラム (英語)に投稿してください。それではまた明日お会いしましょう。

Microsoft Scripting Guy こと Ed Wilson


Viewing all articles
Browse latest Browse all 476

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>