新Stream(SharePoint)に移行いたしました。e-Learningサイトにビデオデータを移行しましたので、それに合わせてPowerShellで閲覧履歴を取得する方法を修正しないといけません。今日はそんなお話です。
旧Streamから新Stream(SharePoint)への移行についてはこちらを参照ください。
PowerShellのおソース
新Stream(SharePoint)は単純にSharePoint上にビデオファイルが置かれているだけですので、SharePointに置かれたファイルのアクセス状況を取得します。
$secpasswd = ConvertTo-SecureString -String 'password' -AsPlainText -Force
$o365cred = New-Object System.Management.Automation.PSCredential ("papa@papamamameyou.com", $secpasswd)
Connect-ExchangeOnline -Credential $o365cred
$NowDate = Get-Date
$url = "https://xxxxxx.sharepoint.com/sites/testsite/Shared Documents/videos/*"
# 視聴履歴検索
$logs = Search-UnifiedAuditLog -StartDate "2023/02/01" -EndDate $NowDate -RecordType SharePointFileOperation -Operations @("FileAccessed","FileDownloaded") -ObjectIds $url -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
}
Disconnect-ExchangeOnline
解説
最初の3行はおまじないです。ソース上のアカウントとパスワードは変更してください。
以前と変わりなくSearch-UnifiedAuditLog関数を使用します。ただパラメータが異なります。
$logs = Search-UnifiedAuditLog -StartDate "2023/02/01" -EndDate $NowDate -RecordType SharePointFileOperation -Operations @("FileAccessed","FileDownloaded") -ObjectIds $url -ResultSize 5000
RecordTypeはSharePointになりましたので「SharePointFileOperation」にします。Operationはファイルアクセスとダウンロードの2つの行動を取得します。「FileAccessed」と「FileDownloaded」です。複数Operationに入れたい場合は配列にして入れることができます。ソースでは@(…)を使用しています。
新たに追加して使うパラメータはObjectIdsです。SharePointでは該当のファイル名のurlをいれます。上記ソースではワイルドカードを利用しています。そのフォルダの中のすべてのファイルのアクセス履歴を取得しています。
旧Streamの時と同じなのですが、確認できることはビデオファイルの閲覧だけで最後まで視聴したかはわかりません。
取得データ
$logsで取得したログデータをForeachで回します。
ConvertFrom-Json をしないと取得できないデータもあります。ご注意ください。
CreationDate … 閲覧した日時 UserIds … ユーザーID(メールアドレス) Operations … FileAccessed もしくは FileDownloaded ClientIP … 閲覧元のIPアドレス ResourceTitle … 閲覧したファイルのタイトル ObjectId … 閲覧したファイルのURL
問題点
ObjectIdに日本語のファイル名があると結果が0件になってしまいます。日本語がない場合はビデオファイルを直接指定しても取得可能です。どうやら日本語など2バイト文字を使用するとうまく検索できないようです。
暫定対策として上記ソースでしていますようにアスタリスクでそのフォルダにあるすべてのファイルのアクセスを取得して、そのデータ(この場合はcsv)からさらに該当するビデオだけを絞り込むプログラムを挟むようにしています。どなたか解決方法わかる方ご教示ください。
最後に
旧Streamのサービス終了が2024/2/15に決まりました。ありがとうStreamクラシック。さようならStreamクラシック。新Streamより好きだったよ…
コメント