Vous devez mapper le lecteur réseau, voici un exemple que j'utilise maintenant:
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)
De là, utilisez juste cette driveLetter et accédez au fichier via le lecteur mappé.
Je vais avoir un problème (ce qui m'a amené ici) avec un nouveau script qui accède à deux disques d'actions et effectue des opérations de copier/déplacer entre les lecteurs et je reçois une erreur de SSIS qui dit:
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()
Ceci est seulement sur la "2ème exécution" du processus et si je l'exécute une 3ème fois tout cela fonctionne très bien donc je suppose que la connexion n'est pas correctement fermée ou n'attend pas la copie/déplacer vers terminer avant d'avancer ou quelque chose de ce genre, mais je suis incapable de trouver une commande "close" ou "flush" qui empêche cette erreur. Si vous avez une solution, faites le moi savoir, mais le code ci-dessus devrait fonctionner pour obtenir le lecteur mappé en utilisant vos informations d'identification de remplacement et vous permettre d'accéder à ce partage.
Zach
Pourquoi ne pouvez-vous pas seulement donner les autorisations nécessaires à l'utilisateur ou d'un processus en cours d'exécution du package? Si vous expliquez pourquoi vous avez cette limitation, vous pourriez obtenir une meilleure réponse. En attendant, qu'en est-il de NET USE? – Pondlife
Nous allons le faire fonctionner comme un utilisateur qui a des permissions. Le problème est qu'il s'agit d'un lecteur mappé sur un AS400 et que nous exécutons normalement tous nos travaux avec un compte comportant plus de 10 caractères et un trait de soulignement dans le nom - qui n'est pas pris en charge sur un AS400. Nous espérions, par souci de cohérence, faire fonctionner ce travail avec le même compte et nous authentifier avec le 400 sur l'autre compte ... Mais nous pensons que cela n'en vaut pas la peine, donc nous allons probablement abandonner. – nosirrahcd