この記事はPowerShell Advent Calendar 2017の15日目です。
はじめに
サーバを触る時、ログやエビデンスを取得して欲しい。
プロマネとしてお仕事させて頂く際、作業を担当してくださる方々にいつもお願いをしていました。
手順は事前に十分な確認を取り、トラブルにならないように備えるのが当然と考えますが、手を動かすのは人。
何も起こらなければ取り敢えずOKだとしても、作業がトラブルにつながる事も十分にありえます。
それを少しでも低減しトラブル時はログを置いやすくするべく、Powershellによる作業時にログ取得自動化を目指しました。
似たお悩みを持つ情シスさん、エンジニアさんの参考になれば幸いです。
実装した機能
- Powershell及びPowershell ISE起動時にログを自動取得開始
- ユーザ単位ではなく、どのユーザでも取得することを目標としました。
- プロンプトに時刻表示させることで、ログにコマンド実行時刻を記録
- 注意点としては、プロンプトが表示されてからコマンドレット実行が直ぐに行われていないと現実との乖離が発生することです。無いよりマシという考えで実装しました。
動作確認した環境
OS | $PSVersionTableのPSVersion |
---|---|
2012R2 | 4.0 |
10 | 5.1.16299.64 |
何れもWORKGROUP環境です。 |
Powershell Scriptの実行環境
Scriptにもコメントで入れましたが、配置先等の情報です。
情報 | 詳細 |
---|---|
配置先 | C:\Windows\System32\WindowsPowerShell\v1.0\ |
ファイル名 | profile.ps1 |
Powershellの実行ポリシー | Remotesigned |
Powershell Script
profile.ps1
<#
Powershell起動時の自動実行Script
FileName : C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1
Script Version : 1.0
ExecutionPolicy : Remotesigned
LastUpdate : 2017/12/10
History:
2017/12/10 新規作成(自動ログ取得,プロンプト時刻表示実装)
#>
# 自動ログ取得開始
$LogFolder = 'C:\_work\_Logs'
$TimeStamp = (Get-Date -Format 'yyyyMMdd-HHmmss')
$UserInfo = $Env:COMPUTERNAME + '-' + $Env:USERNAME
$LogFilePath = $LogFolder + '\PS_' + $TimeStamp + '_' + $UserInfo + '.log'
Start-Transcript -Path $LogFilePath -Append
# プロンプトに時刻表示
function global:prompt {
(Get-Date -format "[yyyy/MM/dd HH:mm:ss]") + " PS " + $(get-location) + "> "
}