2014-03-19 14 views
2

我有一個接受兩個參數的簡單代碼。這些參數是可選的。以下是代碼。確定運行腳本時傳遞哪個參數

[CmdletBinding()] 
Param(
    [Parameter(Mandatory=$False)] 
    [string]$pA, 

    [Parameter(Mandatory=$False)] 
    [string]$pB 
) 

當運行腳本我想知道哪個參數傳遞。 pApB

回答

4
$MyInvocation.BoundParameters 

返回ps自定義字典對(鍵/值)與所有傳遞的參數。

這是a.ps1文件的內容:運行此腳本

[CmdletBinding()] 
Param(
    [Parameter(Mandatory=$False)] 
    [string]$pA, 

    [Parameter(Mandatory=$False)] 
    [string]$pB 
) 
$MyInvocation.BoundParameters 

給出:

PS C:\ps> a -pA pAparam 

Key               Value 
---               ----- 
pA               pAparam 

,那麼你可以查閱一下鍵存在:

[bool]($MyInvocation.BoundParameters.Keys -match 'pa') # or -match 'pb' belong your needs 
1

由於你可以測試你的$ Pa和$ Pb是否爲空:

您可以使用此功能測試:

function func 
{ 
    [CmdletBinding()] 
    Param([Parameter(Mandatory=$False)] 
     [string]$pA, 

     [Parameter(Mandatory=$False)] 
     [string]$pB 
     ) 

    if ($pA -eq [string]::Empty -and $pA -eq [string]::Empty) 
    { 
    Write-Host "Both are empty" 
    } 
    elseif ($pA -ne [string]::Empty) 
    { 
    Write-Host "Pa is not empty" 
    } 
    elseif ($pB -ne [string]::Empty) 
    { 
    Write-Host "Pb is not empty" 
    } 
} 

Clear-Host 
func 

仍然是func -Pa「」將給予相同的結果func問題,但如果你只是想測試參數的存在,你可以使用switch屬性。

你可以找到更多關於PowerShell腳本和函數的參數與這些鏈接:

about_Functions

about_Functions_Advanced

about_Functions_Advanced_Parameters