「Clear-Host」はコマンドレットではない

最近、知って驚いたこと

PowerShellには標準で組み込まれている内部関数(Internal Function)があります。
コマンドレットだと勝手に思い込んでいた「Clear-Host」も、実は内部関数でした。


「Get-Command」を引数なしで実行してコマンドレット一覧を表示させた際、「Clear-Host」は表示されません。
コマンドレットではなく関数だからです。


ようやく納得しました。(^^;

profile.ps1を削除して試して確認する

PowerShell起動時に読み込まれるprofile.ps1は、以下の順で読み込まれます。
#同一名の関数は後に読み込れた方が優先です。

  1. %windir%\system32\WindowsPowerShell\v1.0\profile.ps1
  2. <マイドキュメント>\WindowsPowerShell\profile.ps1

これらのprofile.ps1を削除してからPowerShellを起動し、以下のコマンドを実行してみます。

PS C:\> Get-ChildItem Function:

CommandType     Name           Definition
-----------     ----           ----------
Function        prompt         'PS ' + $(Get-Location) + $(...
Function        TabExpansion   ...
Function        Clear-Host     $spaceType = [System.Managem...
Function        more           param([string[]]$paths);  if...
Function        help           param([string]$Name,[string[...
Function        man            param([string]$Name,[string[...
Function        mkdir          param([string[]]$paths); New...
Function        md             param([string[]]$paths); New...
Function        A:             Set-Location A:
Function        B:             Set-Location B:
Function        C:             Set-Location C:
Function        D:             Set-Location D:
Function        E:             Set-Location E:
Function        F:             Set-Location F:
Function        G:             Set-Location G:
Function        H:             Set-Location H:
Function        I:             Set-Location I:
Function        J:             Set-Location J:
Function        K:             Set-Location K:
Function        L:             Set-Location L:
Function        M:             Set-Location M:
Function        N:             Set-Location N:
Function        O:             Set-Location O:
Function        P:             Set-Location P:
Function        Q:             Set-Location Q:
Function        R:             Set-Location R:
Function        S:             Set-Location S:
Function        T:             Set-Location T:
Function        U:             Set-Location U:
Function        V:             Set-Location V:
Function        W:             Set-Location W:
Function        X:             Set-Location X:
Function        Y:             Set-Location Y:
Function        Z:             Set-Location Z:

これらが内部関数になります。


#同様に、profile.ps1を削除した状態で「Get-Alias」を実行して表示されるのは、内部エイリアスです。

内部関数の内容を確認する

内部関数の内容を確認するには、以下を実行します。

Get-ChildItem Function: | Select-Object Name,Definition | Format-List

スクリプトの内容が分かりますが、意外と勉強になります。(^^ゞ