質問

過去に、SQLCLR内にスリッピング言語(JScriptなど)を埋め込むことができたため、特定の計算を実行するためにスクリプトを関数のパラメーターとして渡すことができます。簡単な例を次に示します(関数ssScriptExecuteは、スクリプト内のすべての印刷物の連結を返します):

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

-- Calculation: 1.6666666666666665

Powershellランタイムを同じ方法で埋め込むことができるようになりたいです。しかし、ランタイムはパスでアセンブリを見つけようとし、SQlCLR内にパスがないため、あらゆる種類の問題が発生しました。発生したエラーに関する詳細情報を提供できることを嬉しく思いますが、誰かがこれを試したかどうか疑問に思っていました!

ありがとう!

役に立ちましたか?

解決

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

Visual Studioプロジェクトでこの変更されたdllを必ず参照してください。

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

btw、powershellをSQLで実行して必要なすべてのdllを自動登録する

このps1コードを使用できます

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

他のヒント

これを行う唯一の方法は、PowershellをホストするWCFサービスを作成し、SQLCLRが要求dbo.ssScriptExecute(...)をそのサービスに送信して実行することだと思います。 それに加えて、SQLCLR(DLR言語のメモリリーク問題のないインタープリター)にpaxScript.netを正常に埋め込みました。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top