有没有办法连接到需要不同用户名/密码的网络驱动器,而不是运行包的用户的用户名/密码?
我需要从远程服务器复制文件。现在我在Windows资源管理器中映射网络驱动器,然后执行文件系统任务。但是,最终这个包将从另一台机器自动运行,并且需要自己映射网络驱动器。这可能吗?
答案 0 :(得分:11)
您可以将“执行进程”任务与“net use”命令一起使用来创建映射驱动器。以下是应该如何设置任务的属性:
可执行文件: net
参数:使用\ Server \ SomeShare YourPassword / user:Domain \ 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"
答案 1 :(得分:1)
为什么不使用FTP任务将文件传递到本地计算机?在本地计算机上运行SSIS。使用二进制FTP传输时,它真的很快。请记住,SSIS的ROW分隔符应该是LF,而不是CRLF,因为二进制FTp不会将LF(unix)转换为CRLF(windows)
答案 2 :(得分: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()
这只是在过程的“第二次运行”,如果我第三次运行它一切正常,所以我猜测连接没有正确关闭或者它没有等待复制/移动在前进之前完成或完成某些操作,但我无法找到阻止此错误的“关闭”或“刷新”命令。如果您有任何解决方案,请告诉我,但上述代码应该可以使用您的备用凭据来映射驱动器,并允许您访问该共享。
扎克
答案 3 :(得分:0)
要使程序包更健壮,可以执行以下操作;
在第一个执行流程任务中,设置-FailTaskIfReturnCodeNotSuccessValue = False 如果最后一个断开连接没有起作用,这将使程序包运行。
答案 4 :(得分:0)
这是一个比较老的问题,但是带有SSIS数据库的SQL Server的更新版本允许您使用代理执行SQ Server作业。