以下のような関数を作成し、profile.ps1 で Import-Module することで PowerShell のコマンド画面から使用できるようにしました。しかし、パイプラインで$_
と一緒に使ったときに意図した挙動とならず、困っています。
function Start-ScriptBlock { Param( [System.Management.Automation.ScriptBlock]$func ) process { $func.Invoke() } }
内容は質問用に省略してあります。
もともとは Java の StreamAPI の anyMatch() のような関数を作ろうとしていました...
上記の関数を以下のように呼び出しても$_
にパイプラインから受け取った内容が格納されず、意図した動作となりません。
PS D:\tmp>@("abc", "123") | Start-ScriptBlock {Write-Host Test: $_} Test: Test:
ForEach-Object
や Where-Object
のように ScriptBlock の中で $_
によってパイプラインで渡されたオブジェクトを使用するためにはどのようにすればいいでしょうか?
PSVersion は 5.0 です。
ご存知の方がおられましたら、お教えください。
よろしくお願いいたします。
6/20 追記:
function を定義とその呼び出しを同じ .ps1 ファイル内で行った場合は、正常に動作しました。
しかし、.psm1 ファイルにて function の定義を行い、それを Import-Module して呼び出そうとすると意図した挙動になりませんでした($_
にオブジェクトが入らない)。
回答1件
あなたの回答
tips
プレビュー