1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    juillet 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : juillet 2017
    Messages : 8
    Points : 5
    Points
    5

    Par défaut Avancement script figé

    Bonjour,

    Après l'exécution de mon script de sauvegarde, powershell m'indique un pourcentage d'avancement de 1 % alors que celui-ci est à 82 % sur le logiciel de sauvegarde Windows Server Backup. Comme le démontre l'image ci-dessous :



    Voici le script utilisé :

    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
    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    # Script d'execution de Windows Serveur Backup
    
    # Ce script permettra :
    # - De vérifier la présence de Windows Serveur Backup sur l'ordinateur Hôte,
    # - De vérifier si le disque de donnée D:\ est présent,
    # - De vérifier si le disque de sauvegarde S:\ est présent,
    # - Lancement de la sauvegarde
        
    If (-not (Test-Path "C:\Windows\Logs\WindowsServerBackup"))
    {
        
        #Création du fichier "WindowsServerBackup", "Logs" et "Execution"
        New-Item -ItemType Directory -Path "C:\Windows\Logs\WindowsServerBackup\Logs\" -name "Execution"
        
        echo ""
        echo "Le dossier Windows Server Backup n'est pas présent !"
        echo ""
    
        # Création de fichier de Logs dans WindowsServerBackup\Logs\Execution\EXECUTION_ERROR_WB.log
        $fichier = "C:\Windows\Logs\WindowsServerBackup\Logs\Execution\EXECUTION_ERROR_WB.log"
        $UserName = [ENVIRONMENT]::UserDomainName
        $lines = ""
        $line = Get-Date
        $line1 = "Par $UserName"
        $line2 = "Le dossier Windows Server Backup n'est pas présent !"
        $line5 = "LOG GENERE PAR : script_execution_powershell"
    
        Add-Content -Path $fichier -value $lines, $line, $line1, $line2, $line5
    
    }else{
        
        #Création du fichier "WindowsServerBackup", "Logs" et "Execution"
        New-Item -ItemType Directory -Path "C:\Windows\Logs\WindowsServerBackup\Logs\" -name "Execution"
    
        echo ""
        echo "Le dossier Windows Server Backup est présent !"
        echo ""
    
        # Création de fichier de Logs dans WindowsServerBackup\Logs\Execution\EXECUTION_OK_WB.log
        $fichier = "C:\Windows\Logs\WindowsServerBackup\Logs\Execution\EXECUTION_OK_WB.log"
        $UserName = [ENVIRONMENT]::UserDomainName
        $lines = ""
        $line = Get-Date
        $line1 = "Par $UserName"
        $line2 = "Le dossier Windows Server Backup est présent !"
        $line5 = "LOG GENERE PAR : script_execution_powershell"
    
        Add-Content -Path $fichier -value $lines, $line, $line1, $line2, $line5
    
            # Si Windows-Server-Backup Possède l'objet "Installed" Alors
            if (Get-WindowsFeature Windows-Server-Backup | Where-Object("Installed"))
            {
                
                echo ""
                echo "La fonctionnalité Windows Server Backup est présente !"
                echo ""
    
                # Création de fichier de Logs dans WindowsServerBackup\Logs\Execution\EXECUTION_OK_WB.log
                $fichier = "C:\Windows\Logs\WindowsServerBackup\Logs\Execution\EXECUTION_OK_WB.log"
                $UserName = [ENVIRONMENT]::UserDomainName
                $lines = ""
                $line = Get-Date
                $line1 = "Par $UserName"
                $line2 = "La fonctionnalité Windows Server Backup est présente !"
                $line5 = "LOG GENERE PAR : script_execution_powershell"
    
                Add-Content -Path $fichier -value $lines, $line, $line1, $line2, $line5
    
                    # Vérification de la présence du disque S:
                    if (Get-PSDrive H)
                    {
                    
                        echo ""
                        echo "Le disque de donnée H: est présent !"
                        echo ""
    
                        # Création de fichier de Logs dans WindowsServerBackup\Logs\Execution\EXECUTION_OK_WB.log
                        $fichier = "C:\Windows\Logs\WindowsServerBackup\Logs\Execution\EXECUTION_OK_WB.log"
                        $UserName = [ENVIRONMENT]::UserDomainName
                        $lines = ""
                        $line = Get-Date
                        $line1 = "Par $UserName"
                        $line2 = "Le disque de donnée H: est présent !"
                        $line5 = "LOG GENERE PAR : script_execution_powershell"
    
                        Add-Content -Path $fichier -value $lines, $line, $line1, $line2, $line5
    
                            $dataapplication = "H:\Applications"
                            $dataechange = "H:\Echange"
                            $datautilisateur = "H:\Utilisateurs"
    
                            If (-not (Test-Path $dataapplication))
                            {
                                
                                echo ""
                                echo "Le dossier Applications dans le lecteur H: n'est pas présent !"
                                echo ""
    
                                # Création de fichier de Logs dans WindowsServerBackup\Logs\Execution\EXECUTION_ERROR_WB.log
                                $fichier = "C:\Windows\Logs\WindowsServerBackup\Logs\Execution\EXECUTION_ERROR_WB.log"
                                $UserName = [ENVIRONMENT]::UserDomainName
                                $lines = ""
                                $line = Get-Date
                                $line1 = "Par $UserName"
                                $line2 = "Le dossier Applications dans le lecteur H: n'est pas présent !"
                                $line5 = "LOG GENERE PAR : script_execution_powershell"
    
                                Add-Content -Path $fichier -value $lines, $line, $line1, $line2, $line5
    
                            }else{
                                
                                echo ""
                                echo "Le dossier Applications dans le lecteur H: est présent !"
                                echo ""
    
                                # Création de fichier de Logs dans WindowsServerBackup\Logs\Execution\EXECUTION_OK_WB.log
                                $fichier = "C:\Windows\Logs\WindowsServerBackup\Logs\Execution\EXECUTION_OK_WB.log"
                                $UserName = [ENVIRONMENT]::UserDomainName
                                $lines = ""
                                $line = Get-Date
                                $line1 = "Par $UserName"
                                $line2 = "Le dossier Applications dans le lecteur H: est présent !"
                                $line5 = "LOG GENERE PAR : script_execution_powershell"
    
                                Add-Content -Path $fichier -value $lines, $line, $line1, $line2, $line5
    
                                    If (-not (Test-Path $dataechange))
                                    {
    
                                        echo ""
                                        echo "Le dossier Echange dans le lecteur H: n'est pas présent !"
                                        echo ""
    
                                        # Création de fichier de Logs dans WindowsServerBackup\Logs\Execution\EXECUTION_ERROR_WB.log
                                        $fichier = "C:\Windows\Logs\WindowsServerBackup\Logs\Execution\EXECUTION_ERROR_WB.log"
                                        $UserName = [ENVIRONMENT]::UserDomainName
                                        $lines = ""
                                        $line = Get-Date
                                        $line1 = "Par $UserName"
                                        $line2 = "Le dossier Echange dans le lecteur D: n'est pas présent !"
                                        $line5 = "LOG GENERE PAR : script_execution_powershell"
    
                                        Add-Content -Path $fichier -value $lines, $line, $line1, $line2, $line5
    
                                    }else{
                                    
                                        echo ""
                                        echo "Le dossier Echange dans le lecteur H: est présent !"
                                        echo ""
    
                                        # Création de fichier de Logs dans WindowsServerBackup\Logs\Execution\EXECUTION_OK_WB.log
                                        $fichier = "C:\Windows\Logs\WindowsServerBackup\Logs\Execution\EXECUTION_OK_WB.log"
                                        $UserName = [ENVIRONMENT]::UserDomainName
                                        $lines = ""
                                        $line = Get-Date
                                        $line1 = "Par $UserName"
                                        $line2 = "Le dossier Echange dans le lecteur D: est présent !"
                                        $line5 = "LOG GENERE PAR : script_execution_powershell"
    
                                        Add-Content -Path $fichier -value $lines, $line, $line1, $line2, $line5
    
                                            If (-not (Test-Path $datautilisateur))
                                            {
    
                                                echo ""
                                                echo "Le dossier Utilisateurs dans le lecteur H: n'est pas présent !"
                                                echo ""
    
                                                # Création de fichier de Logs dans WindowsServerBackup\Logs\Execution\EXECUTION_ERROR_WB.log
                                                $fichier = "C:\Windows\Logs\WindowsServerBackup\Logs\Execution\EXECUTION_ERROR_WB.log"
                                                $UserName = [ENVIRONMENT]::UserDomainName
                                                $lines = ""
                                                $line = Get-Date
                                                $line1 = "Par $UserName"
                                                $line2 = "Le dossier Utilisateurs dans le lecteur H: n'est pas présent !"
                                                $line5 = "LOG GENERE PAR : script_execution_powershell"
    
                                                Add-Content -Path $fichier -value $lines, $line, $line1, $line2, $line5
                                           
                                            }else{
                                                
                                                echo ""
                                                echo "Le dossier Utilisateurs dans le lecteur H: est présent !"
                                                echo ""
    
                                                # Création de fichier de Logs dans WindowsServerBackup\Logs\Execution\EXECUTION_OK_WB.log
                                                $fichier = "C:\Windows\Logs\WindowsServerBackup\Logs\Execution\EXECUTION_OK_WB.log"
                                                $UserName = [ENVIRONMENT]::UserDomainName
                                                $lines = ""
                                                $line = Get-Date
                                                $line1 = "Par $UserName"
                                                $line2 = "Le dossier Utilisateur dans le lecteur D: est présent !"
                                                $line5 = "LOG GENERE PAR : script_execution_powershell"
    
                                                Add-Content -Path $fichier -value $lines, $line, $line1, $line2, $line5
    
                                                    if (Get-PSDrive S)
                                                    {
    
                                                        echo ""
                                                        echo "Le disque de sauvegarde S: est présent !"
                                                        echo ""
    
                                                        # Création de fichier de Logs dans WindowsServerBackup\Logs\Execution\EXECUTION_OK_WB.log
                                                        $fichier = "C:\Windows\Logs\WindowsServerBackup\Logs\Execution\EXECUTION_OK_WB.log"
                                                        $UserName = [ENVIRONMENT]::UserDomainName
                                                        $lines = ""
                                                        $line = Get-Date
                                                        $line1 = "Par $UserName"
                                                        $line2 = "Le disque de sauvegarde S: est présent !"
                                                        $line5 = "LOG GENERE PAR : script_execution_powershell"
    
                                                        Add-Content -Path $fichier -value $lines, $line, $line1, $line2, $line5
    
                                                            Write-Host "Démarrage de la sauvegarde en cours !" -ForegroundColor Green
    
                                                            wbadmin start backup -backupTarget:S: -Include:H: -vssFull
                                      
                                                            if($?) 
                                                            {
                                                            
                                                                Write-Host "La sauvegarde c'est déroulé correctement !" -ForegroundColor Green          
                                                            
                                                                # Création de fichier de Logs dans WindowsServerBackup\Logs\Execution\EXECUTION_OK_WB.log
                                                                $fichier = "C:\Windows\Logs\WindowsServerBackup\Logs\Execution\EXECUTION_OK_WB.log"
                                                                $UserName = [ENVIRONMENT]::UserDomainName
                                                                $lines = ""
                                                                $line = Get-Date
                                                                $line1 = "Par $UserName"
                                                                $line2 = "La sauvegarde c'est déroulé correctement !"
                                                                $line5 = "LOG GENERE PAR : script_execution_powershell"
    
                                                                Add-Content -Path $fichier -value $lines, $line, $line1, $line2, $line5
    
    
                                                            }else{
                                                            
                                                                Write-Host "La sauvegarde ne c'est pas déroulé correctement !" -ForegroundColor Green
    
                                                                # Création de fichier de Logs dans WindowsServerBackup\Logs\Execution\EXECUTION_OK_WB.log
                                                                $fichier = "C:\Windows\Logs\WindowsServerBackup\Logs\Execution\EXECUTION_ERROR_WB.log"
                                                                $UserName = [ENVIRONMENT]::UserDomainName
                                                                $lines = ""
                                                                $line = Get-Date
                                                                $line1 = "Par $UserName"
                                                                $line2 = "La sauvegarde ne c'est pas déroulé correctement !"
                                                                $line5 = "LOG GENERE PAR : script_execution_powershell"
    
                                                                Add-Content -Path $fichier -value $lines, $line, $line1, $line2, $line5
    
    
                                                            }
    
    
    
                                                    }else{
    
                                                        echo ""
                                                        echo "Le disque de sauvegarde S: n'est pas présent !"
                                                        echo ""
    
                                                        # Création de fichier de Logs dans WindowsServerBackup\Logs\Execution\EXECUTION_ERROR_WB.log
                                                        $fichier = "C:\Windows\Logs\WindowsServerBackup\Logs\Execution\EXECUTION_ERROR_WB.log"
                                                        $UserName = [ENVIRONMENT]::UserDomainName
                                                        $lines = ""
                                                        $line = Get-Date
                                                        $line1 = "Par $UserName"
                                                        $line2 = "Le disque de sauvegarde S: n'est pas présent !"
                                                        $line5 = "LOG GENERE PAR : script_execution_powershell"
    
                                                        Add-Content -Path $fichier -value $lines, $line, $line1, $line2, $line5
    
                                                    }
    
                                            }
    
                                    }
    
                            }
    
                    }else{
                    
                        echo ""
                        echo "Le disque de donnée H: n'est pas présent !"
                        echo ""
    
                        # Création de fichier de Logs dans WindowsServerBackup\Logs\Execution\EXECUTION_ERROR_WB.log
                        $fichier = "C:\Windows\Logs\WindowsServerBackup\Logs\Execution\EXECUTION_ERROR_WB.log"
                        $UserName = [ENVIRONMENT]::UserDomainName
                        $lines = ""
                        $line = Get-Date
                        $line1 = "Par $UserName"
                        $line2 = "Le disque de donnée H: n'est pas présent !"
                        $line5 = "LOG GENERE PAR : script_execution_powershell"
    
                        Add-Content -Path $fichier -value $lines, $line, $line1, $line2, $line5
    
                    }                
    
            }else{
            
                echo ""
                echo "La fonctionnalité Windows Server Backup n'est pas présente !"
                echo ""
    
                # Création de fichier de Logs dans WindowsServerBackup\Logs\Execution\EXECUTION_ERROR_WB.log
                $fichier = "C:\Windows\Logs\WindowsServerBackup\Logs\Execution\EXECUTION_ERROR_WB.log"
                $UserName = [ENVIRONMENT]::UserDomainName
                $lines = ""
                $line = Get-Date
                $line1 = "Par $UserName"
                $line2 = "La fonctionnalité Windows Server Backup n'est pas présente !"
                $line5 = "LOG GENERE PAR : script_execution_powershell"
    
                Add-Content -Path $fichier -value $lines, $line, $line1, $line2, $line5
    
            }
    
    }
    
    Sleep 10000
    Auriez-vous une idée de ce qui pourrais bloquer l'avancement du script ?

    Merci beaucoup.
    LeMaath

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    janvier 2003
    Messages
    6 852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 6 852
    Points : 15 178
    Points
    15 178
    Billets dans le blog
    1

    Par défaut

    Salut,
    Citation Envoyé par LeMaath Voir le message
    Auriez-vous une idée de ce qui pourrais bloquer l'avancement du script ?
    Difficile à dire.
    Peut être que l'usage de l'instruction Sleep du script place le thread de la console en veille et empêche la maj de l'affichage.
    Commente la et essaie dans une console.
    Pour confirmer cette hypothèse, ajoute un write-warning "Call Sleep" avant l'appel à Sleep 10000.

    Sinon teste une approche basée sur WaitExit(), dans ce ce lancer wbadmin avec Start-Process.

    En passant, il manque peut être une gestion d'erreur de la fin d'exécution de wbadmin.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    juillet 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : juillet 2017
    Messages : 8
    Points : 5
    Points
    5

    Par défaut

    Citation Envoyé par Laurent Dardenne Voir le message
    Salut,

    Difficile à dire.
    Peut être que l'usage de l'instruction Sleep du script place le thread de la console en veille et empêche la maj de l'affichage.
    Commente la et essaie dans une console.
    Pour confirmer cette hypothèse, ajoute un write-warning "Call Sleep" avant l'appel à Sleep 10000.

    Sinon teste une approche basée sur WaitExit(), dans ce ce lancer wbadmin avec Start-Process.

    En passant, il manque peut être une gestion d'erreur de la fin d'exécution de wbadmin.
    Bonjour,

    Merci tout d'abord pour ta réponse.
    Ta première hypothèse ne fonctionne pas, j'étais toujours ce soucis de fixation et le write-warning ne s'affiche même pas ^^

    Peux-tu m'aider à réaliser ce waitexit() dont tu parle s'il te plait ? Je ne comprend pas trop ou tu voudrais en venir

    La gestion d'erreur en fin d'exécution de WBAdmin est bien présente et est défini par :

    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
    32
    33
    34
    if($?) 
                                                            {
                                                            
                                                                Write-Host "La sauvegarde c'est déroulé correctement !" -ForegroundColor Green          
                                                            
                                                                # Création de fichier de Logs dans WindowsServerBackup\Logs\Execution\EXECUTION_OK_WB.log
                                                                $fichier = "C:\Windows\Logs\WindowsServerBackup\Logs\Execution\EXECUTION_OK_WB.log"
                                                                $UserName = [ENVIRONMENT]::UserDomainName
                                                                $lines = ""
                                                                $line = Get-Date
                                                                $line1 = "Par $UserName"
                                                                $line2 = "La sauvegarde c'est déroulé correctement !"
                                                                $line5 = "LOG GENERE PAR : script_execution_powershell"
    
                                                                Add-Content -Path $fichier -value $lines, $line, $line1, $line2, $line5
    
    
                                                            }else{
                                                            
                                                                Write-Host "La sauvegarde ne c'est pas déroulé correctement !" -ForegroundColor Green
    
                                                                # Création de fichier de Logs dans WindowsServerBackup\Logs\Execution\EXECUTION_OK_WB.log
                                                                $fichier = "C:\Windows\Logs\WindowsServerBackup\Logs\Execution\EXECUTION_ERROR_WB.log"
                                                                $UserName = [ENVIRONMENT]::UserDomainName
                                                                $lines = ""
                                                                $line = Get-Date
                                                                $line1 = "Par $UserName"
                                                                $line2 = "La sauvegarde ne c'est pas déroulé correctement !"
                                                                $line5 = "LOG GENERE PAR : script_execution_powershell"
    
                                                                Add-Content -Path $fichier -value $lines, $line, $line1, $line2, $line5
    
    
                                                            }
    Merci beaucoup.
    LeMaath

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    janvier 2003
    Messages
    6 852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 6 852
    Points : 15 178
    Points
    15 178
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par LeMaath Voir le message
    La gestion d'erreur en fin d'exécution de WBAdmin est bien présente et est défini par :
    Je pensais à la gestion du code retour de la fin d'exécution du process.

    Pour le WaitExit(), il faut exécuter ton process avec $p=Start-Process puis appeler cette méthode dans ton script ($P.WaitExit() ou $P.WaitExit(TempsEnMs) ).
    C'est un appel bloquant. A placer en lieu et palce de l'appel à start-Sleep.

    Que donne, dans une console PS, l'exécution de ce process sans tout le code PS autour ?
    Et dans une console cmd.exe ?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    juillet 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : juillet 2017
    Messages : 8
    Points : 5
    Points
    5

    Par défaut

    Citation Envoyé par Laurent Dardenne Voir le message
    Je pensais à la gestion du code retour de la fin d'exécution du process.

    Pour le WaitExit(), il faut exécuter ton process avec $p=Start-Process puis appeler cette méthode dans ton script ($P.WaitExit() ou $P.WaitExit(TempsEnMs) ).
    C'est un appel bloquant. A placer en lieu et palce de l'appel à start-Sleep.

    Que donne, dans une console PS, l'exécution de ce process sans tout le code PS autour ?
    Et dans une console cmd.exe ?
    Bonjour,

    Je viens d'essayer différentes démarches.

    Après plusieurs recherches et méthodes que tu m'as donné j'ai pu trouver la solution de lancer la commande wbadmin à partir d'une commande DOS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Start-Process "cmd.exe" "/c C:\Users\Administrateur.DOMAIN\Desktop\Script\wsb.bat"
    Suite à cette commande je n'ai plus de problème de fixation puisque la commande en .bat s'exécute dans une autre fenêtre.

    Le soucis qui se pose maintenant, comment récupérer la suite de mon script en powershell après l'exécution de cette fenêtre DOS qui à la fin de son exécution kill toute les fenêtre.

    Merci.

  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    janvier 2003
    Messages
    6 852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 6 852
    Points : 15 178
    Points
    15 178
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par LeMaath Voir le message
    comment récupérer la suite de mon script en powershell après l'exécution de cette fenêtre DOS qui à la fin de son exécution kill toute les fenêtre.
    Pas sûr de comprendre :/
    Start-process renvoie l'objet process créé, l'appel la méthode WaitExit() sur cet objet attendra sa fin d'exécution dans le script PS.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    juillet 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : juillet 2017
    Messages : 8
    Points : 5
    Points
    5

    Par défaut

    Citation Envoyé par Laurent Dardenne Voir le message
    Pas sûr de comprendre :/
    Start-process renvoie l'objet process créé, l'appel la méthode WaitExit() sur cet objet attendra sa fin d'exécution dans le script PS.
    Bonjour,

    Comme tu me le disais précédemment, pour mon problème d'incohérence des pourcentages de sauvegarde entre powershell et windows server backup. Etait de pouvoir essayer la partie sauvegarde :

    Celle ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wbadmin start backup -backupTarget:S: -Include:H: -vssFull -quiet
    Dans une console classique windows (CMD), ce qui fût après plusieurs tests un exploit ^^ Ce qui signifie qui la commande WBAdmin est peut-être (c'est qu'une supposition) incompatible avec powershell mais fonctionne très bien avec CMD

    Ce qui vient à ma question suivante, puisque après modification de mon script en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Start-Process "cmd.exe" "/c C:\Users\Administrateur.DOUBS\Desktop\Script\wsb.bat"
    Je souhaite, pouvoir récupérer l'avancement de mon script powershell après l’exécution de ce .bat. Le problème, c'est qu'à l'exécution de .bat par powershell la fenêtre powershell se ferme et laisse ouvert le CMD pour l'exécution de la commande.

    J'espère avoir été un peu plus compréhensible ^^

    Merci.

  8. #8
    Rédacteur


    Profil pro
    Inscrit en
    janvier 2003
    Messages
    6 852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 6 852
    Points : 15 178
    Points
    15 178
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par LeMaath Voir le message
    J'espère avoir été un peu plus compréhensible ^^
    Oui.
    fais ceci :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $Externe=Start-Process "cmd.exe" "/c C:\Users\Administrateur.DOUBS\Desktop\Script\wsb.bat" -PassThru
    $Externe.WaitExit()
    Citation Envoyé par LeMaath Voir le message
    Ce qui signifie qui la commande WBAdmin est peut-être (c'est qu'une supposition) incompatible avec powershell mais fonctionne très bien avec CMD
    Si les premières lignes s'affichent c'est que la redirection fonctionne, la question d'origine était de savoir pq elle cesse à un moment donné.
    Peut-être lancer directement WBAdmin avec start-process, comme au dessus, et si ce n'est pas concluant tester avec le paramètre -RedirectStandardOutput.
    Et si cela ne fonctionne utilise ta solution basée sur le batch.

    ps:
    Si tu peux essaie avec la version 6.0 en cours de dev, les redirections ont été revues sous Linux.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    juillet 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : juillet 2017
    Messages : 8
    Points : 5
    Points
    5

    Par défaut

    Citation Envoyé par Laurent Dardenne Voir le message
    Oui.
    fais ceci :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $Externe=Start-Process "cmd.exe" "/c C:\Users\Administrateur.DOUBS\Desktop\Script\wsb.bat" -PassThru
    $Externe.WaitExit()

    Si les premières lignes s'affichent c'est que la redirection fonctionne, la question d'origine était de savoir pq elle cesse à un moment donné.
    Peut-être lancer directement WBAdmin avec start-process, comme au dessus, et si ce n'est pas concluant tester avec le paramètre -RedirectStandardOutput.
    Et si cela ne fonctionne utilise ta solution basée sur le batch.

    ps:
    Si tu peux essaie avec la version 6.0 en cours de dev, les redirections ont été revues sous Linux.
    Voici l'erreur affiché :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Échec lors de l’appel de la méthode, car [System.Boolean] ne contient pas de méthode 
    nommée «WaitExit».
    Au caractère C:\Users\Administrateur.DOMAIN\Desktop\Script\Script_Execution.ps1:265 : 
    57
    +                                                         $Externe.WaitExit()
    +                                                         ~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation : (:) [], RuntimeException
        + FullyQualifiedErrorId : MethodNotFound
    Merci beaucoup pour ton aide.

  10. #10
    Rédacteur


    Profil pro
    Inscrit en
    janvier 2003
    Messages
    6 852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 6 852
    Points : 15 178
    Points
    15 178
    Billets dans le blog
    1

    Par défaut

    Erreur de ma part c'est WaitForExit

    Je n'ai pas eu le temps de tester ce que je t'ai proposé, il se peut que l'usage de WaitForExit pose le même pb.
    Sinon une autre approche basé sur les event, mais avec un peu plus de plomberie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $p=process
    $p[0]|gm -MemberType Event
    # 
    #    TypeName: System.Diagnostics.Process
    # 
    # Name               MemberType Definition
    # ----               ---------- ----------
    # Disposed           Event      System.EventHandler Disposed(System.Object, System.EventArgs)
    # ErrorDataReceived  Event      System.Diagnostics.DataReceivedEventHandler ErrorDataReceived(System.Object, System.Di...
    # Exited             Event      System.EventHandler Exited(System.Object, System.EventArgs)
    # OutputDataReceived Event      System.Diagnostics.DataReceivedEventHandler OutputDataReceived(System.Object, System.D...
    #
    Si le sleep bloque le thread de PS et bloque la maj de l'affichage, le mécanisme d'event reste actif.
    Reste à savoir si ceci est dans tes cordes.

Discussions similaires

  1. contrôler avancement script
    Par laurentSc dans le forum Débuter
    Réponses: 7
    Dernier message: 26/11/2011, 23h36
  2. informer les utilisateurs de l'avancement du script
    Par mohcultiv dans le forum VBA Access
    Réponses: 2
    Dernier message: 11/07/2007, 15h00
  3. fixer d'avance le fichier résultat dans le script
    Par super_dz dans le forum Langage
    Réponses: 3
    Dernier message: 03/07/2007, 09h15
  4. Réponses: 7
    Dernier message: 13/11/2006, 10h55

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