LoginSignup
11

More than 5 years have passed since last update.

Powershell起動時にログ取得自動開始しプロンプトに時間を表示する

Last updated at Posted at 2017-12-14

この記事は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) + "> "
}

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11