我有一个powershell函数,有没有办法将其转换为脚本方法?
function Do-Something {
Param(
$p1,
$p2
)
[...]
}
我试图以下面的方式将其转换为脚本方法,但它会抛出异常。
$obj | add-member-membertype scriptmethod { $function:Do-Something }
答案 0 :(得分:3)
此代码显示了两个示例。在我看来,第一个Add-Member显示了更好的方法,更多的OOP。
function Convert-PersonToText
{
param($Person)
'{0} {1}' -f $Person.FirstName, $Person.LastName
}
function Print-Something
{
Write-Host 'Something'
}
function New-Person
{
param($FirstName, $LastName)
$result = '' | select FirstName, LastName
$result.FirstName = $FirstName
$result.LastName = $LastName
Add-Member -InputObject $result -MemberType ScriptMethod -Name 'ToText' -Value { Convert-PersonToText -Person $this }
Add-Member -InputObject $result -MemberType ScriptMethod -Name 'Print' -Value ((Get-Command -Name 'Print-Something').ScriptBlock)
$result
}
$person = New-Person -FirstName 'John' -LastName 'Smith'
$person.ToText() | Out-Host
$person.Print()
输出:
John Smith
Something
答案 1 :(得分:2)
这是另一种方法(你可以将它与@fdafadf解决方案混合使用):
function Do-Something { param($p1) Write-Host $p1 }
$obj = @{}
$obj | Add-Member -MemberType ScriptMethod -Name "DoSomething" -Value ${function:Do-Something}
$obj.DoSomething(3)