2009-07-29 7 views
1

これまで、私はSQLCLRの中にsripting languate(JScriptのような)を埋め込むことができたので、スクリプトを関数のパラメータとして渡して特定の計算を実行することができました。ここでは単純化した例である(機能ssScriptExecuteは、スクリプト内のすべての印刷のの連結を返します):Powershell in SQLCLR?

select dbo.ssScriptExecute('print("Calculation: "+(1+2/3));') 

-- Calculation: 1.6666666666666665 

私は大好きですが同じようにPowerShellのランタイムを埋め込むことができるように。しかし、私は実行時にパスでアセンブリを見つけようとするため、SQlCLRの内部にパスがないため、あらゆる種類の問題がありました。私が受け取ったエラーについてさらに詳しい情報を提供してくれてうれしいですが、誰かがこれを試したのかどうか疑問に思っていました!

ありがとうございます!

答えて

1

私は、System.Automation.Managementを変更するためにilコードインジェクションを使用します。 GetPSVersionTable()の変数バージョンを "2.0"にする 次に、PowershellコードをSQL Serverで実行できます。

この変更されたDLLは、Visual Studioプロジェクトで必ず参照してください。すべての登録、自動ところで

http://www.box.net/shared/57122v6erv9ss3aopq7p

は、あなたが正しいです。このPS1コード

http://www.box.net/shared/tdlpu1875clsu8azxq4b

+0

PSHost host = new PoShSQL.PoShSQLHost(); RunspaceConfiguration config = new PoShSQL.PoShSQLConfig(); ランスペースrunspace = RunspaceFactory.CreateRunspace(host、config); –

+0

真剣に... ...それは素晴らしいだろう!私はすぐにこの作業をすることができることを確認します。ありがとう。 +1のハック。 – Nestor

+0

...自分で新しい設定を行う必要がある...または「取得日」を使用することはできません>< –

0

私はSQLCLRがアセンブリの特定のセットに限定されていて、PS Automationはそれらの1つではないと考えました。

+0

を使用することができますSQL

をPowerShellを実行して必要なDLL。しかし、制限はサポートされていないことを意味します。承認されたリストにないアセンブリを登録することはできます。 – Nestor

+0

ああ、それは私には起こりませんでした。 System.Management.Automationが祝福されたアセンブリの1つではなく、停止したことに気づいたPowerShell CLRの作成を検討しました。あなたがそれを働かせることができれば面白いだろう。 –

+1

JScript(またはDLRベースのスクリプト言語)を埋め込む際に見つかった1つの問題は、スクリプトから作成された一時アセンブリをアンロードする方法がないことです。これはリークです(ssScriptExecuteを実行するたびに新しいアセンブリがロードされるメモリに格納され、そこに残ります)。uff – Nestor

1

私はこれを行う唯一の方法は、powershellをホストするWCFサービスを作成し、SQLCLRが実行するためにそのサービスに要求dbo.ssScriptExecute(...)を送信させることだと思います。 これ以外にも、私はpaxScript.netをSQLCLR(DLR言語のメモリリークの問題がないインタープリタ)にうまく埋め込んでいます。

関連する問題