2016-04-29 10 views
0

基本的にはログ情報を出力するスクリプトがあります。このスクリプトには、ID、Text、Dayの3つのパラメータがあり、それらのパラメータに基づいて情報をフィルタリングできます。 、私はありませんか一つのパラメータのみ、例:2つ以上のパラメータが使用されたときのPowershell ParameterSetエラー

Get-Log 
Get-Log -Text "sample" 

で関数を呼び出す場合でも、私は2つの以上のパラメータを使用する場合には、正常に動作します

function Get-Log{ 
    [CmdletBinding(DefaultParameterSetName="All")] 
    Param(
     [Parameter(
      ParameterSetName="ByID" 
     )] 
     [Int]$ID, 

     [Parameter(
      ParameterSetName="ByText" 
     )] 
     [String]$Text, 

     [Parameter(
      ParameterSetName="ByDay" 
     )] 
     [String]$Day 
    ) 
    ... 
} 

のような:それはこのようなものだ

Get-Log -Text "sample" -Day "29/04/2016" 

それは、パラメータ・セット・エラーがこぼれ:

Get-Log : Parameter set cannot be resolved using the specified named parameters 
+ get-log -Text "sample" -Day "29/04/2016" 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidArgument: (:) [Get-Change], ParameterBind 
    ingException 
    + FullyQualifiedErrorId : AmbiguousParameterSet,Get-Change 

2つ以上のパラメータが指定されている場合に、別のパラメータセットを指定する方法はありますか?それとももっと良い方法でしょうか?

+0

として使用

[Parameter(Mandatory=$false,ParameterSetName="RunOnce", HelpMessage="Enter ServerName to schedule reboot for.")] [switch]$RunOnce, [Parameter(Mandatory=$true,ParameterSetName="RunOnce")] [string]$server, [Parameter(Mandatory=$true,ParameterSetName="RunOnce")] [string]$date, 

? – PetSerAl

+0

私は、Switch($ psCmdlet.ParameterSetName){"ByID" {query1} "ByText" {query2}} "のようにswitch文でクエリの可能性を管理する方が簡単だと思ったので、とにかくなら... – esserafael

答えて

0

私がパラメータセットを使用する方法は、「モード」が有するであろうパラメータと共にスクリプトの1つの「モード」を定義することである。

例では、RunOnceパラメータセットに2つの必須パラメータServerとDateがあります。このようFunction -RunOnce -Server "blah" -Date "04/29/2016 18:20"あなたが最初の場所でパラメータセットを使用しないのはなぜ

関連する問題