2010-11-23 2 views
7

패키지를 실행하는 사용자의 사용자 이름/암호와 다른 사용자 이름/암호가 필요한 네트워크 드라이브에 연결하는 방법이 있습니까?SSIS : 다른 사용자 이름과 암호를 사용하여 네트워크 드라이브에 액세스

원격 서버에서 파일을 복사해야합니다. 지금은 Windows 탐색기에서 네트워크 드라이브를 매핑 한 다음 파일 시스템 작업을 수행합니다. 그러나 결국이 패키지는 다른 컴퓨터에서 자동으로 실행되며 네트워크 드라이브를 자체적으로 매핑해야합니다. 이것이 가능한가?

+1

왜 그냥 패키지를 실행하는 사용자 또는 프로세스에 필요한 권한을 부여 할 수 없습니다를 "프로세스 실행 작업"? 왜 그런 제한이 있는지 설명하면 더 나은 대답을 얻을 수 있습니다. 그동안 NET USE는 어떻습니까? – Pondlife

+0

우리는 권한이있는 사용자로 실행하려고합니다. 문제는 그것이 AS400의 매핑 된 드라이브이며 일반적으로 AS400에서 지원되지 않는 10 자 이상의 이름과 밑줄이있는 계정으로 모든 작업을 실행한다는 것입니다. 우리는 일관성을 위해 동일한 계정으로이 작업을 실행하고 다른 계정의 400으로 인증하기를 바랬습니다 ...하지만 그만큼 가치가 없다고 생각하고 있으므로 포기할 것입니다. – nosirrahcd

답변

1

FTP 작업을 사용하여 파일을 로컬 시스템으로 가져 오지 않는 이유는 무엇입니까? 로컬 컴퓨터에서 SSIS를 실행합니다. 바이너리에서 FTP를 사용하여 전송할 때, 실제로 빠릅니다. 이진 FTp는 LF (유닉스)를 CRLF (윈도우)로 변환하지 않으므로 SSIS의 ROW 구분자는 CRLF가 아님을 기억하십시오.

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) 

부터 driveLetter를 사용하고 매핑 된 드라이브를 통해 파일에 액세스하십시오.

나는 이주 드라이브에 액세스하고 드라이브 사이에 복사/이동 작업을 수행하는 새로운 스크립트를 하나의 문제를 (어느 날 여기 LED) 데 내가 말한다 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() 

이것은 프로세스의 "두 번째 실행"에만 있으며 세 번째로 실행하면 연결이 제대로 닫히지 않았거나 복사/이동을 기다리지 않고 모든 작업이 정상적으로 작동합니다. 앞으로 이동하기 전에 완료하거나이 오류를 방지하는 "닫기"또는 "플러시"명령을 찾을 수 없습니다. 어떤 해결책이 있다면 알려주십시오. 그러나 위의 코드는 대체 자격 증명을 사용하여 드라이브를 매핑하고 해당 공유에 액세스 할 수있게 해줍니다.

자크는

+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

관련 문제