在我们的自动化框架中,正在创建许多代理功能。 通常,通过将函数包装到另一个函数中来创建代理函数。但我们的团队正在通过将函数包装到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没有这样的东西。
我们正在失去管道,帮助文档的强大优势,并且在代理功能增加时也无法处理复杂性。对此最好的替代方法是什么?