2010-11-23 65 views
7

有沒有辦法連接到一個網絡驅動器,該網絡驅動器需要與運行該軟件包的用戶的用戶名/密碼不同的用戶名/密碼?SSIS:使用不同的用戶名和密碼訪問網絡驅動器

我需要從遠程服務器複製文件。現在我在Windows資源管理器中映射網絡驅動器,然後執行文件系統任務。但是,最終該軟件包將從另一臺機器自動運行,並且需要自行映射網絡驅動器。這可能嗎?

+1

爲什麼你不只是給用戶或進程中運行的組件所必需的權限?如果你解釋爲什麼你有這個限制,你可能會得到更好的答案。與此同時,NET USE呢? – Pondlife 2010-11-24 16:29:46

+0

我們將以擁有權限的用戶身份運行它。問題在於它是AS400上的映射驅動器,我們通常使用名稱中包含超過10個字符和下劃線的帳戶運行我們的所有作業 - 這在AS400上不受支持。爲了保持一致性,我們希望用同一個賬戶來運行這個工作,並且僅僅通過另一個賬戶上的400進行驗證......但是我們認爲這是不值得的,所以可能會放棄。 。 – nosirrahcd 2010-11-26 21:38:16

回答

1

爲什麼不使用FTP任務將文件傳送到本地計算機?在本地機器上運行SSIS。在二進制文件中使用FTP傳輸時,它的速度非常快。請記住,SSIS的ROW分界符應該是LF,而不是CRLF,因爲二進制FTp不會將LF(unix)轉換爲CRLF(windows)

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並通過映射的驅動器訪問文件。

我有一個問題(這導致我在這裏)與訪問兩個共享驅動器和驅動器之間進行一些複製/移動操作的新的腳本,我從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 2016-08-09 04:14:56

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" 
相關問題