我想在我的函数中创建一个服务器smo对象,然后使用它对传入的scriptblock执行一些有用的操作。之后,将删除服务器veriable。我想设计一个类似于模板设计模式实现的函数。我的代码如下所示,我不确定如何在scriptblock中使用$ server变量。任何人都可以帮忙吗?感谢。
function test{ [CmdletBinding()] param ( [Parameter(Mandatory = $true, Position = 0)] [object] $instance, [Parameter(Mandatory = $true, Position = 1)] [scriptblock] $script ) [Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null $server = new-object ('Microsoft.SqlServer.Management.Smo.Server') $instance # do something with $script Remove-Variable -Name $server }
答案 0 :(得分:3)
需要编写脚本块,使其期望服务器变量,例如:
test $anInstance {param($server) $server.DoSomething}
然后在你的测试函数中执行脚本块,如下所示:
& $scripblock $server
如果scriptblock需要多个参数:
test $anInstance {param($server, $name) $server.DoSomething}
请记住使用空格分隔的args调用:
& $scripblock $server "A name"