marcimarc85
Goto Top

Powershell Animation während Batch Ausführung

Hallo

Ich möchte gern ein Script 'D:\scripts\backup.bat' aus einem anderen Powershell Script aus starten.

Das habe ich bisher immer mit 'Start-Process D:\scripts\backup.bat -Wait -NoNewWindow' gemacht.

Nun würde ich aber gern mitbekommen, dass das Script im Hintergrund noch läuft. Klar, ich könnte einfach das -NoNewWindow rausnehmen, aber das Fenster wäre dann evtl. trotzdem noch im Hintergrund.

Ich hätte daher gern eine Animation im Powershell Script, die mir anzeigt, dass das Batch-Script im Hintergrund noch aktiv ist.

Jetzt habe ich folgendes gefunden:

function ProcessingAnimation($scriptBlock) {
    $cursorTop = [Console]::CursorTop
    
    try {
        [Console]::CursorVisible = $false
        
        $counter = 0
        $frames = '|', '/', '-', '\'   
        $jobName = Start-Job -ScriptBlock $scriptBlock
    
        while($jobName.JobStateInfo.State -eq "Running") {  
            $frame = $frames[$counter % $frames.Length]
            
            Write-Host "$frame" -NoNewLine  
            [Console]::SetCursorPosition(0, $cursorTop)
            
            $counter += 1
            Start-Sleep -Milliseconds 125
        }
        
        # Only needed if you use a multiline frames
        Write-Host ($frames[0] -replace '[^\s+]', ' ')  
    }
    finally {
        [Console]::SetCursorPosition(0, $cursorTop)
        [Console]::CursorVisible = $true
    }
}

# Example:
ProcessingAnimation { Start-Sleep 5 }

Quelle: https://gist.github.com/WillemRB/5eb18301462ed6eb23bf

Ich bekomme es aber einfach nicht hin, die Batch Datei damit zu starten und die Animation anzuzeigen, während das Batch läuft.

Content-ID: 7684137583

Url: https://administrator.de/contentid/7684137583

Ausgedruckt am: 22.11.2024 um 04:11 Uhr

user3086
user3086 29.06.2023 aktualisiert um 09:59:28 Uhr
Goto Top
Edited: Frage unnütz wurde unten geklärt.
TK1987
Lösung TK1987 29.06.2023 aktualisiert um 08:41:34 Uhr
Goto Top
Moin Marc,

Zitat von @MarciMarc85:
Ich bekomme es aber einfach nicht hin, die Batch Datei damit zu starten und die Animation anzuzeigen, während das Batch läuft.
ProcessAnimation {Start-Process -Wait "D:\scripts\backup.bat"}  

Gruß Thomas
MarciMarc85
MarciMarc85 29.06.2023 um 09:06:01 Uhr
Goto Top
Zitat von @TK1987:

Moin Marc,

Zitat von @MarciMarc85:
Ich bekomme es aber einfach nicht hin, die Batch Datei damit zu starten und die Animation anzuzeigen, während das Batch läuft.
ProcessAnimation {Start-Process -Wait "D:\scripts\backup.bat"}  

Gruß Thomas

Hi und Danke,

Dann lag es bei mir nur an dem -NoNewWindow. Sobald der Parameter drin ist stoppt die ANimation nach 2 zeichen und das Powershell läuft einfach weiter, ohne auf das Backup zu wrten.
TK1987
TK1987 29.06.2023 um 09:26:04 Uhr
Goto Top
Zitat von @MarciMarc85:
Dann lag es bei mir nur an dem -NoNewWindow. Sobald der Parameter drin ist stoppt die ANimation nach 2 zeichen und das Powershell läuft einfach weiter, ohne auf das Backup zu wrten.
Man könnte natürlich noch ein wenig verbessern und eine Auswertung mit rein bringen, ob die Batchdatei erfolgreich beendet wurde...
$Frames = '|','/','-','\'  
$Job = Start-Job -ScriptBlock {
  $Process = Start -Wait -PassThru "D:\scripts\backup.bat"  
  Return $Process.ExitCode
}

Write-Host -NoNewLine "Batchskript läuft...  "  
$i = 0
[Console]::CursorVisible = $False
while ($Job.State -ne "Completed") {  
  Write-Host -NoNewLine -f Cyan "`b$($Frames[$i++%4])"  
  Sleep -Milliseconds 125
}
[Console]::CursorVisible = $true

$rV = Receive-Job $Job
if (!$rV) {Write-Host -f Green "`rDas Batchskript wurde erfolgreich beendet. "}  
else {Write-Host -f Red "`rDas Batchskript wurde mit Fehlercode $rV beendet. "}  

Gruß Thomas