2

こんにちは、.vbs ファイルに入れて実行すると、問題なく実行される次の VBS があります。

Dim objshell
Set objshell = CreateObject("Shell.Application")
objshell.NameSpace("C:\Temp").CopyHere(objshell.NameSpace("C:\Temp\Test.zip").Items())
Set objshell = Nothing

しかし、SSBI 2008 のスクリプト タスクにカット アンド ペーストすると、エラーが発生して実行されます。

Error: 0x1 at Script Task: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Runtime.InteropServices.COMException (0x80020003): Member not found. (Exception from HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND))
   at Microsoft.VisualBasic.CompilerServices.LateBinding.InternalLateSet(Object o, Type& objType, String name, Object[] args, String[] paramnames, Boolean OptimisticSet, CallType UseCallType)
   at Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateSet(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean OptimisticSet, Boolean RValueBase, CallType CallType)
   at Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateSetComplex(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean OptimisticSet, Boolean RValueBase)
   at ST_a4312d30d99b4cc4b02a2198afbc77d9.vbproj.ScriptMain.Main()
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
   at Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()
Task failed: Script Task

これを機能させるには、デフォルトで実行するだけでなく、SSBI内に設定する必要があると思います。代わりに C# を使用する必要があるかどうかは問題ではありません。ただし、サードパーティのものを使用してインストールするように頼まないでください。システムは、.NET 4.5 がインストールされた Windows 7 を実行しています。

助けてください!ありがとうございました!

4

2 に答える 2

3

構成はわかりましたが、やや複雑です。

  1. スクリプト タスク、[スクリプトの編集] を開きます。スクリプト編集ウィンドウが開いたら、上記のスクリプトを少し変更して Sub Main に配置します。

    薄暗いオブジェクトシェル

    になる

    薄暗いオブジェクトシェルをシェルとして

  2. Project->st_xxxxx Properties、Signing に移動し、アセンブリにチェックマークを付け、New を選択し、任意のファイル名を入力して、Protect my file with a password のチェックを外します。

  3. [参照]、[追加]、[COM] に移動し、[Microsoft Shell Controls And Automation]、[OK] を選択します。

    ** No template information found... というポップアップが表示されますが、無視してください。**

  4. 追加したばかりの Microsoft Shell コントロールを強調表示し、右下のプロパティ セクションを見て、"Strong Name" が True であることを確認します。

    (ステップ 2. を実行していない場合、これは False である必要があります。ステップ 2 をやり直して、これが True であることを確認してください)

  5. [マイ コンピューター] を開き、生成された Microsoft Shell Controls dll のパスに移動します (強調表示されているパスを参照してください。通常は C:\Users\xxxxxxx\AppData\Local\Temp\SSIS\yyyyyyyyyyyyyyyy\obj\Debug\Interop.Shell32.dll です)。 )。それを別の場所にコピーします(スクリプトを編集するたびに元のパス yyyyyyyyyyyyyy がランダムに生成され、署名された dll が毎回失われるためです)。

  6. Project->st_xxxxx Properties に戻り、強調表示された Microsoft Shell Controls を削除します。[追加]、[参照] の順にクリックし、先ほどコピーした Interop.Shell32.dll を選択して、[OK] をクリックします。ここでも、Strong Name プロパティが True であることを確認します。そうでない場合は、手順 2 からやり直してください。

  7. [参照] の [インポートされた名前空間] の下で、下にスクロールして [Shell32] の横にあるボックスにチェックを入れます。

  8. Signing に移動し、Sign the assembly のチェックを外します。右上のプロジェクト エクスプローラーに移動し、手順 2 で作成したキー ファイル (xxxx.snk) を削除します (フォルダーからではなくプロジェクト エクスプローラー内でキー ファイルを削除し、プロジェクト エクスプローラーまたはスクリプトに含まれていないことを確認します)。タスクは実行されません)。

  9. すべて保存して、スクリプト編集ウィンドウを閉じます。

  10. コンピューターで「gacutil.exe」を探します。SSIS のインストールと一緒に持っている必要があります。C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\x64 の下にあります。gacutil -i "ステップ 5 でコピーした Interop.Shell32.dll のパス" と入力します。

    例: gacutil -i F:\Code\Interop.Shell32.dll

これらのすべての手順の後、スクリプト タスクは問題なく実行されるはずです。もちろん、他の COM 参照を使用している場合は、これらの手順が必要です。作業を簡単にする方法があれば教えてください。お役に立てれば。

于 2012-10-23T08:13:51.467 に答える
2

SSISのスクリプトタスクは、VBScriptコードではなく.NETコードを実行します。Fileクラスやその他の必要なクラスを使用して、VB.NETでコードを書き直すだけです。

または、VBSスクリプトを保持し、プロセスの実行タスクを使用して実行します。

于 2012-10-22T20:17:16.817 に答える