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.
Please also mark the comments that contributed to the solution of the article
Content-Key: 7684137583
Url: https://administrator.de/contentid/7684137583
Printed on: April 28, 2024 at 12:04 o'clock
4 Comments
Latest comment
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