2017-01-09 7 views
1

powershellを使用してパラメータから変数の型を取得するにはどうすればよいですか? TypeOf(xyz)が整数の場合、TypeOf(xyz)が文字列またはの場合、の効果があります。powershellを使用してパラメータから変数の型を取得する

私の目的として、文字列かどうかを確認したいのですか?私は、パラメータを持つ単一の関数を使用したいと思います。 securestringとstringの2つの別々の関数ではありません。

答えて

2

あなたの質問に直接答えがthe -is operatorを使用することです:

if ($xyz -is [String]){} 
if ($xyz -is [SecureString]){} 

if ($xyz -isnot [int]){} 

しかし掘り深い:

私はパラメータで、単一の機能を使用したいと思います。 securestringとstringの2つの別々の関数ではありません。

あなたが使用しているどのバージョンを区別するためにparameter setsと、単一の機能を使用することができます。

function Do-Thing { 
[CmdletBinding()] 
param(
    [Parameter(
     ParameterSetName = 'Secure', 
     Mandatory = $true 
    )] 
    [SecureString] 
    $SecureString , 

    [Parameter(
     ParameterSetName = 'Plain', 
     Mandatory = $true 
    )] 
    [String] 
    $String  
) 

    switch ($PSCmdlet.ParameterSetName) 
    { 
     'Plain' { 
      # do plain string stuff 
     } 

     'Secure' { 
      # do secure stuff 
     } 
    } 
} 

は先に行くと、そのサンプルの定義を実行し、ヘルプを見て:

Get-Help Do-Thing 

生成されたパラメータセットが表示されます。生成されたパラメータセットは、呼び出すことができる2つの方法を示しています。それぞれの方法は、相互に排他的な単一のパラメータです。

NAME 
    Do-Thing 

SYNTAX 
    Do-Thing -SecureString <securestring> [<CommonParameters>] 

    Do-Thing -String <string> [<CommonParameters>] 
+0

briantistありがとうございます。 :-) –

+0

こんにちは@briantist。 Iを使用する場合: 'IF($ XYZ -is [文字列]){}' ' 場合($ XYZ -is [ブール]){}' ' 場合($ XYZ -is [INT]){ } ' これは機能します。私が使用している場合: 'if($ xyz -is [SecureString]){}' これは動作しません。 PSOBjectまたはPSCustomObjectとして取得されます。 どうすれば回避できますか? –

+0

@CostaZachariouよく '$ xyz'を割り当てるコードの部分を見ることができないので、わかりません。 '$ xyz.GetType()。FullName'の出力は何ですか? – briantist

関連する問題