PowerShellの$profile(Microsoft.PowerShell_profile.ps1)

powershell コンピュータ
powershell

$profile変数はシェルが起動する際実行されるスクリプトファイルのパスがセットされています。
スクリプトの内容として主にユーザーの環境設定のカスタマイズを行います。

筆者こじんとしては、作成したスクリプトや実行ファイルを保存しているディレクトリへパスを切ったり、よく使うコマンドのエイリアスの設定、よく使う長いパスを短めの変数名にセットするなどを行っています。

現在の筆者のprofileの内容

<#
.SYNOPSIS
Shellで最初に実行されるスクリプト
#>

$ScriptDir = Split-Path $profile -Parent 
$Env:Path = $Env:Path + ";" + $ScriptDir

function Get-Scripts
{
    Get-ChildItem -Path $ScriptDir -Filter "*.ps1" | ForEach-Object { Get-Help $_.FullName } | Select-Object Name, Synopsis
}

$BinDir = "$Env:Userprofile\Bin"
if (-not (Test-Path -LiteralPath $BinDir))
{
    New-Item -Path $BinDir -ItemType Directory > Out-Null
}
$Env:Path = $Env:Path + ";" + $BinDir

$gimp_plugins = "$env:Userprofile\AppData\Roaming\GIMP\2.10\plug-ins"
$gimp_scripts = "$env:Userprofile\AppData\Roaming\GIMP\2.10\scripts"

Set-Alias ffmpeg "$env:Userprofile\Tools\ffmpeg.exe"
Set-Alias gimp "C:\Program Files\GIMP 2\bin\gimp-2.10.exe"
Set-Alias exp explorer

自動的に実行してくれるのが便利で沢山仕事をさせたくなりますが、余り時間が掛かる処理を実行するとシェルの起動からコマンドを受け付けるまで待ち時間が発生してしまいますので、必要最低限の仕事にしておいた方が無難です。

過去にscoopでインストールしたソフトのアップデートを実行するように組み込んだことがありますが、余りの遅さに取りやめたことがありました。緊急度の高いセキュリティアップデートはした方がよいとは思うのですが、それ以外は必要に迫られない限りアップデートしない方針でも余り困ることはありません。逆に最新を追いかけると不具合が出るケースもあるので自動アップデートは良し悪しだと思います。

また、Get-Scriptsというfunctionを定義していますが、スクリプトファイル内で使っていません。これはシェルから関数名を入力し実行すると実行します。よく使うコマンドの手順などを記録するのに便利ですが、こちらもやり過ぎると他のスクリプトとバッティングする可能性が高まるのでほどほどにした方が良さそうです。

Get-Scriptsの実行例(ユーザーが作成したスクリプトファイルの一覧が概要付きで表示される。)

Name                                                                   Synopsis
----                                                                   --------
C:\Users\PC01114\Documents\PowerShell\Add-Template.ps1                 テンプレートファイルを追加する
C:\Users\PC01114\Documents\PowerShell\Get-Templates.ps1                テンプレートファイルの一覧を取得する
C:\Users\PC01114\Documents\PowerShell\Make-CharCodeTable.ps1           文字コード表を作る
C:\Users\PC01114\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 Shellで最初に実行されるスクリプト
New-HTML.ps1                                                           New-HTML.ps1 [[-Path] <string>] [-Help]…
New-Ps1.ps1                                                            New-Ps1.ps1 [[-Path] <string>] [-Help]…
C:\Users\PC01114\Documents\PowerShell\QueryWikipedia.ps1               Wikipediaでキーワード検索
C:\Users\PC01114\Documents\PowerShell\RemoveKakko-FileName.ps1         ファイル名から(文字列)を除く
C:\Users\PC01114\Documents\PowerShell\RssRead.ps1                      概要
C:\Users\PC01114\Documents\PowerShell\test.ps1                         ODPを使ってOracleにアクセス
C:\Users\PC01114\Documents\PowerShell\Update-IndexText.ps1             ファイルの一覧をcsvで出力(要調査)

PowerShellのパイプラインでWhere-OjectでSynopsisを正規表現で絞り込んだり、シンプルにmoreで1ページごと表示したりするような使い方を想定しています。

Webサイトからページをダウンロードする時間をログに記録

Measure-Command { Invoke-WebRequest -Uri https://maywork.net } | ForEach-Object {(Get-Date).ToString("yyyy/MM/dd HH:mm:ss") + "`t" + $_.Milliseconds.ToString()+"ms" } | Out-File -Append -FilePath "./hpspeed.log"

コメント