如何在多个文件中创建powershell代理函数模块?

时间:2018-01-17 09:37:48

标签: c# powershell object module proxy

在我们的自动化框架中,正在创建许多代理功能。 通常,通过将函数包装到另一个函数中来创建代理函数。但我们的团队正在通过将函数包装到ScriptMethod中来创建代理函数。他们这样做是为了在函数内部使用成员变量。

见下面的例子:

function New-StorageArray {
Param
(
    $Name,
    $Credential,
    [version] $Version
)
$array = [pscustomobject] @{
    arrayName = $Name
    arrayCredential = $Credential
    arrayVersion = $version
}

$array | Add-Member -MemberType ScriptMethod ProxyForCmdlet1 {
    Param
    (
        $property1,
        $property2
    )
    try
    {
        Connect-StorageArray -ArrayName $this.ArrayName -Credential $this.ArrayCredential
        $resultOfCmdlet1 = Cmdlet1 -property1 $property1 -property2 $property2
        $status = $true
    }
    catch
    {
        $status = $true
        Write-Error "Some problem occured"
    }
    finally
    {
        Disconnect-StroageArray
    }

    $retObject = [PSCustomObject] @{
        Status = $status
        Result = $resultOfCmdlet1
    }

    return $retObject  

}

$array | Add-Member -MemberType ScriptMethod ProxyForCmdlet2 {   
    # same as ProxyForCmdlet1 except it is wrapper for another cmdlet
}

 $array | Add-Member -MemberType ScriptMethod ProxyForCmdlet3 {   
    # same as ProxyForCmdlet1 except it is wrapper for another cmdlet
} 
return $array     }

要实例化特定版本的数组,它们如下所示。

$arrayVerion5 = New-StorageArray -Name "MAchineIP" -Credential "Credential" -Version "5.0"

   $arrayVersion5.ProxyForCmdlet1("Parameters")

$arrayVerion4 = New-StorageArray -Name "MAchineIP" -Credential "Credential" -Version "4.0"

效果很好。但是当代理函数包含在Scriptmethod中时,我们会丢失流水线,帮助文档。当代理函数的数量增加时,我们无法将其写入不同的文件,因为它是一个具有所有成员函数的函数。

在C#中,他们将编写部分类,并且可以跨多个文件编写函数。但是,powershell没有这样的东西。

我们正在失去管道,帮助文档的强大优势,并且在代理功能增加时也无法处理复杂性。对此最好的替代方法是什么?

0 个答案:

没有答案