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 :

try,catch sur boucle foreach contenant net view --> Erreur 53 [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre averti
    Homme Profil pro
    OUVRIER
    Inscrit en
    Septembre 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : OUVRIER

    Informations forums :
    Inscription : Septembre 2017
    Messages : 15
    Par défaut try,catch sur boucle foreach contenant net view --> Erreur 53
    Bonjour à tout le monde,

    En avançant sur mon script je me trouve face à la situation que j’ai du mal à gérer
    J’ai le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    try {
        # Utilisation de la commande Net view sur les élèmeents de '$MachinesList' pour afficher les partages des machines préselectionnés | Formatage de la sortie de net view
        foreach ($Machines in Get-Content $MachinesList ) {
        (Net View $Machines /ALL | 
            Where-Object { ($_ -match '\sDisque\s') -or ($_ -match '\sIPC\s') }) -replace '\s\s+', ',' |
            ForEach-Object { ($_ -split ',')[0] } |
            Select-String -pattern ("Nom du partage", "La", "Ressources partagées de ") -notmatch |
            Out-File -FilePath $PartagesMachinesList -Append -ErrorAction Stop
        }
    }
    catch  # [] L’erreur système 53 s’est produite. Erreur [5] Accès refusé.  
    {    
    Get-Content $MachinesList | ForEach-Object { $_ } # Supprimer la $Machines pour Maj de $MachinesList
    }
    J’ai une boucle foreach pour rechercher (net view /all) les partages des machines contenu dans le fichiers textes MachinesList.
    Lors de cette boucle certaines sortie génère l’erreur suivante : Erreur 53 | erreur 5 Accès refusé

    J’ai donc imaginé comme solution l’utilisation de try, catch pour capturer l’erreur et dans la partie catch mettre à jour en supprimant le nom de la machine dans le fichier texte MachinesList ayant généré l’erreur.

    Est-ce la bonne méthode ?

    Merci à vous pour votre aide

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 218
    Par défaut
    L'erreur n'est pas attrapable de la sorte.
    Tu devrait rediriger les erreur vers la sortie standard et testé le code de sortie de la commande

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $result = & "Net" "view" "pc123" 2>&1
    $LASTEXITCODE

  3. #3
    Membre averti
    Homme Profil pro
    OUVRIER
    Inscrit en
    Septembre 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : OUVRIER

    Informations forums :
    Inscription : Septembre 2017
    Messages : 15
    Par défaut try,catch sur boucle foreach contenant net view --> Erreur 53
    Bonjour ericlm128,

    Je te remercie de ton intervention,

    Je m'arrachais les cheveux à tenter de rendre l'erreur système 53 où l'erreur 5 bloquante avec (-ErrorAction Stop) pour pouvoir l'intercepter et la traiter dan le catch.

    Je ne comprends pas la syntaxe de ta ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = & "Net" "view" "pc123" 2>&1
    "pc123"
    2>&1

    Merci

  4. #4
    Membre averti
    Homme Profil pro
    OUVRIER
    Inscrit en
    Septembre 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : OUVRIER

    Informations forums :
    Inscription : Septembre 2017
    Messages : 15
    Par défaut
    Je reviens avec l'hypothèse suivante qui ne fonctionne pas encore.

    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
    try {   
        # Utilisation de la commande Net view sur les élèmeents de '$MachinesList' pour afficher les partages des machines préselectionnés | Formatage de la sortie de net view
        foreach ($Machines in Get-Content $MachinesList) {
            (Net View $Machines /ALL | 
            Where-Object { ($_ -match '\sDisque\s') -or ($_ -match '\sIPC\s') }) -replace '\s\s+', ',' |
            ForEach-Object { ($_ -split ',')[0] } |
            Select-String -pattern ("Nom du partage", "La", "Ressources partagées de ") -notmatch  |
            if ($LASTEXITCODE -eq 0) {
                Out-File -FilePath $PartagesMachinesList -Append 
                write-host "cible atteinte..."  
            } 
            else {
                write-error "Cible non atteinte..."
                throw $error[0].Exception
            }  
        } 
    }
    catch {
        write-error "Pas d'accès..."
        write-host $error[0].Exception.Message -ForegroundColor Cyan
    }
    Où alors avec cette variante

    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
    try {   
        # Utilisation de la commande Net view sur les élèmeents de '$MachinesList' pour afficher les partages des machines préselectionnés | Formatage de la sortie de net view
        foreach ($Machines in Get-Content $MachinesList) {
            $result = (Net View $Machines /ALL | 
            Where-Object { ($_ -match '\sDisque\s') -or ($_ -match '\sIPC\s') }2>&1) -replace '\s\s+', ',' |
            ForEach-Object { ($_ -split ',')[0] } |
            Select-String -pattern ("Nom du partage", "La", "Ressources partagées de ") -notmatch  |
            if ($LASTEXITCODE -eq 0) {
                Out-File -FilePath $PartagesMachinesList -Append 
                write-host "cible atteinte..."  
            } 
            else {
                write-error "Cible non atteinte...,$result"
                throw $error[0].Exception
            }  
        } 
    }
    catch {
        write-error "Pas d'accès..."
        write-host $error[0].Exception.Message -ForegroundColor Cyan
    }
    merci à vous

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 218
    Par défaut
    Un truc comme ça (non testé)

    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
    # Utilisation de la commande Net view sur les élèmeents de '$MachinesList' pour afficher les partages des machines préselectionnés | Formatage de la sortie de net view
    foreach ($Machines in Get-Content $MachinesList)
    {
        $result = Net View $Machines /ALL 2>&1
        if ($LASTEXITCODE -eq 0)
        {
            ($result |  Where-Object {($_ -match '\sDisque\s') -or ($_ -match '\sIPC\s')}) -replace '\s\s+', ',' |
            ForEach-Object { ($_ -split ',')[0] } |
            Select-String -pattern ("Nom du partage", "La", "Ressources partagées de ") -notmatch |
            Out-File -FilePath $PartagesMachinesList -Append -ErrorAction Stop
            write-host "cible atteinte..."
        }
        else
        {
            write-error "Cible non atteinte...,$result"
            throw $error[0].Exception
        }
    }

  6. #6
    Membre averti
    Homme Profil pro
    OUVRIER
    Inscrit en
    Septembre 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : OUVRIER

    Informations forums :
    Inscription : Septembre 2017
    Messages : 15
    Par défaut
    Merci ericlm128,

    Cela fonctionne très bien, je distingue bien les machines accessibles de celles qui ne le sont pas.

    Je peux passer à la prochaine étape : Mettre à jour le fichier texte, '$MachinesList', en supprimant les machines non atteintes avant de poursuivre.

    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
    # Utilisation de la commande Net view sur les Elements de '$MachinesList' pour afficher les partages des machines préselectionnés | Formatage de la sortie de net view
    foreach ($Machines in Get-Content $MachinesList) {
        $result = Net View $Machines /ALL 2>&1
        if ($LASTEXITCODE -eq 0) {
            ($result |  Where-Object { ($_ -match '\sDisque\s') -or ($_ -match '\sIPC\s') }) -replace '\s\s+', ',' |
            ForEach-Object { ($_ -split ',')[0] } |
            Select-String -pattern ("Nom du partage", "La", "Ressources partagées de ") -notmatch |
            Out-File -FilePath $PartagesMachinesList -Append -ErrorAction Stop
            write-host "$Machines : Cible atteinte..."  
        }
        else {
            write-error "$Machines : Cible non atteinte..." 
            # $Machines in Get-Content $MachinesList #  Supprimer la machine qui n'est pas atteinte dans le fichier texte $MachineList pour le mettre à jour
        }  
    }
    Un grand merci.

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

Discussions similaires

  1. try/catch sur requête SQL
    Par Fabdunet13 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 02/10/2017, 14h18
  2. [PHP 5.5] Try catch Sur SimpleXMLElement (PHP 5.5.12)
    Par ma5t3r dans le forum Langage
    Réponses: 6
    Dernier message: 22/10/2015, 02h40
  3. Try Catch (?) sur une erreur d'accès mémoire
    Par Jflop91 dans le forum Langage
    Réponses: 1
    Dernier message: 26/03/2013, 15h36
  4. TRY/CATCH sur xp_cmdshell et xp_delete_file
    Par Kaoru-tabris dans le forum Développement
    Réponses: 8
    Dernier message: 14/09/2010, 17h05
  5. Gérer un try catch sur un scan.nextInt() en boucle
    Par ermite67 dans le forum Langage
    Réponses: 3
    Dernier message: 16/06/2010, 17h14

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