2017-01-09 20 views
1

如何從使用powershell的參數獲取變量的類型? 如果TypeOf(xyz)是字符串或(如果TypeOf(xyz)是整數),則影響使用powershell從參數獲取變量的類型

爲了我的目的,我想檢查它是一個字符串還是固定字符串?我想用一個參數使用單個函數。不是兩個單獨的函數,一個用於固定字符串,另一個用於字符串。

回答

2

直接回答你的問題是使用the -is operator

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

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

但更深的挖掘:

我想用一個單一的功能與參數。不是兩個單獨的函數,一個用於固定字符串,另一個用於字符串。

您可以使用一個單一的功能,具有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 

您會看到生成的參數集,它顯示了可以調用它的兩種方式,每種方式都有一個單獨的互斥參數。

NAME 
    Do-Thing 

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

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

謝謝briantist。 :-) –

+0

嗨@briantist。 如果我使用: '如果($ XYZ -is [字符串]){}'' 如果($ XYZ -is [布爾]){}'' 如果($ XYZ -is [INT]){ }' 它的工作原理。如果我使用: 'if($ xyz -is [SecureString]){}' 它不起作用。它被拾取爲PSOBject或PSCustomObject。 我該如何解決這個問題? –

+0

@CostaZachariou以及我不知道,因爲我看不到你的代碼賦予'$ xyz'的部分。 '$ xyz.GetType()。FullName'的輸出是什麼? – briantist