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-Key: 7684137583

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

Printed on: April 28, 2024 at 12:04 o'clock

Member: user3086
user3086 Jun 29, 2023 updated at 07:59:28 (UTC)
Goto Top
Edited: Frage unnütz wurde unten geklärt.
Member: TK1987
Solution TK1987 Jun 29, 2023 updated at 06:41:34 (UTC)
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
Member: MarciMarc85
MarciMarc85 Jun 29, 2023 at 07:06:01 (UTC)
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.
Member: TK1987
TK1987 Jun 29, 2023 at 07:26:04 (UTC)
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