2017-05-30 18 views
1

比方说,我有以下功能:如何在Powershell上重用param?

function Get-DBStatus 
{ 
    <# .. removed help section for brevity .. #> 
    [CmdletBinding()] 
    [OutputType([System.Object])] 
    param 
    (
    [Parameter(Mandatory = $true)] 
    [String]$ServerName, 
    [Parameter(Mandatory = $true)] 
    [String]$ServerUser, 
    [Parameter(Mandatory = $true)] 
    [String]$ServerPassword, 
    [Parameter(Mandatory = $true)] 
    [String]$DatabaseName, 
) 

    try 
    { 
    $params = @{ ... } # <<< It's possible to avoid this duplication ? 
    $dbStatus = Invoke-SqlConnection @params 
    } 
    catch 
    { 
    Write-Error -Message ('An error has occured while ...') 

    } 
    ... 

我想避免需要申报@params一旦我的参数已经被定义和设置。 Powershell可以做到这一点吗?

+0

您可以使用'$ PsBoundParameters'。 – BenH

+1

@BenH是对的,'Invoke-SqlConnection @ PSBoundParameters' –

+0

@BenH,请把它作为答案,我会接受它:) –

回答

5

传入的参数保存在自动变量$PSBoundParameters中。然后,您可以使用@PSBoundParameters对此变量进行溅射来使用此命令。

function Get-DBStatus { 
    <# .. removed help section for brevity .. #> 
    [CmdletBinding()] 
    [OutputType([System.Object])] 
    param (
     [Parameter(Mandatory = $true)] 
     [String]$ServerName, 
     [Parameter(Mandatory = $true)] 
     [String]$ServerUser, 
     [Parameter(Mandatory = $true)] 
     [String]$ServerPassword, 
     [Parameter(Mandatory = $true)] 
     [String]$DatabaseName, 
    ) 

try { 
    $dbStatus = Invoke-SqlConnection @PSBoundParameters 
} 
catch { 
    Write-Error -Message ('An error has occured while ...') 
} 
... 
+0

谢谢你BenH! –

相关问题