はじめに
PowerShellで開発する気がなくても、PowerShellを使う機会が最近増えてきたのでAliasを覚える事にしました。
- VS Code の統合ターミナルからエイリアスを使って簡単なコマンドを打ちたい……
- ローカル開発環境に立てたサーバーを見るためにhostsを編集したいけど、毎回ググったりするのに嫌気が指してきた……
※2018年12月時点での環境(PowerShell 5.1.17134.407)で確認しています。
※PowerShellのエイリアスに関する設定が済んでいる場合は以下のページ内リンクをクリックしてください。
→ 今すぐalias登録すべきPowerShellワンライナー
#aliasおさらい(実行環境を整える)
PowerShellはUnixのコマンドとの互換性を意識してか、 cd
や wget
が打ち込めますが、これらはPowerShellで定義されたコマンドのエイリアスです。
登録しているエイリアスは、以下のコマンドから確認できます
PS C:\> alias
CommandType Name Version Source
----------- ---- ------- ------
Alias % -> ForEach-Object
Alias ? -> Where-Object
Alias ac -> Add-Content
Alias asnp -> Add-PSSnapin
...
alias
は Get-alias
のaliasで、Unixの alias
のように振る舞います。
PS C:\> Get-alias gal
CommandType Name Version Source
----------- ---- ------- ------
Alias gal -> Get-Alias
デフォルトで振られているので親切ですね。
さて、例えば Get-ChildItem
コマンドをソートし、なおかつbashの ls -lat
っぽく振る舞わせるためにこんなPowerShellを書いたとします。
PS C:\Users\hoge\Desktop> Get-ChildItem -force | Sort-Object -Property @{ Expression = 'LastWriteTime'; Descending = $
true }, @{ Expression = 'Name'; Ascending = $true } | Format-Table -AutoSize -Property Mode, Length, LastWriteTime, Name
Mode Length LastWriteTime Name
---- ------ ------------- ----
-a-hs- 282 2018/12/13 22:06:38 desktop.ini
-a---- 750 2018/12/13 0:27:03 hoge.pub
-a---- 43272 2018/12/12 7:21:13 piyo.jpg
-a---- 5306273 2018/12/10 2:28:56 fuga.gif
-a---- 1042 2018/12/10 2:11:40 foo.lnk
-a---- 92853 2018/11/28 23:16:01 bar.JPG
...
ちなみに普通に ls
するとこうなる。
PS C:\Users\hoge\Desktop> ls
ディレクトリ: C:\Users\hoge\Desktop
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2017/04/06 1:20 hoge
d----- 2017/11/15 8:48 piyo
d----- 2016/10/10 0:39 fuga
d----- 2016/05/14 16:45 foo
-a---- 2017/01/04 2:31 14416236 bar.zip
-a---- 2017/12/22 21:40 228161282 fizz.wav
-a---- 2017/11/13 1:03 10224523 buzz.mp3
-a---- 2018/12/10 2:28 5306273 1.gif
あまり変わりませんがそういう事にしておいてください。
PowerShellにも.bashrcのようなものがあり、このワンライナーをシェルの起動時に実行されるスクリプトとして記述してみましょう。
PS C:\> notepad $profile
起動時に実行されるスクリプトの場所として $profile
という変数が定義されており、上記コマンドで開かれるメモ帳の中に、エイリアスをガシガシ書いてゆきます。
ファイルが存在しない場合、 New-Item -type file -force $profile
と打ち込むことで対象のパスに新しいファイルが作成されます。
function CustomListChildItems { Get-ChildItem $args[0] -force | Sort-Object -Property @{ Expression = 'LastWriteTime'; Descending = $
true }, @{ Expression = 'Name'; Ascending = $true } | Format-Table -AutoSize -Property Mode, Length, LastWriteTime, Name }
sal ll CustomListChildItems
最初 $profile
の中は空なので、試しに先程のコマンドをエイリアスにしてみます。
1行目で関数を宣言し、2行目でエイリアスを登録しています。
※この記事はワンライナーがテーマなので、必要に応じて改行してください
さて $profile
を読み込みましょう。
PS C:\Users\hoge\Desktop> & $profile
& : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Users\hoge\Documents\WindowsPowerShell\Micros
oft.PowerShell_profile.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsof
t.com/fwlink/?LinkID=135170) を参照してください。
このようなメッセージが出た場合、Execution_Policiesを変更します。
PS C:\Users\hoge\Desktop> Start-Process powershell.exe -Verb runas
管理者権限でPowerShellを起動して、
PS C:\WINDOWS\system32> Set-ExecutionPolicy RemoteSigned
ExecutionPolicyを変更します(永続的に反映されます)。
ExecutionPolicyに関しては、スクリプトが実行可能なレベルとして他にも色々ありますが、必要最低限を考えるとRemoteSignedで良いと思います。
PS C:\> . $profile
PS C:\> gal ll
CommandType Name Version Source
----------- ---- ------- ------
Alias ll -> CustomListChildItems
. $profile
で $profile
を読ませたら、 ll
コマンドで動作確認をします。
PS C:\> ll
Mode Length LastWriteTime Name
---- ------ ------------- ----
-a-hs- 16777216 2018/12/17 20:58:57 swapfile.sys
-a-hs- 33285996544 2018/12/17 20:58:55 pagefile.sys
-a-hs- 10276958208 2018/12/17 20:58:52 hiberfil.sys
d--hs- 2018/12/16 15:46:29 System Volume Information
d-r--- 2018/12/15 16:24:07 Program Files
これで、今すぐalias登録すべきPowerShellワンライナー
の準備が整いました。
また、VSCodeのターミナルが integrated
(デフォルト)の場合、この時点で上のターミナル( Ctrl+@
)からでもエイリアスが機能するようになります。
#今すぐalias登録すべきPowerShellワンライナー
よく使う順に4つ。
function CustomListChildItems { Get-ChildItem $args[0] -force | Sort-Object -Property @{ Expression = 'LastWriteTime'; Descending = $true }, @{ Expression = 'Name'; Ascending = $true } | Format-Table -AutoSize -Property Mode, Length, LastWriteTime, Name }
sal ll CustomListChildItems
function CustomSudo {Start-Process powershell.exe -Verb runas}
sal sudo CustomSudo
function CustomHosts {start notepad C:\Windows\System32\drivers\etc\hosts -verb runas}
sal hosts CustomHosts
function CustomUpdate {explorer ms-settings:windowsupdate}
sal update CustomUpdate
ワンライナーで書いておくとどんなaliasを振っているのか分かってとても良い。
以下簡単な解説。
- ll
-
ls -lat
のように振る舞います
-
- sudo
- PowerShellを管理者権限として実行する時、普通の権限のコンソールからこれを実行すると管理者権限でPowerShellが起動します
- hosts
- Notepadを使ってWindows10環境のhostsファイルを管理者権限で開きます
- update
- Windows Updateを開きます
-
ms-settings
のイディオムを使うことでWindowsの設定を一発で開くことができます
基本的に WindowsのGUIで出来ることは何でもPowerShellで出来る
らしいので、普段の面倒くさいルーチンワークはガシガシaliasに書いちゃいましょう。
#Appendix
PowerShellは奥が深いようで、便利PowerShellスクリプトはGitHub上で色々な方がリポジトリを公開しています。やはりシステム管理者向けのハックが多い印象。
モジュールまで作られている。PowerShellMafiaとは……
参考までに今までブックマークしたQiitaのPowerShell系記事を紹介させて頂きます。
-
https://qiita.com/AnarchyInvestor/items/b281d9e8239ac21a461b
- ちょっと長いけどたくさんのコマンドが端的にまとまっていて参考になります。
-
https://qiita.com/tomoko523/items/87ccaec05a433b02f67e
- かわいいプロンプトは正義。
-
https://qiita.com/kikuchi/items/59f219eae2a172880ba6
- ExecutionPolicyに関する日本語ドキュメントはちょっと不親切な感じなので、参考になります。
-
https://qiita.com/tiibun/items/5719869552ee5b713d83
- alias使うまで毎日のように見てた(覚えられないので)
-
https://qiita.com/cd01/items/da9a36582372e7d0a7f6
- 便利PowerShell。引数でゴニョるタイプのスクリプトはargumentでエイリアスを無理やり実装するより覚えたほうが良さそう