#この記事は?
- powershellでログを自動で取りたい
- 毎回同じエイリアス、関数、および変数を使いたい
- プロンプトを改造したい
上記を叶えるためには、PowerShellプロファイルを作成することで解決できます。
前提
環境
- Windows PowerShell 5.1
- PowerShell 7.0.3
プロファイルとは
Powershellが起動した際に読み込む定義ファイルです。
プロファイルは4つ定義できます。下記表の上から順に実行されます。
No | プロファイルのパス | |
---|---|---|
1 | %windir%\system32\WindowsPowerShell\v1.0\profile.ps1 | すべてのユーザーおよびすべてのシェルに適用 |
2 | %windir%\system32\WindowsPowerShell\v1.0\ Microsoft.PowerShell_profile.ps1 | すべてのユーザーに適用されますが、Microsoft.PowerShell シェルのみに適用 |
3 | %UserProfile%\My Documents\WindowsPowerShell\profile.ps1 | 現在のユーザーのみに適用され、すべてのシェルに適用 |
4 | %UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 | 現在のユーザーと Microsoft.PowerShell シェルのみに適用 |
プロファイルの作成と編集
プロファイルのパスは下記で確認できます。
なおデフォルトでは「プロファイルとは」の表のNo4の場所が設定されています。
$profile
プロファイルはデフォルトでありません。作成されているかどうかは下記コマンドで確認できます。
「True」なら作成済み、「False」なら未作成です。
test-path $profile
プロファイルを作成する場合下記コマンドで作成できます。
なお「プロファイルとは」の表のNo4以外のプロファイルを作成する場合、「$profile」の部分を「$env:[プロファイルのパス]」に置き換えましょう。
# 「プロファイルとは」の表のNo4
new-item -path $profile -itemtype file -force
# 「プロファイルとは」の表のNo3
new-item -path $env:UserProfile\My Documents\WindowsPowerShell\profile.ps1 -itemtype file -force
プロファイルができたら、編集しましょう。
#メモ帳で開く
notepad $profile
#VisualStadio Codeで開く
code $profile
Tips : profileファイルはBOM付きUTF-8で編集するとエラーに悩まされなくて良きです。
プロファイル
結論
私は下記のプロファイルを利用している
profile.ps1
# ウィンドウタイトル
(Get-Host).UI.RawUI.WindowTitle = "WindowsPowerShell ( ᐢ˙꒳˙ᐢ )" + $pwd
# 日付
$Date = Get-Date -UFormat "%Y/%m/%d %H:%M:%S"
# 実行権限
$ExecutionPolicy = Get-ExecutionPolicy
# ログディレクトリ
$Logdir = join-path ([Environment]::GetFolderPath("MyDocuments")) "\WindowsPowerShell\logs"
# ログファイル
$FileName = (Get-Date).ToString("yyyyMMdd_HHmmss") + ".log"
$Logfiledir = join-path $logdir $filename
# ログ取得
if ( Test-Path $logdir ) {
Start-Transcript $logfiledir -append | Out-Null
} else {
Write-Host ("No Such Directory : " + $logdir)
}
# 現在のプロパティ
Write-Host "Date : " $Date
Write-Host "Your Policy : " $ExecutionPolicy
Write-Host "Logs Directory : " $Logdir
Write-Host "Profile : Current Users, All Shell"
Get-ChildItem
# プロンプト
function Prompt {
if ($?) {
(Get-Host).UI.RawUI.WindowTitle = "WindowsPowerShell ( ᐢ˙꒳˙ᐢ ):" + $pwd
Write-Host "(*'-')" -NoNewLine -ForegroundColor "Green"
return ">"
} else {
(Get-Host).UI.RawUI.WindowTitle = "WindowsPowerShell ( ᐢ˙꒳˙ᐢ ):" + $pwd
Write-Host "(*;-;)" -NoNewLine -ForegroundColor "Red"
return ">"
}
}
解説
- ログ取得
- 起動時に現在のプロパティを表示
- ウィンドウタイトルとプロンプトを可愛く