Meldung aus Batch in Powershell Script anzeigen
Hallo,
Ich habe ein Powershell Script gebastelt für eine automatische Installation. An einer Stelle wird ( sofern notwendig) ein Update der MySQL Datenbank gemacht. Das passiert durch ein seperates Batch-Script und muss auch Batch bleiben. Das Powershell startet also das Batch "mysql_update.bat". Dieses Script prüft nun die aktuelle Version der Datenbank mit der zu erwartenden notwendigen. Falls ein Updaste notwendig ist, kommt im Batch-Script die Meldung z.B.
Das "y" bestätige ich automatisch aus dem Powershell-Script, indem ich das Batch Script mit
aufrufe.
Das Problem jetzt ist nur, dass ich gern ein Datenbankbackup vorher ausführen lassen würde, bevor ein Datenbankupdate ausgeführt wird.
Für das Datenbankbackup wird ein seperates Backup Script ausgeführt.
Ich muss jetzt nur einen Trigger haben, der erkennt, ob ein Datenbankupdate bemacht werden soll. Dazu dachte ich mir, ich kann die Meldung von oben nehmen:
Wenn das als Rückmeldung kommt, soll zuerst das Backup starten. Die Meldung wird allerdings nur im Batch-Script angezeigt, was durch das Powershell-Script im Hintergrund läuft. Im Powershell selbst, wird diese nicht angezeigt.
Lange Rede, kurzer Sinn: Kann ich den Befehl zum Starten des Batch Scripts ein Parameter mitgeben, dass alle echos aus dem Batch-Script auch in der Powershell angezeigt und verarbeitet werden können?
Vielen Dank schonmal
Ich habe ein Powershell Script gebastelt für eine automatische Installation. An einer Stelle wird ( sofern notwendig) ein Update der MySQL Datenbank gemacht. Das passiert durch ein seperates Batch-Script und muss auch Batch bleiben. Das Powershell startet also das Batch "mysql_update.bat". Dieses Script prüft nun die aktuelle Version der Datenbank mit der zu erwartenden notwendigen. Falls ein Updaste notwendig ist, kommt im Batch-Script die Meldung z.B.
Migrate database on 127.0.0.1:3306 from 926 to 1002? (y/n)
echo 'Y' | cmd.exe /C "$db_scripts $db_update_arguments "
aufrufe.
Das Problem jetzt ist nur, dass ich gern ein Datenbankbackup vorher ausführen lassen würde, bevor ein Datenbankupdate ausgeführt wird.
Für das Datenbankbackup wird ein seperates Backup Script ausgeführt.
Ich muss jetzt nur einen Trigger haben, der erkennt, ob ein Datenbankupdate bemacht werden soll. Dazu dachte ich mir, ich kann die Meldung von oben nehmen:
Migrate database on 127.0.0.1:3306 from
Wenn das als Rückmeldung kommt, soll zuerst das Backup starten. Die Meldung wird allerdings nur im Batch-Script angezeigt, was durch das Powershell-Script im Hintergrund läuft. Im Powershell selbst, wird diese nicht angezeigt.
Lange Rede, kurzer Sinn: Kann ich den Befehl zum Starten des Batch Scripts ein Parameter mitgeben, dass alle echos aus dem Batch-Script auch in der Powershell angezeigt und verarbeitet werden können?
Vielen Dank schonmal
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 5908621513
Url: https://administrator.de/contentid/5908621513
Ausgedruckt am: 25.11.2024 um 04:11 Uhr
10 Kommentare
Neuester Kommentar
if ((&"D:\script.cmd") -match 'Migrate database'){
# mach was
}else{
# mach sonst was
}
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.FileName = "D:\Pfad\prog.exe"
$pinfo.Arguments = "parameter1 parameter2"
$pinfo.UseShellExecute = $false
$pinfo.CreateNoWindow = $true
$pinfo.RedirectStandardOutput = $true
$pinfo.RedirectStandardError = $true
$process = New-Object System.Diagnostics.Process
$process.StartInfo = $pinfo
$process.Start() | out-null
$out = while(!$process.HasExited){
$process.StandardOutput.ReadLine()
sleep(1)
}
if ($out -match 'Migrate database'){
# mach was
}else{
# mach sonst was
}
Wurstel
Dann wird der Text vermutlich in StdErr ausgegeben in der o.a. Schleife also noch ein zusätzliches
einfügen damit StdErr mit erfasst wird.
$process.StandardError.ReadLine()
Tja wenn man nicht weis was in der Batch mit welchem Befehl ausgeführt wird ...
Leite einfach alles was in deinen Batches ausgegeben wird mal nach Stdout um, kannst du auch testen indem du die Ausgabe mal in eine Datei umleitest.
Leite einfach alles was in deinen Batches ausgegeben wird mal nach Stdout um, kannst du auch testen indem du die Ausgabe mal in eine Datei umleitest.
$version = [regex]::match($out,'(?i)default=(\d+)').Groups[1].Value
Is es doch?! Einfach das $out durch (dein Befehl in Klammern ersetzen )...
https://tio.run/##NcqxCsIwEADQXzmCQkUbUndnp64utcjZnG3hSEJy0aH126MIro8X/I ...
$version = [regex]::match((cmd /C $db_scripts),'(?i)default=(\d+)').Groups[1].Value
da bekomme ich aber lediglich "default="
Weil der Regex ja auch nur das Default= berücksichtigt und nix dahinter, ist doch logisch ...cmd /C $db_scripts | select-string -pattern "default=(\d+)" | % {$_.Matches.Groups[1].Value}