【ツールの概要】
・該当のフォルダ内の「.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でも記録したいなって時にはよいですね、実行バージョンとかも出ますし。