2010-11-23 15 views
7

パッケージを実行しているユーザーのユーザー名/パスワードと異なるユーザー名/パスワードを必要とするネットワークドライブに接続する方法はありますか?SSIS:異なるユーザー名とパスワードを使用してネットワークドライブにアクセスする

リモートサーバーからファイルをコピーする必要があります。今は、Windowsエクスプローラでネットワークドライブをマップしてから、ファイルシステムタスクを実行します。しかし、結局、このパッケージは別のマシンから自動的に実行され、ネットワークドライブを独自にマップする必要があります。これは可能ですか?

+1

なぜあなただ​​けのパッケージを実行しているユーザーまたはプロセスに必要な権限を与えることはできませんが、「プロセス・タスクを実行しますか」?あなたがなぜその制限を持っているのか説明すれば、より良い答えが得られるかもしれません。その間、NET USEはどうですか? – Pondlife

+0

権限を持つユーザーとして実行する予定です。問題は、AS400上でマップされたドライブであり、AS400ではサポートされていない、名前に10文字以上のアンダースコアを持つアカウントを使用して、通常はすべてのジョブを実行するということです。一貫性のために、同じアカウントでこのジョブを実行し、他のアカウントの400で認証することを望んでいました...しかし、それは価値がないと考えているので、あきらめるだけです – nosirrahcd

答えて

1

なぜFTPタスクを使用してファイルをローカルマシンに転送しないのですか? SSISをローカルマシンで実行します。バイナリでFTPを使用して転送する場合、その本当の高速です。バイナリFTpはLF(unix)をCRLF(Windows)に変換しないため、SSISのROWデリミタはCRLFではなくLFであることを覚えておいてください。

1

ネットワークドライブをマップする必要があります。今:そこから

profile = "false" 
    landingPadDir = Dts.Variables("strLandingPadDir").Value.ToString 
    resultsDir = Dts.Variables("strResultsDir").Value.ToString 
    user = Dts.Variables("strUserName").Value.ToString 
    pass = Dts.Variables("strPassword").Value.ToString 
    driveLetter = Dts.Variables("strDriveLetter").Value.ToString 

    objNetwork = CreateObject("WScript.Network") 
    CheckDrive = objNetwork.EnumNetworkDrives() 

    If CheckDrive.Count > 0 Then 
     For intcount = 0 To CheckDrive.Count - 1 Step 2 'if drive is already mapped, then disconnect it 
      If CheckDrive.Item(intcount) = driveLetter Then 
       objNetwork.RemoveNetworkDrive(driveLetter) 
      End If 
     Next 
    End If 

    objNetwork.MapNetworkDrive(driveLetter, landingPadDir, profile, user, pass) 

はただドライブ文字とマップされたドライブを介してファイルにアクセスすることを使用します。

私は2つの共有ドライブにアクセスして、ドライブの間にいくつかのコピー/移動操作を実行し、新しいスクリプトで(ここでは私を導いた)1つの問題を抱えていると私はSSISのエラーを取得すると言うこと:

This network connection has files open or requests pending. 
    at Microsoft.VisualBasic.CompilerServices.LateBinding.InternalLateCall(Object o, Type objType, String name, Object[] args, String[] paramnames, Boolean[] CopyBack, Boolean IgnoreReturn) 
    at Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateCall(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack, Boolean IgnoreReturn) 
    at ScriptTask_3c0c366598174ec2b6a217c43470f581.ScriptMain.Main() 

これはプロセスの2回目の実行時にのみ実行され、3回実行するとすべて正常に動作するため、接続が正しく閉じられていないか、コピー/移動を待っていません先に進める前に完了していますが、私はこのエラーを防ぐ "close"または "flush"コマンドを見つけることができません。解決策がある場合は教えてください。しかし、上記のコードは、代替の資格情報を使用してドライブをマップし、その共有にアクセスできるようにするために有効です。

ザック

+0

objNetworkとは何ですか? – toha

+0

これは、CreateObject( "WScript.Network")によって作成されたオブジェクトにアクセスするために参照する変数です。 – Zach

10

あなたがマップされたドライブを作成するには、「NET USE」コマンドで実行プロセス・タスクを使用することができます。ここでは、タスクのプロパティを設定する必要があります方法は次のとおりです。

実行可能ファイル:ネット

引数:使用\サーバー\ SomeShareあなたのパスワード/ユーザー:ドメイン\ YourUser次

任意のファイルシステムタスク実行プロセスはファイルにアクセスできます。

代替方法

このSql Server Select Articleは、詳細の手順をカバーしていますが基本は以下のとおりです。

1)これは、zにマップ(ネットワークドライブをマップするために「実行プロセス・タスク」を作成します:)

Executable: cmd.exe 
Arguments: /c "NET USE Z: "\\servername\shareddrivename" /user:mydomain\myusername mypassword" 

2)次に、「ファイルシステムタスク」を実行してコピーを実行します。接続先の "フラットファイル接続" は、 "DelayValidation"がTrueの場合、にz:\ suchandsuch.csvが設計時に存在しないようにする必要があります。

3)最後に、あなたが他で行われているドライブマップ解除

Executable: cmd.exe 
Arguments: /c "NET USE Z: /delete" 
+0

ありがとう@Valentino Vranken!あなたの解決策は私を助けましたが、私はあなたの答えを使用した後に見つけた関連記事を含めるように回答を更新しました。 –

+2

ありがとう@Valentinoは魅力のように動作します。 "/ c" NET USE Z:/ delete/yes "'強制的に切断する – Equiman

+0

ネットワークドライブをコマンドプロンプトからマップしようとするとエラーが発生します。エラーは、 "ファイル名、ディレクトリ、またはボリュームラベルの構文が正しくありません" – Sakthivel

関連する問題