IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Move-Item sur fichier utilisé par un autre processus [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur BI, Infor M3, SQL
    Inscrit en
    Novembre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur BI, Infor M3, SQL
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 30
    Par défaut Move-Item sur fichier utilisé par un autre processus
    Bonjour,

    J'ai un serveur sur lequel un logiciel (Directory Monitor) tourne pour scruter un dossier.
    Dès qu'un fichier est déposé, le logiciel lance un script qui va envoyer ce script par mail puis doit le déplacer dans un dossier d'archivage.

    Directory Monitor lance mon script comme ceci :
    Nom : Param.PNG
Affichages : 1195
Taille : 6,5 Ko

    Mon script est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    param
    (
          [Parameter(Mandatory=$False)]
          [string]$attached_file
    )
    [...] 
    
    #Archivage du fichier
    $NouvDossier = "D:\Devoteam_envoi_mail\Archives"
    Move-Item $attached_file-Destination $NouvDossier
    #Get-ChildItem $filenameAndPath | Move-Item -Destination $NouvDossier
    
    Start-Sleep -Seconds 5
    Cependant j'obtiens l'erreur suivante :
    Nom : Erreur.PNG
Affichages : 1317
Taille : 66,7 Ko

    La commande fonctionne si je l'exécute depuis un invite Powershell et en renseignant le "$attached_file" directement.
    La commande Copy-Item fonctionne bien car même si le fichier est verrouillé ça ne pose pas de ploblème.
    De plus je pense (et suis presque sur) que mon fichier est verrouillé par le script lui même (quand la fenêtre de script s'ouvre, si j'essaye de supprimer le fichier qui vient d'être déposé, Windows me dit que le fichier est utilisé par Powershell)
    J'ai laissé dans l'extrait du script un essai en passant par un pipe qui a échoué égallement.

    Comment puis je fair sauter le verrou ou bien déplacer mon fichier quand même ? (Remove-Item me donnera exactement la même erreur)

    Merci pour votre aide.

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par daminator25 Voir le message
    Comment puis je faire sauter le verrou ou bien déplacer mon fichier quand même ?
    A priori pas besoin de toucher au verrou, essaie en libérant (Dispose() ) l'objet mail et/ou l'objet attachement dans le script d' envoi de mail.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur BI, Infor M3, SQL
    Inscrit en
    Novembre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur BI, Infor M3, SQL
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 30
    Par défaut
    Bonjour et merci.

    J'ai effectué un nouveau test à l'instant ce matin.
    J'ai retiré l'envoi du mail pour ne garder que la ligne du Move-Item (seules et unique ligne).
    Ca fonctionne.

    J'ai utilisé le script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    param
    (
          [Parameter(Mandatory=$False)]
          [string]$attached_file
    )
    
    #Paramétrages des variables
    $EmailTo1 = "john.doe@domaine.com" #Pour test
    $EmailFrom = "interface@domaine.com"
    $Subject = "Sujet" 
    $Body = "Voir ci-joint" 
    $SMTPServer = "smtp.domaine.com"
    $SMTPPort = "25"
    $filenameAndPath = $attached_file
    $PathFileToMove = $attached_file
    
    #Envoi du mail à l'adresse 1
    #Write-Host "Envoie du mail a : $EmailTo1"
    #$SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom,$EmailTo1,$Subject,$Body)
    #$attachment = New-Object System.Net.Mail.Attachment($filenameAndPath)
    #$SMTPMessage.Attachments.Add($attachment)
    #$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, $SMTPPort) 
    #$SMTPClient.EnableSsl = $false 
    #$SMTPClient.Send($SMTPMessage)
    
    #Archivage du fichier
    Write-Host "Archivage du fichier"
    $NouvDossier = "D:\Devoteam_envoi_mail\Archives"
    Move-Item $PathFileToMove -Destination $NouvDossier -Force
    
    Start-Sleep -Seconds 5
    Comme vous le voyez j'ai désactivé la partie mail et ça marche comme un charme.
    Par contre si j'active la partie des mails ça ne fonctionne plus.

    J'ai tenté Clear-Variable et Remove-Variable mais je n'ai pas réussi.
    Je vais poursuivre mes recherches et on verra bien.

    Merci.



    La solution était donc la suivante comme tu me l'a prosposé :
    Juste j'essayais de "disposer" le mauvais élément

    J'ai été aidé par le post suivant : https://stackoverflow.com/questions/...ailing-to-send

    Merci beaucoup.

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Pour une prochaine fois, comment reconnaitre les objets à libérer explicitement :
    Code Powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $EmailAttachment = new-object Net.Mail.Attachment('C:\temp\test.csv')
    $EmailAttachment -is [System.IDisposable]
    #True
    $EmailAttachment.GetType().getinterfaces()
     
    #IsPublic IsSerial Name                                     BaseType
    #-------- -------- ----                                     --------
    #True     False    IDisposable
     
    $EmailAttachment.Dispose()

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ouvrir fichier utilisé par un autre processus
    Par louay02 dans le forum Débuter
    Réponses: 7
    Dernier message: 12/10/2011, 10h41
  2. Copier un fichier utilisé par un autre processus
    Par shaun_the_sheep dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 29/12/2008, 15h45
  3. Réponses: 7
    Dernier message: 15/06/2007, 18h50
  4. [JNI] Fichier utilisé par un autre processus
    Par Julaie95 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 10/08/2006, 11h39
  5. Erreur "Fichier utilisé par un autre processus"
    Par solo3326 dans le forum Langage
    Réponses: 3
    Dernier message: 18/08/2005, 16h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo