【PowerShell】新Stream(SharePoint)で閲覧履歴を取得する【CSV】

Microsoft365
スポンサーリンク

新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より好きだったよ…

Stream (クラシック) の廃止に関する最新情報: 2024 年 2 月 15 日にサービス終了 - Windows Blog for Japan
※ 本ブログは、米国時間 1/12 に公開された “Update on Stream (Classic) retirement: Last day of service set for Feb 15, 2024” の抄訳です。 2021 年...

コメント

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