前提・実現したいこと
PowerShellで関数を自作しています。
引数として、年と月を取ります。
この引数をパイプライン経由でも受け取るようにしたいです。
コマンドライン引数を使用した場合とパイプラインから受け取る場合が両立できず悩んでいます。
普通はこうする。というような情報でも良いので、教えていただけないでしょうか。
PowerShell
1# SYNTAX 2# Test-Function [-Year] <Int32> [-Month] <Int32> [<CommonParameters>] 3Test-Function -Year 2014 -Month 3
このような実装です。
PowerShell
1function Test-Function { 2 Param( 3 [Parameter(Mandatory)] 4 [ValidateRange(1,9999)] 5 [Int] 6 $Year, 7 [Parameter(Mandatory)] 8 [ValidateRange(1,12)] 9 [int] 10 $Month 11 ) 12 begin{} 13 process{ 14 "Year: {0}" -f $Year 15 "Month: {0}" -f $Month 16 } 17 end{} 18}
発生している問題・試したこと
試行錯誤としては、
- 単純に下記のような渡しかたをしても、2014と3が渡るだけになってしまいます。
PowerShell
12014,3 | Test-Function 2@(2014,3) | Test-Function
下記のように連想配列をパイプラインで流すことも考えてみましたが、普通にコマンドライン引数でパラメータを渡すときの挙動を変更したくありません。
PowerShell
1@{Year=2014;Month=3} | Test-Function
下記のような受け取り方を考えたのですが、できれば必須属性を外したくありません。
PowerShell
1function Test-Function { 2 Param( 3 [Parameter(Mandatory)] 4 [ValidateRange(1,9999)] 5 [Int] 6 $Year, 7 [Parameter(Mandatory)] 8 [ValidateRange(1,12)] 9 [int] 10 $Month, 11 [Parameter(ValueFromPipeline)] 12 [System.Collections.Hashtable] 13 $YearMonth 14 ) 15 begin{} 16 process{ 17 "Year: {0}" -f $Year 18 "Month: {0}" -f $Month 19 } 20 end{} 21}
補足情報(FW/ツールのバージョンなど)
PowerShellはv7.1を使用しています。
回答1件
あなたの回答
tips
プレビュー