2012-03-18 28 views
0

私は自分の関数にサーバーsmoオブジェクトを作成し、それから渡されたscriptblockに役立つ何かを使いたいと思っています。その後、サーバーは確認可能ですが削除されます。私は、テンプレートデザインパターンの実装と同様の機能を設計したいと思っています。私のコードは以下の通りですが、スクリプトブロックで$ server変数を使用するかどうかはわかりません。誰でも助けることができますか?ありがとう。Powershellでテンプレートデザインパターンを使用するには?

 
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 
} 

答えて

2

スクリプトブロックは、サーバー変数などを期待されるように書かれている必要があります

test $anInstance {param($server) $server.DoSomething} 

次に、あなたのテスト関数にそうようにスクリプトブロックを実行します。

& $scripblock $server 

そして、もしスクリプトブロックは複数のパラメータを必要とします:

test $anInstance {param($server, $name) $server.DoSomething} 

スペースで区切られた引数を使用して呼び出すことを忘れないでください。

& $scripblock $server "A name" 
関連する問題