【Powershell】「実行した」くらいのログを取りながら、共有フォルダ内のファイルのセッション切断をする(Start-Transcript、Close-SmbOpenFile)

【ツールの概要】
・該当のフォルダ内の「.pdf」の拡張子のセッションを切断する。
・標準出力(かな?エラー出力も出るけど全部かわかりません)をログとして記録する。
 Linuxとかの「tee」コマンドと似たような感じで記録する。

【環境(使っている環境)】
Windows Server 2012 R2
Powershell ver4.0
・実行には管理者権限が必要です

【ソース(closesmb.ps1)】

$Today=(Get-Date).ToString("yyyyMMdd_HHmmss")

Start-Transcript -path "D:\Project\CloseSmbFile\log\transcript-$($Today).txt" -Append

Write-Output "切断対象リスト"
Get-SmbOpenFile | Where-Object -Property Path -Match "E:\pdfホルダー" | Where-Object -Property Path -Match ".pdf"| %{echo $_} | Format-List


Write-Output "切断します"
Get-SmbOpenFile | Where-Object -Property Path -Match "E:\pdfホルダー" | Where-Object -Property Path -Match ".pdf"| Close-SmbOpenFile -force
Write-Output "切断完了しました"


Stop-Transcript

【説明】
・1行目はlogファイル名用の時間取得です。
・2行目、Start-Transcript でその後のコマンドの出力をlogファイルに"も"出力します。-Append パラメータで追記を許可します(秒単位で別のlogファイルにはなりますが)。
・3、5,7行目、Write-Output は標準出力としてlogにも記録されます。Write-Hostでも同様に・・・(のはず)。
・4行目、Get-SmbOpesnFile で「開いているファイル」の一覧が呼べます。パイプで条件を指定し、Format-List で出力します。
・6行目、再度Get-SmbOpesnFile の結果から同じ条件で出力された一覧のそれぞれの要素(ファイル)に、Close-SmbOpenFileを実行します。
・8行目、Stop-Transcript でのlog出力を終了します。
・ちょっと冗長な記述ですが、わかりやすく、ということで。。

【総評】
log専用に関数を作ったりするほどじゃないな、ってときとかに便利ですね、Start-Transcript。
実運用はもっと複雑な条件だったりすると思うので、ここまで小さいスクリプトじゃないと思いますが、
ちょろっと作るけど一応logでも記録したいなって時にはよいですね、実行バージョンとかも出ますし。