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 :

Surveiller en permanence l'arrivée d'un fichier dans un dossier partagé


Sujet :

Scripts/Batch

  1. #41
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 222
    Par défaut
    correction : je te déconseille de les masquer, il est préférable de les désactiver.

    cmdow est un programme externe tu peux le lancer en Powershell ou batch ou autre.

  2. #42
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2010
    Messages : 313
    Par défaut
    Bonjour Eric

    Depuis que j'ai modifier le timing à 30 secondes, c'est mieux pas aussi fiable que lorsque j'avais le code ci-dessous...

    Code VBA : 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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Private Sub ValeurCarte_LostFocus()
     
    'Déclaration des variables
    Dim winShell As New ShellWindows
    Dim IE As InternetExplorer
    Const stURL As String = "https://ecritf.paytec.ch/"
    Dim IEDoc As HTMLDocument
    Dim InputGoogleZoneTexte As HTMLInputElement
     
    For Each IE In winShell
         If IE.LocationURL = stURL Then Exit For
    Next IE
     
    If Not IE Is Nothing Then
     
      'Affichage de la fenêtre IE
       IE.Visible = True
     
        'On pointe le membre Document
        Set IEDoc = IE.Document
     
        'On pointe notre Zone de texte
        Set InputGoogleZoneTexte = IEDoc.all("amount")
     
        'On définit le texte que l'on souhaite placer à l'intérieur
        InputGoogleZoneTexte.Value = Me.[Valeur Carte]
     
        'On pointe notre bouton
    Set InputGoogleBouton = IEDoc.all("pay")
     
    'On simule un clic
    InputGoogleBouton.Click
     
        End If
     
    'On libère les variables
        Set IE = Nothing
        Set IEDoc = Nothing
     
    End Sub

    Est-il possible de modifier quelques lignes dans le code actuel pour avoir la même gestion... le problème vient je pense de IE, car le temps d'ouverture , le temps que les champs dans IE soit affiché, le temps que le client rentre son code sur le terminal, bref je pense que le problème vient de là alors qu'avec l'ancien code, je n'avais pas de soucis mais c'était en direct depuis access

    MErci

  3. #43
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 222
    Par défaut
    Je voit, le code transmit vérifie et utilise un IE déjà ouvert.

    Que ce passe t'il avec ton "ancien code" si il n'y à pas de IE ouvert ? Il semblerai qu'il ne passe rien ou que ça plante.

  4. #44
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2010
    Messages : 313
    Par défaut
    Oui je dois d'abord ouvrir ie pour que ça fonctionne... Mais ensuite ça marche très bien.

  5. #45
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 222
    Par défaut
    Voici une adaptation plus fidèle de ton code d'origine.
    Je te laisse modifier les timers qui sont fonction de ta latence (poste, RAM, débit ...)

    Code powershell : 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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    $dossier = "C:\MonDossierASurveiller"
     
    function Ie_Pay([string] $valeur)
    {
        $url = "https://ecritf.paytec.ch/"
     
        $ie = $null
        # Récupère les instances de Internet Explorer
        $ies = (New-Object -ComObject Shell.Application).Windows() | Where-Object{$_.Name -eq "Internet Explorer"}
     
        # Si il n'en existe aucune
        if ($ies -eq $null)
        {
            # On la crée
            $ie = New-Object -COMObject InternetExplorer.Application
        }
        else 
        {
            # Récupère l'instance ayant la bonne url
            $ie = $ies | Where-Object{$_.LocationURL -eq $url} | Select-Object -First 1
            # Si aucune instance n'a la bonne url
            if ($ie -eq $null)
            {
                # On prend la première instance
                $ie = $ies | Select-Object -First 1
            }
        }
     
        # On rend visible
        $ie.visible = $true
     
        # On vérifie si on n'est pas sur la bonne url
        if ($ie.LocationURL -ne $url)
        {
            # Alors on y va
            $ie.Navigate($url)
             While ($ie.Busy) {
                Start-Sleep -Milliseconds 100
            }
     
            Start-Sleep -Milliseconds 1000
        }
     
        # Défini la valeur
        $ie.Document.getElementById("amount").value = $valeur
        Start-Sleep -Milliseconds 1000
     
        # Clique sur le bouton
        $ie.Document.getElementById("pay").Click()
        Start-Sleep -Milliseconds 1000
    }
     
    Write-Host "$((Get-Date).ToString()) : Surveillance du dossier $dossier"
    while($true)
    {
        foreach($file in Get-ChildItem -Path ($dossier + "\*.pay"))
        {
            Write-Host "`n`n$((Get-Date).ToString()) : Fichier trouvé $($file.Name)"
            $valeur = $file.BaseName -replace "\.", ","
     
            Write-Host "$((Get-Date).ToString()) : Valeur $valeur"
            [double]$result = 0
            if([double]::TryParse($valeur, [ref] $result))
            {
                Write-Host "$((Get-Date).ToString()) : Valeur valide"
                try
                {
                    Write-Host "$((Get-Date).ToString()) : Traitement dans IE"
                    Ie_Pay -valeur $valeur
                    Write-Host "$((Get-Date).ToString()) : Suppression du fichier"
                    Remove-Item -Path $file.FullName -Force
                    Write-Host "$((Get-Date).ToString()) : Terminée"
                }
                catch
                {
                    Write-Host "$((Get-Date).ToString()) : Une erreur s'est produite !" -ForegroundColor Red
                }
            }
            else
            {
                Write-Host "$((Get-Date).ToString()) : Valeur non valide !" -ForegroundColor Red
            }
        }
        Start-Sleep -Seconds 1
    }
     
    exit

  6. #46
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 222
    Par défaut
    Je ne vois pas comment tu peux afficher un message à la tentative de fermeture d'un script batch. Je reste donc sur la désactivation de la fenêtre.
    Voici comment tu peut faire.

    Tu place l'utilitaire cmdow.exe à coté de ton fichier script (dans le même dossier)

    En batch
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    title TEST
    "%~dp0cmdow.exe" @ /dis /ren "Verrouiller : TEST"
    pause

    En Powershell
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    & ".\cmdow.exe" '@', '/dis', '/ren', '"Verrouiller : TEST"'
    pause

    Pour plus d'informations sur les possibilités de cmdow tu peux consulter la page d'aide : https://ritchielawrence.github.io/cmdow/#usage

  7. #47
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2010
    Messages : 313
    Par défaut
    Beaucoup de choses à tester, c'est trop sympa ! Un rapide premier test, montre que c'est intéressant....
    Si je veux être sur que ma page internet est bien complètement chargée avant d'envoyer le montant, je dois modifier le deuxième start sleep du code ? Car si il y a des lenteurs internet, j'aimerais assurer que la page soit entièrement charger car autrement je risque une erreur car le code ne trouvera pas "amount"

    Merci

  8. #48
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2010
    Messages : 313
    Par défaut
    Avec le deuxième, ça à l'air de jouer...

    Afin de simplifier pour mes utilisateurs, je pense crée un exe qui lance le powershell, le batch ainsi que la fenetre IE. LE matin ou après un redémarrage, ils n'auront qu'un programme à lancer, et ce programme va juste lancer les 3 autres...
    Ou alors si il y a un bug, que se programme tue les 3 programmes et les relance.
    Faut-il faire ça en batch, powershell autres ?

    Merci

  9. #49
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 222
    Par défaut
    Ah mais en plus c'est pour des utilisateurs. ahah

    Ben comme tu préfère un batch suffira pour le lancement.

    Tu peux ajouter ceci après chaque action
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
             While ($ie.Busy) {
                Start-Sleep -Milliseconds 100
            }

  10. #50
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2010
    Messages : 313
    Par défaut
    Le dernier bout de code attend que la page soit chargée et ensuite attend encore 100 milliseconds ?

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     While ($ie.Busy) {
                Start-Sleep -Milliseconds 100
            }

  11. #51
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2010
    Messages : 313
    Par défaut
    Plus j'avance et plus je remarque que je suis nul...
    J'ai commencé le batche qui va lancer le powershell, ie et l'autre batch ü

    start tiroir_caisse.bat ... youpie ça marche... mais ça ne marche pas pour powershell, j'ai l'impression que pour powershell, il faut une commande executer plutôt. Et pour ie non plus car ça m'ouvre une fenêtre dos !!!

  12. #52
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2010
    Messages : 313
    Par défaut
    Apparemment, ça marche avec ce code:

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PowerShell -NoProfile -ExecutionPolicy Bypass -File "".....\Tiroir_caisse\paytech.ps1"" -Verb RunAs
    start ouvrir_caisse_bat

    Et ça marche pour fermer les programmes avec ce code
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    taskkill /f /im cmd.exe

    Mais les 2 ensembles, ça ne marche pas...
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    taskkill /f /im cmd.exe
    PowerShell -NoProfile -ExecutionPolicy Bypass -File "".....\Tiroir_caisse\paytech.ps1"" -Verb RunAs
    start ouvrir_caisse_bat

    Que dois-je modifier ?

  13. #53
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2010
    Messages : 313
    Par défaut
    Oups .. bien entendu si je tue tout les cas.exe, je tue aussi l'actuel donc la commande n'ira pas plus loin.... Est-il possible de tuer tout les cas.exe sauf l'actuel ? Ou alors est-il possible de nommer les CMd.exe à tuer ? Merci

  14. #54
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2010
    Messages : 313
    Par défaut
    Je crois avoir trouvé la solution... je vais tester ces prochains jours !

  15. #55
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 222
    Par défaut
    Oui tu peux spécifier le nom de la fenetre

    En imaginant que tu veux tuer ta fenêtre cmd.exe qui a pour titre tata (titre définit avec la commande title)
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    taskkill /f /im "cmd.exe" /fi "WINDOWTITLE eq tata"

  16. #56
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2010
    Messages : 313
    Par défaut
    C'est quasi parfait ! Je dois juste encore peaufiner les réglages des tempos

    Code PowerShell : 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
        # On vérifie si on n'est pas sur la bonne url
        if ($ie.LocationURL -ne $url)
        {
            # Alors on y va
            $ie.Navigate($url)
             While ($ie.Busy) {
                Start-Sleep -Milliseconds 100
            }
     
            Start-Sleep -Milliseconds 2000
        }
     
        # Défini la valeur
        $ie.Document.getElementById("amount").value = $valeur
        Start-Sleep -Milliseconds 2000
     
        # Clique sur le bouton
        $ie.Document.getElementById("pay").Click()
        Start-Sleep -Milliseconds 100

    Pourquoi après le "on y va " il y a 2 start sleep ? Il faut que je comprenne bien le fonctionnement si je veux les régler au mieux...

    Merci

  17. #57
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 222
    Par défaut
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    While ($ie.Busy) {
                Start-Sleep -Milliseconds 100
            }
    Tant que IE est occupé on fait une petite pause.

    En théorie cette pause devrait suffire, mais des fois la pages n'est pas totalement chargé et IE n'est plus occupé, d’où la seconde pause.

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/07/2017, 11h32
  2. Réponses: 1
    Dernier message: 12/06/2015, 21h25
  3. Réponses: 26
    Dernier message: 26/03/2010, 15h24
  4. Action à l'arrivée d'un fichier dans un dossier ?
    Par cinezone dans le forum Général Python
    Réponses: 4
    Dernier message: 23/08/2008, 00h55
  5. Pb de comptage de fichiers dans un dossier
    Par oz80 dans le forum Access
    Réponses: 2
    Dernier message: 15/11/2005, 14h26

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