2016-11-15 1 views
0

空の文字列が指定されている場合は、デフォルト値を使用します。私はより洗練された何かのために、$Varが空であるかどうかをチェックするためのif文を持っていて、それをデフォルトに設定することを望んでいます。誰でも知ることができますか? PowerShellバージョン2.0もサポートする必要があります。PowerShell関数で空の文字列を指定したときのデフォルト値の使い方は?

以下は、私が達成しようとしていることのスニペットです。空の文字列を与えられたら、 "Var:DEFAULT"と印刷します。

$ErrorActionPreference = "Stop" 

function Test-Function(
    [parameter(Mandatory = $true)][string] $Var = "DEFAULT" 
) { 
    # If Mandatory is set to $true an error is thrown 
    # "Cannot bind argument to parameter 'password' because it is an empty string." 
    # When Mandatory is set to $false, $Var is an empty string rather than "DEFAULT" 

    Write-Host "Var: $Var" 
} 

$EmptyString = "" 
Test-Function -Var $EmptyString 

答えて

2

これを行うにはエレガントな方法はありません。少なくとも、組み込みの方法はありません。あなただけの文字列がnullまたは空でないことを検証することができます:あなたが明示的に空の文字列を渡しているので、

function Test { 
    Param (
     [ValidateNotNullOrEmpty()] 
     [String] 
     $String = 'DEFAULT' 
    ) 

    Write-Host -Object "String: $String" 
} 
+0

これはデフォルト値を使用しません。パラメータがnullまたは空であることを示す例外をスローします。この例外をスローする代わりに、デフォルト値を使用したいと思います。 –

+1

"これを行うにはエレガントな方法はありません。少なくとも、組み込みの方法はありません。文字列がnullでも空でもないことを検証するだけです。"with '[ValidateNotNullOrEmpty()]' –

0

あなたの関数内でこれを使用します。

If (!($var)) {$var = "DEFAULT"} #basically, if $var doesn't exist, create it 

PS。私はMandatory = $ falseでそれをテストしました。期待どおりに動作しますが、それがなぜあなたにとってうまくいかないのか分かりません。必須= $ falseのときはどうなりますか?

+0

'必須= $ false'の出力がちょうど'ヴァールです:: '私は期待し'ヴァール:default'を –

+0

function Test-Function( [parameter(Mandatory = $false)] [string] $Var = "DEFAULT" ){ begin{if([String]::IsNullOrWhiteSpace($Var)){$Var="DEFAULT"}} process{Write-Host "Var: $Var"} end{} } Test-Function Test-Function '' Test-Function 'SomeValue' 

は、これは、私はあなたが期待したものであると信じる以下を生成し、私のために、私は言ったように、それは完全に動作します。しかし、とにかく、私の答えはあなたの目的に合って、それを試してください – 4c74356b41

1

varが空の文字列です。空の文字列はまだオブジェクトであり、nullではありません。あなたがTest-Function -Var $ EmptyStringを呼び出すと、空の文字列と同じで、探している出力が得られず、.Netではfalseです。 "Mandatoryが$ falseに設定されていると、$ Varが" DEFAULT "ではなく空の文字列である"という文は、何かを渡したときと同じです。空の文字列であるため、値 "DEFAULT"の割り当ては呼び出されませんでした。

Mandatory = $ trueを削除することができます。この場合、パラメータが渡されていない場合は、 "Default"値がと表示されます

function Test-Function(
    [parameter(Mandatory = $false)] 
    [string] $Var = "DEFAULT" 
){ 
    Write-Host "Var: $Var" 
} 
Test-Function 

これは、期待通りにVar: DEFAULTを生成します。

パラメータが必須かどうかにかかわらず、空文字列を渡すと、$ Varの値は ''であり、空の文字列であるため、$ Var = "Default"への代入は決して行われません。

Test-Function '' 

これはVarを生成します。これは間違っているように見えますが、あなたが指定した空の文字列を出力します。

パラメータが渡されないときにデフォルト値を割り当てることを許可するには、上記のようにMandatory = $ falseを使用してデフォルト値を割り当てます。渡された値をテストし、それが空の文字列だった場合にデフォルト値を割り当てる場合は、関数のbeginブロックでそれを行うべきです。

Var: DEFAULT 
Var: DEFAULT 
Var: SomeValue 
+0

ありがとうございます。ですから、 '$ Var'を常に試して渡したいのであれば、' if'文を使わなければ、私がやりたいことはできないと思います。 –