PowerShell で grep したい時に
あれれ? Out-Scring の alias じゃないのに help は Out-String なんだ?
と言うことで、関数の内容を確認したかったのだが、どうすんだ?って。
<command> | oss | sls <pattern>みたいなことするんだけど、oss て何だったっけ?と思い確認してみた所
> gcm oss CommandType Name Version Source ----------- ---- ------- ------ Function ossとなる一方で help 引くと Out-String が表示されるので
あれれ? Out-Scring の alias じゃないのに help は Out-String なんだ?
と言うことで、関数の内容を確認したかったのだが、どうすんだ?って。
「PowerShell function display」でググったところ、以下のページ
と言う事で Get-ChildItem で Function:* から定義済み関数が拾えるので、oss の ScriptBlock を確認すると良さげ。
確認してみると以下のようになっていた。
あと、help about_Functions 確認してみると
話は外れるが、
因みに、以前に既に調査済みというオチも付いた。
- Microsoft / TechNet / Forums / Internet Explorer / 2010-07-26: How to display function definition / code in powershell
get-childitem function:*みたいな記述を見かけた。
と言う事で Get-ChildItem で Function:* から定義済み関数が拾えるので、oss の ScriptBlock を確認すると良さげ。
確認してみると以下のようになっていた。
> ls Function:oss |% ScriptBlock [CmdletBinding()] param( [ValidateRange(2, 2147483647)] [int] ${Width}, [Parameter(ValueFromPipeline=$true)] [psobject] ${InputObject}) begin { try { $PSBoundParameters['Stream'] = $true $wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand('Out-String',[System.Management.Automation.CommandType s]::Cmdlet) $scriptCmd = {& $wrappedCmd @PSBoundParameters } $steppablePipeline = $scriptCmd.GetSteppablePipeline($myInvocation.CommandOrigin) $steppablePipeline.Begin($PSCmdlet) } catch { throw } } process { try { $steppablePipeline.Process($_) } catch { throw } } end { try { $steppablePipeline.End() } catch { throw } } <# .ForwardHelpTargetName Out-String .ForwardHelpCategory Cmdlet #>つまり、「.ForwardHelpTargetName Out-String」が設定されていたので help で Out-String に飛ぶようになってるらしい。
あと、help about_Functions 確認してみると
(Get-ChildItem function:help).Definitionや
$function:helpのような方法も示されていた。
話は外れるが、
help about_Functions -online出来ないのはなぜ?
因みに、以前に既に調査済みというオチも付いた。
タグ
コメントをかく