PowerShell起動時に毎回同じ設定を読み込む設定(プロファイルの設定)


この記事は?

  • 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 ">"
    }
}


解説

  • ログ取得
  • 起動時に現在のプロパティを表示
  • ウィンドウタイトルとプロンプトを可愛く

参考