【PowerShell】Streamの閲覧履歴を取得する【CSV】

Microsoft365
スポンサーリンク

社内のe-Learning的なサービスをMicrosoft Streamを利用します。e-Learningの講師から受講者がきちんとビデオを閲覧しているのか気になるので閲覧履歴を確認できないかと依頼がありました。

【2023.02.08】
新Stream(SharePoint)に対応させました。以下のページを参照して下さい。

【2022.12.21】
Stream(クラシック)に対応しています。新Stream(SharePoint)には対応していません。

【2022.10.28】
2022/10/1よりPowerShellの基本認証アクセス
無効化されました。下記のソースで訂正線が引かれている部分は使用できません。詳細は以下のページを参照して下さい。

スポンサーリンク

PowerShellのおソース

PowerShellを使って閲覧ログを抜き出したいと思います。ソースは以下の通りです。

$Livecred = ConvertTo-SecureString "password" -AsPlainText -force | %{ New-Object System.Management.Automation.PSCredential("papa@papamamameyou.com",$_)} | % {Get-credential $_} 

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $LiveCred -Authentication Basic -AllowRedirection 

Import-PSSession $Session -AllowClobber 

Connect-MsolService -Credential $LiveCred

$NowDate = Get-Date

$logs = Search-UnifiedAuditLog -StartDate "2022/04/01" -EndDate $NowDate -RecordType MicrosoftStream -Operations "StreamInvokeVideoView" -ResultSize 5000


# CSV ファイルへの出力

$LogFileCSV = "C:\logs\stream.csv"
New-Item $LogFileCSV -ItemType file -Force
Foreach ($log in $logs)
{
    $data = (ConvertFrom-Json $log.AuditData)
    $output = $log.CreationDate.ToString() + "," + $log.UserIds + "," + $log.Operations + "," + $data.ClientIP + "," + $data.ResourceTitle + "," + $data.ObjectId

    Add-Content -path $LogFileCSV $output -Encoding String
}

Remove-PSSession $Session

Exchange Online に接続

最初の3ブロックはExchange Onlineに接続するためのおまじないです。使用するユーザーはログを閲覧取得できる権限を与えてください。

ログ取得コマンド

次の2ブロックが重要です。

Search-UnifiedAuditLog

がログを取得するコマンドです。

オプション
RecordType に MicrosoftStream
Operations に StreamInvokeVideoView
といれます。 StreamInvokeVideoViewがStreamの閲覧履歴を取得するパラメータです。

CSVファイルに出力する

あとは$logsで取得したログデータをForeachで回します。
ConvertFrom-Json をしないと取得できないデータもあります。ご注意ください。

CreationDate  …  閲覧した日時
UserIds       …  ユーザーID(メールアドレス)
Operations    …  StreamInvokeVideoView
ClientIP      …  閲覧元のIPアドレス
ResourceTitle …  閲覧したビデオのタイトル
ObjectId      …  閲覧したビデオのURL

ほかにもいろいろと取得できますが、自分に必要なのはこのくらいでした。

注意点

CreationDateの時刻が-9時間になっています。csvデータを整形する際に+9時間しましょう。
ビデオを最後まで視聴したかはわかりません。あくまで閲覧したかしてないかがわかります。最後まで視聴したかがわかる方法をご存じの方は教えてください。

コメント

タイトルとURLをコピーしました