PowerShell で 起動時に指定したコマンドを自動実行させる

仕事で使う技術的なこと

今回の内容はすごくニッチかもしれませんが・・・
自分の環境で解決するのにすごく悩んだので、備忘録しておきます。

ここで説明する概要

PowerShell 起動時に、自動で指定したコマンドを実行させたいときがあります。
それを解決する方法として、Microsoft.PowerShell_profile.ps1 というPowerShellが起動時に読み込みするファイルに、任意のコマンドを追記して実行させるという方法が一般的みたいです。
Microsoft.PowerShell_profile.ps1 の場所(パス)は、PowerShell では $profile という変数に格納されています。

ここでは、$profile に格納されている Microsoft.PowerShell_profile.ps1使用できない という想定で、他で代替する方法について記載します。

具体的には、ターミナルの設定をいじるという、ゴリゴリのチカラ技になります。

経緯

そもそも、Microsoft.PowerShell_profile.ps1 のファイル内の記述を変更/追記したりすることはよくあると思いますが、Microsoft.PowerShell_profile.ps1 のパス自体を変更したいというシチュエーションはあまりないかと思います。

今回自分がそれに迫られた理由は、端的に言うと「会社支給PCの仕様のせい」です。
もうちょっと詳しく言うと、会社方針でPC内の特定のフォルダが「AIP(Azure Information Protection)」の適用を受けており、対象のフォルダ内のファイルが全て暗号化されます。
一応暗号化されていても、Windowsのエクスプローラー上でダブルクリックでファイルを開くと、そのタイミングでファイルが解凍されるので、実運用上はあまり問題はないです。
ただし、やっかいなのが、暗号化されたファイルは拡張子が「.pfile」となってしまいます。つまり、ファイル名が変わってしまうのです。
ファイル名が変わると、もちろんそのパスを参照しているものからすると参照が切れてしまいます。

Microsoft.PowerShell_profile.ps1 は、いわゆる「ドキュメント」というフォルダの配下に存在します。
自分の環境では「ドキュメント」が AIP の適用対象となっています。
結果、自分の環境では Microsoft.PowerShell_profile.ps1 が、勝手にファイル名が Microsoft.PowerShell_profile.ps1.pfile となってしまったことにより、PowerShell が $profile で参照できなくなってしまっていました。

じゃあ $profile の値を変えればいいじゃないかという話になりますが、こちら set $profile=hoge みたいな感じで変更できますが、次回ターミナル起動時には値が戻ってしまいます。
なので値を変えることで解決は難しそうでした・・・

ということで、$profile 以外で、起動時に指定したコマンドを実行さセル方法が必要になったということです。

対処方法

前置き長くなりましたが、以下対処方法です。

  • ターミナルを起動し、↓画像のように「設定」を選択する
  • ↓画像のように、「コマンドライン」をいじる

ここで、もともと「コマンドライン」には %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe と記載されているのですが、
以下のようにします。

%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoExit -Command "chcp 65001; del alias:curl"
各種説明
  • -NoExit はおまじないみたいなものです。これを入れないと後述の Command が実行されるとターミナルが閉じてしまうので、ターミナルが閉じないように指定しています。
  • -Command 以下が、起動時に実行するコマンドになります。ここでは、
    chcp 65001 により、起動時に文字コードを UTF-8 に変更するようにしています。(デフォルトでは Shift-jis)

    • del alias:curl は、こちらはよくわからないのですが、なぜか curl 実行時にエイリアスされた Invoke-WebRequest が呼び出されてしまうことがあり(不定期?何がきっかけか不明?)とりあえずおまじない的にエイリアスを消しています。

以上で最後に保存をすると、次回起動時から指定したコマンドを実行してからPowershellが開くようになります。

コメント

タイトルとURLをコピーしました