しばたテックブログ

気分で書いている技術ブログです。

PowerShell 6.0からPowerShellのプログラム名がpwshに変わります

発端はGitHubのこちらのIssueから

github.com

もともと「PowerShellのプログラム名であるpowershell.exe(powershell)は長いので略称があった方が良いよね。」という提案から始まっています。

新しいPowerShellの略称について

先のIssueを見ればわかりますが、新しいPowerShellの略称は pwsh になりました。

これまでは慣例的にposhが良く使われていましたが、既存の名称(Policy-compliant Ordinary SHell)と重複するため却下され、最終的に名称の重複がないpwshが採用されました。

名前の重複に関しては以前にエイリアスにwgetcurlを使っていた件で荒れに荒れた過去があるためPowerShell Teamとしてかなり慎重になっている様です。

他にも以下の名称が候補に上がっていました。*1

候補 不採用の理由(明確な理由がある場合のみ記載)
posh Policy-compliant Ordinary SHellと名前が重複
ps psコマンドと衝突
psc
psh Perl Shellと名前が重複
msh 既存の様々な略称と重複
mosh Mobile Shellと名前が重複
monad
pscore
coreps
coresh
pscmd
psc
pscx
pscsh cshと名前が重複
pshell
prsh
wpsh
wprsh
pwrsh
paua paua shell(パウア貝)...

個人的はpshが良かったのですが仕方ないですね...

PowerShellのプログラム名が変わる話

PowerShellの新しい略称が決まり、私個人の予想としてはショートカットやシンボリックリンクを張ることで実環境に反映させるのかと思っていたのですが、PowerShell 6.0ではプログラム名(powershell.exe(powershell))をpwsh.exe(pwsh)に変更する対応となりました。

変更するPull Requestが以下に上げられており、つい先日マージされ、正式にプログラム名が変更されることになりました。

github.com

この対応はかなり破壊的な変更になるので正直全く予想できませんでした...

とはいえ破壊的変更といっても非Windows環境においては影響が無く、Windows環境においても既存のWindows PowerShellと明確に区別したいという意図がある様で、改めて考えるとむしろ良い変更なのかな?という気もします。

*1:チェック漏れがあるかも...

PowerShell 6.0でアイコンが新しくなる話とPosh-ChanことPowerShellさんについて

ちょっとしたことですが意外と大きな変化です。

PowerShell 6.0の新しいアイコン

PowerShell 6.0の開発においてこれまでは味気ないコンソールアプリのデフォルトアイコンが使用されていましたが、PowerShell 6.0 Beta.8から黒色をベースとした新しいアイコンに変わり、これがPowerShell 6.0の新しいアイコンになる見込みです。

これまでのアイコン

f:id:stknohg:20171014132854p:plain:w100

新しいアイコン

f:id:stknohg:20171014132906p:plain:w100

【比較用】PowerShell 5.1のアイコン

f:id:stknohg:20171014132926p:plain:w100

アイコンを変えるまでの経緯についてはGitHubのこちらのIssueで確認できます。

github.com

アイコンとコンソールカラーの変化について

既にPowerShell 6.0をお使いの方はわかるかと思いますが、PowerShell 6.0ではコンソールの背景色がこれまでの青色(1,36,86)からコマンドプロンプトと同じく黒色に変わっています。

f:id:stknohg:20171014133919p:plain

PowerShell 6.0のアイコンが黒をベースとしてるのはこの変化が基本にある様です。

このコンソールカラーの変化については、特に理由は名言されていないのですが、クロスプラットフォーム化したことによりこれまでの青色が使えない・使いにくくなったのと、Windows 10 Fall Creators Updateでコンソールカラーが一新される事も背景にあるのかなと推測しています。

Posh-ChanことPowerShellさんについて

アイコンの変更に加えてPowerShell 6.0 Beta.8からWindows版のMSIインストーラーにアメコミ調の女性?型のキャラクターが表示される様になりました。*1

f:id:stknohg:20171014132939p:plain

このキャラクターはあまり認知度は高くないと思いますがPowerShell公式のキャラクターです。

名前はそのまま PowerShell の様です。(よくある言語の擬人化なのでしょう)
中の人からはPowerShell HeroやPosh-Chan*2と呼ばれている様です。

正確な時期は把握していないのですが、このPowerShellさんはNano ServerのキャラクターであるNanomanの登場と同時期に誕生しています。
私の記憶ではNanomanの漫画に突如出てきたのが初出です。

いまではPowerShell TeamのTwitterアイコンにも採用されています。

Digital Art

公式のアートワークが以下からダウンロードできますので是非ご覧ください。

PowerShell Digital Art | Microsoft Docs

おまけ

Windows版の$PSHOME\assetsフォルダに新しいアイコンとPowerShellさんのアイコンがあるのでショートカットを作る時などに使うと良いでしょう。

f:id:stknohg:20171014133006p:plain

ちなみにPowerShellさんのアイコンは黒アイコンに決まる前の最初の変更案でした...
PowerShell Teamがどこまで本気だったか図りかねるのですが黒アイコンに決まってくれて心底ホッとしています。

*1:残念ながらWindowsのみです。ほかのOSのインストーラーには表示されません。

*2:ちゃん付けするにはかなり勇ましいですが...

PowerShell既定のフォーマット設定に介入する方法について (補足)

前回のエントリに対する補足を軽く書いておきます。

blog.shibata.tech

format.ps1xmlのDefaultSettingsタグ

PowerShell既定のフォーマット設定に介入するには、適当なforamt.ps1xmlファイルを作ってPropertyCountForTableタグに更新したい値を設定すればよいと説明しました。

設定例)

<?xml version="1.0" encoding="utf-8" ?>
<Configuration>
    <DefaultSettings>
        <PropertyCountForTable>2</PropertyCountForTable>
    </DefaultSettings>
</Configuration>

このタグの親であるDefaultSettingsですが、これはPowrerShellのフォーマット設定の既定値に関するタグとなりPropertyCountForTable以外にも複数のタグがあることが確認できました。

ただし、どのタグも通常は一切使われていないため何のためのものか・設定するとどういった効果があるかは正直謎です...

謎なのですが、せっかくなので見つけたタグについてわかる範囲で補足しておきます。

ShowErrorタグ および DisplayErrorタグ

どちらのタグもBool型の値を取り、既定値はFalseでした。

ShowErrorタグの説明*1には、

if true, display error messages

DisplayErrorタグの説明には

if true, display an error string in the formatted display (e.g. cell in a table)

と記載されておりフォーマットの内部処理でエラーが発生した際にエラー情報を出すか否かを制御するのに使われる様です。
恐らくデバッグ用の項目でしょう。

EnumerableExpansions -> EnumerableExpansion -> Expandタグ

階層が深いのですがExpandタグ以外のタグは無い様です。
このタグはMicrosoft.PowerShell.Commands.Internal.Format.EnumerableExpansion列挙型となり以下の様に定義されています。

internal enum EnumerableExpansion
{
    /// <summary>
    /// process core only, ignore IEumerable
    /// </summary>
    CoreOnly,

    /// <summary>
    /// process IEnumerable, ignore core
    /// </summary>
    EnumOnly,

    /// <summary>
    /// process both core and IEnumerable, core first
    /// </summary>
    Both,
}

既定値はEnumOnlyです。
名前からして配列などのオブジェクトの展開方法に関わっている様ですが、具体的に何をしているのかさっぱりわかりませんでした...

今後わかることがあれば追記します。

設定例

最後にこれらのタグの設定例を記載しておきます。

<?xml version="1.0" encoding="utf-8" ?>
<Configuration>
    <DefaultSettings>
        <ShowError>False</ShowError>
        <DisplayError>False</DisplayError>
        <EnumerableExpansions>
            <EnumerableExpansion>
                <Expand>EnumOnly</Expand>
            </EnumerableExpansion>
        </EnumerableExpansions>
    </DefaultSettings>
</Configuration>

*1:正確には対となるオブジェクトのプロパティのコメント