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:
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.
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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 7684137583
Url: https://administrator.de/contentid/7684137583
Ausgedruckt am: 22.11.2024 um 04:11 Uhr
4 Kommentare
Neuester Kommentar
Moin Marc,
Gruß Thomas
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.
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
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...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.
$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