「Clear-Host」はコマンドレットではない
最近、知って驚いたこと
PowerShellには標準で組み込まれている内部関数(Internal Function)があります。
コマンドレットだと勝手に思い込んでいた「Clear-Host」も、実は内部関数でした。
「Get-Command」を引数なしで実行してコマンドレット一覧を表示させた際、「Clear-Host」は表示されません。
コマンドレットではなく関数だからです。
ようやく納得しました。(^^;
profile.ps1を削除して試して確認する
PowerShell起動時に読み込まれるprofile.ps1は、以下の順で読み込まれます。
#同一名の関数は後に読み込れた方が優先です。
- %windir%\system32\WindowsPowerShell\v1.0\profile.ps1
- <マイドキュメント>\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
スクリプトの内容が分かりますが、意外と勉強になります。(^^ゞ