PowerShell の My Profile を掃除する
PowerShell の profile を Gist で管理してるのだけど、この度掃除をした。
片手間にできる範囲しかやらなかったので、使ってないモジュールと関数の取り除きが主。あとは順番をちょっと入れ替えてみたり、把握してなかった全貌を眺めてみた。
これらの取り除きついでに、供養がてら何のためにつかってたのかとか振り返ってみる。
モジュール取り除き
ClipboardText というモジュール。コレなんで使ってたのかすら忘れてしまったけど、結構使ってた記憶がある。
Set-ClipboardText
Get-ClipboardText
が使えるようになる。
PowerShell Core を使い始めた頃はクリップボード操作の Cmdlet がなくてできなかったとかそんな理由だったか?
今やフツーに Set-Clipboard
Get-Clipboard
使ってるので不要になったけどずっと消してなかった。今までありがとう、消した。
pocoも残ってるかな?と思ったが、そうでもなかった。 (変え漏れを除けば)意外にも pocof への変更は忘れてなかったらしい。
あとモジュールは跡形もなかったが、昔 GoogleCloud を使って勉強してたときの名残があったのでそれも消した。 このモジュールもう 4 年くらいメンテされてない様子、残念やけど多分重要でないんだろうな。
関数取り除き
明らかな消し忘れ。 VirtualBox 関連
function Start-VBoxMachine() {
vboxmanage list vms | Select-Pocof -CaseSensitive | Out-String -Stream | Select-String -Pattern '\{(.+)\}' | ForEach-Object { vboxmanage startvm ($_.Matches[0].Groups['1'].Value) --type headless }
}
function Stop-VBoxMachine() {
vboxmanage list runningvms | Select-Pocof -CaseSensitive | Out-String -Stream | Select-String -Pattern '\{(.+)\}' | ForEach-Object { vboxmanage controlvm ($_.Matches[0].Groups['1'].Value) poweroff }
}
function Get-RunningVBoxMachines() {
vboxmanage list runningvms
}
こんなのがあった。VirtualBox の GUI を介さずに VM の起動・停止をするための奴らだったか確か。 前々職でコンテナ移行しきれてない秘伝の開発環境 VM がチラホラあって、それで使ってた記憶がある。あの VM ちゃん達は今も元気に VM してるのだろうか。 もはや使うこともないので消す。でも供養がてら Gist に残しておいた。
krymtkts/scripts-for-virtualbox.ps1
なんだコレ。 find
ぽい?やつ
function find {
[CmdletBinding()]
param(
[string]$path = '.',
[Parameter(Mandatory = $True,
ValueFromPipeline = $True)]
[string[]]$name,
[switch]$delete
)
begin {
}
process {
foreach ($n in $Name) {
if ($delete) {
Get-ChildItem -Recurse -Path $path | Where-Object -Property Name -Like $n | Remove-Item
}
else {
Get-ChildItem -Recurse -Path $path | Where-Object -Property Name -Like $n
}
}
}
end {
}
}
なんか薄っすらと、 Makefile
から find
呼ぶときに何のシェルか考えるの面倒で PowerShell で find
作ろうとしてた覚えがあるのだけど、それをいつやってたのかわからない。いま使ってもないのでなんでここにあるのか不明。
消す。
何故 profile に足した?クソデカテキストファイルを作る関数
function New-TextFile {
[CmdletBinding()]
param (
[Parameter(Mandatory)]
[string]
$Name,
[Parameter()]
[long]
$Byte = [Math]::Pow(1024, 3),
[Parameter()]
[int]
$Basis = [Math]::Pow(1024, 2)
)
begin {
if (Test-Path $Name) {
Write-Error 'overrides currently not supported.'
return
}
$Remains = $Byte % $Basis
$Per = $Byte / $Basis
}
process {
1..$Per | ForEach-Object { 'x' * $Basis | Add-Content $Name -Encoding ascii -NoNewline }
if ($Remains -ne 0) {
'x' * $Remains | Add-Content $Name -Encoding ascii -NoNewline
}
}
}
前に書いた PowerShell でクソデカテキストファイルを作る の関数版だと思われる。 わざわざ profile に入れておいたのはなんでだろう。スクリプトにするだけで良いのでは...過去の自分に問いたい。消した。
psake
の auto completer 壊れてるで...
あと今回の掃除を通して psake
の auto completer 壊れてるやんと言うのに気づいたので、直した。
Invoke-psake
の存在チェックをしてあったら Register-ArgumentCompleter
するようにしてた。
けど、どっかのタイミングから invoke-psake
が invoke-cpsake
になってて、 auto completer が登録されなくなってた。
auto completer 周り、 aws_completer
で Register-ArgumentCompleter
設定するとこも、 AWS CLI 1 の頃から使ってたのもあり AWS CLI 2 では要らなくなった部分がある(良くないけど PyPI からモジュール取ってたときの名残)。
今回は対応を先送りにした。
おわり
そこまで消すものなかったな、というのが率直な感想だが、掃除してないな~という profile だった。
コマンドの存在をチェックしてから関数とか auto completer 登録するみたいなの増えてるので、この辺共通化したいなあ。 でも共通化しだすとファイル分割もしたくなり、結局のところ今の Gist から取ってくるの終焉に向かうのでは...と思った。
なんかより良い(楽な) PowerShell の Profile 管理手段ないかなー。