Question Comment interrompre et reprendre un processus

Plus d'informations
il y a 4 mois 2 semaines #35070 par J-L Prout
    Je n'ai pas encore travaillé le sujet, mais j'aimerais bien savoir par quel moyen on pourrait interrompre l'exécution d'un script PowerShell puis le reprendre.
N'y aurait-il pas une combinaison de touches ou un raccourci clavier qui pourrait faire cela? Si, de surcroît, on offre des choix au moment de la reprise ce serait une très bonne solution.

   Merci aux expérimentés qui se seraient déjà posé la question, et qui l'auraient même résolue!!!!

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 4 mois 14 heures #35237 par Fabien
Bonjour J-L Prout,
A ma connaissance; il n'y a pas de raccourci clavier pour interrompre un script temporairement.
Il y a Ctrl+C pour stopper le script mais il n'y a pas de possibilité de reprise du script.

Cependant, tu peux intégrer dans ton script un menu interactif avec les possibilités que tu souhaites.
Voici un script d'exemple pour pouvoir te montrer.
Dans ce script, j'ai fait un menu pour Continuer, Répéter la tâche ou Stopper/enregistrer la progression.
L'enregistrement s'effectue dans un fichier Json sur la machine qui exécute le script.
Les tâches dans le script sont fictives, il y a juste un temps d'attente de 3 secondes pour chaque tâche.
# Fichier d'état
$stateFile = "C:\Temp\state.json"

# Étapes du script (modifiable)
$steps = @(
    "Vérifier la connectivité réseau",
    "Analyser les fichiers de logs",
    "Sauvegarder les données",
    "Nettoyer les anciens fichiers",
    "Envoyer le rapport par mail"
)

# Fonction d'affichage d'en-tête
function Show-Header {
    Clear-Host
    Write-Host "=========================================" -ForegroundColor Magenta
    Write-Host "   SCRIPT PAUSE / REPRISE INTERACTIF" -ForegroundColor Magenta
    Write-Host "=========================================" -ForegroundColor Magenta
    Write-Host ""
}

# Fonction de barre de progression
function Show-ProgressBar($current, $total, $label) {
    $percent = [math]::Round(($current / $total) * 100)
    $barLength = 30
    $filledLength = [math]::Round($barLength * $percent / 100)
    $bar = ("█" * $filledLength).PadRight($barLength)
    Write-Host ("[{0}] {1}% - {2}" -f $bar, $percent, $label)
}

# Charger l'état précédent
if (Test-Path $stateFile) {
    $state = Get-Content $stateFile | ConvertFrom-Json
    $currentStep = [int]$state.currentStep
    Show-Header
    Write-Host "Reprise du script à l'étape $currentStep / $($steps.Count)" -ForegroundColor Cyan
    Start-Sleep -Seconds 2
} else {
    $currentStep = 0
    Show-Header
    Write-Host "Nouveau démarrage du script" -ForegroundColor Green
    Start-Sleep -Seconds 1
}

# Boucle principale
for ($i = $currentStep; $i -lt $steps.Count; $i++) {

    Show-Header
    $stepName = $steps[$i]
    Write-Host "=== Étape $($i + 1) / $($steps.Count) ===" -ForegroundColor Cyan
    Show-ProgressBar $i $steps.Count $stepName
    Write-Host ""

    # --- Exemple de traitement (à remplacer par ton code) ---
    Write-Host "Exécution de : $stepName..." -ForegroundColor Yellow
    Start-Sleep -Seconds 3
    Write-Host "Étape $($i + 1) terminée." -ForegroundColor Green
    # -------------------------------------------------------

    # Sauvegarde de la progression
    @{ currentStep = $i + 1 } | ConvertTo-Json | Set-Content $stateFile

    # Menu interactif
    Write-Host ""
    Write-Host "----------------------------------------"
    Write-Host "Que veux-tu faire ?" -ForegroundColor Cyan
    Write-Host "  [C] Continuer à l'étape suivante"
    Write-Host "  [R] Répéter cette étape"
    Write-Host "  [S] Stopper et enregistrer la progression"
    Write-Host "----------------------------------------"
    do {
        $choice = Read-Host "Ton choix"
        switch ($choice.ToUpper()) {
            'C' { Write-Host "Reprise du script..." -ForegroundColor Green; $repeat = $false }
            'R' { Write-Host "Répétition de l'étape..." -ForegroundColor Yellow; $i--; $repeat = $false }
            'S' { Write-Host "Arrêt demandé. Tu pourras reprendre plus tard." -ForegroundColor Red; exit }
            default { Write-Host "Choix invalide. Tape C, R ou S."; $repeat = $true }
        }
    } while ($repeat)
}

# Si tout est terminé
if (Test-Path $stateFile) { Remove-Item $stateFile -Force }
Show-Header
Show-ProgressBar $steps.Count $steps.Count "Terminé"
Write-Host "Toutes les étapes ont été exécutées avec succès." -ForegroundColor Green




 

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 mois 1 semaine #35394 par Francois Dunoyer
Si tu as des affichages
appuie sur sur espace et ça interrompt l'exécution du script
Après, ca ne permet pas de debuguer, ça bloque juste l'affichage

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.083 secondes
Propulsé par Kunena