Powershell Skript mehrfach gleichzeitig ausführen
Hallo zusammen,
ich bin neu hier im Forum und habe direkt eine Frage.
Ich musste alte Batch-Files in Powershell umschreiben. Leider habe ich nicht wirklich Ahnung von Powershell.
Das wichtigste habe ich mittlerweile soweit hinbekommen.
Jetzt habe ich aber 2 Probleme, bei denen ich nicht weiter komme und hoffe, dass mir hier jemand helfen kann.
Ich habe hier im Forum geschaut und auch Google schon befragt, finde aber keine wirkliche Lösung.
Hier das Szenario:
Ich nutze ein Programm (wahrscheinlich eigene Entwicklung innerhalb des Konzerns für den ich arbeite. Das Programm heißt Dispatcher).
In diesem Programm kann ich diverse Voreinstellungen für den Start der Skripte einstellen (Welche VM genutzt werden soll, Pfad zum Programm welches installiert werden soll usw.)
Der Aufruf von Powershell ist in einer Ini-Datei definiert:
[INSTALL_"Software"]
;Explanation: This batch will create the initializer and the VM starter batches and start the tests for each VM
TestBegin
TestErrorLogging=1
TestExe=powershell.exe
TestParameter=-File "%DispatchBatchDir%\Complete_Install.ps1" "%DropLocation%" "%BuildDefinition%" "%BuildNumber%" "%VMnumber%" "%VmUserName%" "%VmUserPasswd%" "%DispatchBatchDir%" "%S7TesttoolVersion%" "%S7TesttoolReleaseVersion%" "%ExecuteTestFolder%" "%hostS7TesttoolPath%" "%S7TesttoolName%" "%S7TesttoolInstallPath%" "%ToolsPath%" "%LocalToolsPath%" "%TempSetupPath%" "%LocalTIAPath%" "%PropertyPath%" "%PropertyLocation%"
Innerhalb dieses Powershell Skripts werden andere Powershell Skripte und auch Psexec ausgeführt:
#Function of Batch: Copy the Latest TIA Portal setup to VM, Install TIA and Testtools
[String]$DropLocation,
[String]$BuildDefinition,
[String]$BuildNumber,
[String]$VMnumber,
[String]$VmUserName,
[String]$VmUserPasswd,
[String]$DispatchBatchDir,
[String]$S7TesttoolVersion,
[String]$S7TesttoolReleaseVersion,
[String]$ExecuteTestFolder,
[string]$hostS7TesttoolPath,
[String]$S7TesttoolName,
[String]$S7TesttoolInstallPath,
[string]$ToolsPath,
[string]$LocalToolsPath,
[string]$TempSetupPath,
[string]$LocalTIAPath,
[string]$PropertyPath,
[string]$PropertyLocation
)
Write-Host $DropLocation
Write-Host $BuildDefinition
Write-Host $BuildNumber
Write-Host $VMnumber
Write-Host $VmUserName
Write-Host $VmUserPasswd
Write-Host $DispatchBatchDir
Write-Host $S7TesttoolVersion
Write-Host $S7TesttoolReleaseVersion
Write-Host $ExecuteTestFolder
Write-Host $hostS7TesttoolPath
Write-Host $S7TesttoolName
Write-Host $S7TesttoolInstallPath
Write-Host $ToolsPath
Write-Host $LocalToolsPath
Write-Host $TempSetupPath
Write-Host $LocalTIAPath
Write-Host $PropertyPath
Write-Host $PropertyLocation
$env:systemdrive
$NameOfBatch = Split-Path -leaf $MyInvocation.MyCommand.Definition
$LogDir = $DispatchBatchDir
$QueueFileOfStartedVM="QueueVM_$VMnumber.conf"
$MSPSConfigFiles = "$env:SystemDrive\Users\$VmUserName\Documents\MSPSConfigfiles"
$WBMConfigfiles = "$env:SystemDrive\Users\$VmUserName\Documents\WBMConfigfiles"
$TIAProjects = "$env:SystemDrive\Users\$VmUserName\Documents\Automatisierung"
$MSPSLogfiles = "$env:SystemDrive\Users\$VmUserName\Documents\MSPSLogfiles"
$WBMLogfiles = "$env:SystemDrive\Users\$VmUserName\Documents\WBMLogfiles"
$filter="*.zip"
$S7TesttoolZip = Get-ChildItem -Recurse -Path $hostS7TesttoolPath\$S7TesttoolVersion\$S7TesttoolReleaseVersion\x64 -Filter $filter
#$S7TesttoolZip.FullName
$S7TesttoolZip
Write-Host $S7TesttoolZip
Function LogWrite
{
Param ([string]$logstring)
Add-content $Logfile -value $logstring
}
if(!$BuildDefinition) {LogWrite "Parameter BuildDefinition not set."}
if(!$BuildNumber) {LogWrite "Parameter BuildNumber not set."}
if(!$VMnumber) {LogWrite "Parameter VMnumber not set."}
if(!$VmUserName) {LogWrite "Parameter VmUserName not set."}
if(!$VmUserPasswd) {LogWrite "Parameter VmUserPasword not set."}
if(!$DispatchBatchDir) {LogWrite "Parameter MainBatchDir not set."}
if(!$S7TesttoolVersion) {LogWrite "Parameter S7TesttoolVersion not set."}
if(!$S7TesttoolReleaseVersion) {LogWrite "Parameter S7TesttoolReleaseVersion not set."}
#Generate a new entry in Log
LogWrite "----start $NameOfBatch.bat for VM number $VMnumber----"
if (Test-Path $ExecuteTestFolder\$QueueFileOfStartedVM)
{LogWrite "Error: Queue file $ExecuteTestFolder\$QueueFileOfStartedVM was found. Selected VM automation number $VMnumber is in use.\n
Note: If the Selected VM automation number $VMnumber is free, but the queue file does still exists $ExecuteTestFolder\$QueueFileOfStartedVM, please delete the file."
Write-Host "Error: Queue file $ExecuteTestFolder\$QueueFileOfStartedVM was found. Selected VM automation number $VMnumber is in use."
Exit} else {# Queue File will be created, if the copy of TIA setup are in progress
New-Item -ItemType file "$ExecuteTestFolder\$QueueFileOfStartedVM"}
#Start-Sleep -s 180
Start-Process -Wait "powershell.exe" -ArgumentList "-File `"$DispatchBatchDir\Timer.ps1`""
#Start-Sleep -s 180
Start-Process -Wait "powershell.exe" -ArgumentList "-File `"$DispatchBatchDir\Timer.ps1`""
Remove-Item "$ExecuteTestFolder\$QueueFileOfStartedVM"
Jetzt zu meinen 2 Problemen:
1. Wenn das Powershell Skript aufegrufen wird, öffnet sich kein Powershell Fenster. Das erste Fenster, dass ich zu sehen bekomme ist, wenn der erste "Start-Process" gestartet wird. Es soll sich aber direkt ein Fenster öffnen.
2. Dieses Skript soll parallel ausführbar sein, da ich es mehrfach starten muss. Die Software, die mit diesem Skript installiert werden soll, muss auf bis zu 24 VMs installiert werden. Das soll aber über das erste Programm aufgerufen werden.
Vielen Dank im voraus für Eure Hilfe.
ich bin neu hier im Forum und habe direkt eine Frage.
Ich musste alte Batch-Files in Powershell umschreiben. Leider habe ich nicht wirklich Ahnung von Powershell.
Das wichtigste habe ich mittlerweile soweit hinbekommen.
Jetzt habe ich aber 2 Probleme, bei denen ich nicht weiter komme und hoffe, dass mir hier jemand helfen kann.
Ich habe hier im Forum geschaut und auch Google schon befragt, finde aber keine wirkliche Lösung.
Hier das Szenario:
Ich nutze ein Programm (wahrscheinlich eigene Entwicklung innerhalb des Konzerns für den ich arbeite. Das Programm heißt Dispatcher).
In diesem Programm kann ich diverse Voreinstellungen für den Start der Skripte einstellen (Welche VM genutzt werden soll, Pfad zum Programm welches installiert werden soll usw.)
Der Aufruf von Powershell ist in einer Ini-Datei definiert:
[INSTALL_"Software"]
;Explanation: This batch will create the initializer and the VM starter batches and start the tests for each VM
TestBegin
TestErrorLogging=1
TestExe=powershell.exe
TestParameter=-File "%DispatchBatchDir%\Complete_Install.ps1" "%DropLocation%" "%BuildDefinition%" "%BuildNumber%" "%VMnumber%" "%VmUserName%" "%VmUserPasswd%" "%DispatchBatchDir%" "%S7TesttoolVersion%" "%S7TesttoolReleaseVersion%" "%ExecuteTestFolder%" "%hostS7TesttoolPath%" "%S7TesttoolName%" "%S7TesttoolInstallPath%" "%ToolsPath%" "%LocalToolsPath%" "%TempSetupPath%" "%LocalTIAPath%" "%PropertyPath%" "%PropertyLocation%"
Innerhalb dieses Powershell Skripts werden andere Powershell Skripte und auch Psexec ausgeführt:
#Function of Batch: Copy the Latest TIA Portal setup to VM, Install TIA and Testtools
- get Paramaeters
[String]$DropLocation,
[String]$BuildDefinition,
[String]$BuildNumber,
[String]$VMnumber,
[String]$VmUserName,
[String]$VmUserPasswd,
[String]$DispatchBatchDir,
[String]$S7TesttoolVersion,
[String]$S7TesttoolReleaseVersion,
[String]$ExecuteTestFolder,
[string]$hostS7TesttoolPath,
[String]$S7TesttoolName,
[String]$S7TesttoolInstallPath,
[string]$ToolsPath,
[string]$LocalToolsPath,
[string]$TempSetupPath,
[string]$LocalTIAPath,
[string]$PropertyPath,
[string]$PropertyLocation
)
Write-Host $DropLocation
Write-Host $BuildDefinition
Write-Host $BuildNumber
Write-Host $VMnumber
Write-Host $VmUserName
Write-Host $VmUserPasswd
Write-Host $DispatchBatchDir
Write-Host $S7TesttoolVersion
Write-Host $S7TesttoolReleaseVersion
Write-Host $ExecuteTestFolder
Write-Host $hostS7TesttoolPath
Write-Host $S7TesttoolName
Write-Host $S7TesttoolInstallPath
Write-Host $ToolsPath
Write-Host $LocalToolsPath
Write-Host $TempSetupPath
Write-Host $LocalTIAPath
Write-Host $PropertyPath
Write-Host $PropertyLocation
- Name the Window
- Set Mode of Powershell
- Define new variables
$env:systemdrive
$NameOfBatch = Split-Path -leaf $MyInvocation.MyCommand.Definition
$LogDir = $DispatchBatchDir
$QueueFileOfStartedVM="QueueVM_$VMnumber.conf"
$MSPSConfigFiles = "$env:SystemDrive\Users\$VmUserName\Documents\MSPSConfigfiles"
$WBMConfigfiles = "$env:SystemDrive\Users\$VmUserName\Documents\WBMConfigfiles"
$TIAProjects = "$env:SystemDrive\Users\$VmUserName\Documents\Automatisierung"
$MSPSLogfiles = "$env:SystemDrive\Users\$VmUserName\Documents\MSPSLogfiles"
$WBMLogfiles = "$env:SystemDrive\Users\$VmUserName\Documents\WBMLogfiles"
$filter="*.zip"
$S7TesttoolZip = Get-ChildItem -Recurse -Path $hostS7TesttoolPath\$S7TesttoolVersion\$S7TesttoolReleaseVersion\x64 -Filter $filter
#$S7TesttoolZip.FullName
$S7TesttoolZip
Write-Host $S7TesttoolZip
- Define Logfile
Function LogWrite
{
Param ([string]$logstring)
Add-content $Logfile -value $logstring
}
- Check if parameter not empty
if(!$BuildDefinition) {LogWrite "Parameter BuildDefinition not set."}
if(!$BuildNumber) {LogWrite "Parameter BuildNumber not set."}
if(!$VMnumber) {LogWrite "Parameter VMnumber not set."}
if(!$VmUserName) {LogWrite "Parameter VmUserName not set."}
if(!$VmUserPasswd) {LogWrite "Parameter VmUserPasword not set."}
if(!$DispatchBatchDir) {LogWrite "Parameter MainBatchDir not set."}
if(!$S7TesttoolVersion) {LogWrite "Parameter S7TesttoolVersion not set."}
if(!$S7TesttoolReleaseVersion) {LogWrite "Parameter S7TesttoolReleaseVersion not set."}
#Generate a new entry in Log
LogWrite "----start $NameOfBatch.bat for VM number $VMnumber----"
- Check if selected VM is in use
- Explanation: Check if queue file for selected VM exists
if (Test-Path $ExecuteTestFolder\$QueueFileOfStartedVM)
{LogWrite "Error: Queue file $ExecuteTestFolder\$QueueFileOfStartedVM was found. Selected VM automation number $VMnumber is in use.\n
Note: If the Selected VM automation number $VMnumber is free, but the queue file does still exists $ExecuteTestFolder\$QueueFileOfStartedVM, please delete the file."
Write-Host "Error: Queue file $ExecuteTestFolder\$QueueFileOfStartedVM was found. Selected VM automation number $VMnumber is in use."
Exit} else {# Queue File will be created, if the copy of TIA setup are in progress
New-Item -ItemType file "$ExecuteTestFolder\$QueueFileOfStartedVM"}
- Revert snapshot of selected VM
- Start selected VM
#Start-Sleep -s 180
Start-Process -Wait "powershell.exe" -ArgumentList "-File `"$DispatchBatchDir\Timer.ps1`""
- Check if selected VM is running
- Copy files to VM
- Install TIA
- Restart VM
#Start-Sleep -s 180
Start-Process -Wait "powershell.exe" -ArgumentList "-File `"$DispatchBatchDir\Timer.ps1`""
- Check if selected VM is running
- Install S7Testtool
- Stop VM
- Take Snapshot
Remove-Item "$ExecuteTestFolder\$QueueFileOfStartedVM"
Jetzt zu meinen 2 Problemen:
1. Wenn das Powershell Skript aufegrufen wird, öffnet sich kein Powershell Fenster. Das erste Fenster, dass ich zu sehen bekomme ist, wenn der erste "Start-Process" gestartet wird. Es soll sich aber direkt ein Fenster öffnen.
2. Dieses Skript soll parallel ausführbar sein, da ich es mehrfach starten muss. Die Software, die mit diesem Skript installiert werden soll, muss auf bis zu 24 VMs installiert werden. Das soll aber über das erste Programm aufgerufen werden.
Vielen Dank im voraus für Eure Hilfe.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 667559
Url: https://administrator.de/forum/powershell-skript-mehrfach-gleichzeitig-ausfuehren-667559.html
Ausgedruckt am: 23.04.2025 um 19:04 Uhr
2 Kommentare
Neuester Kommentar
Guten Morgen,
um es leserlicher zu machen benutze bitte Code Tags.
Zu deinen Fragen:
Zu 2:
https://devblogs.microsoft.com/scripting/parallel-processing-with-jobs-i ...
Ändern sich nur die Maschinenziele oder soll die Siemens SPS/Automation Software auch unterschiedlich parametrisiert auf den unterschiedlichen Maschinen installiert werden?
So oder so kannst du dir eine Config zusammenbauen die dann als Parameter auf die unterschiedlichen Jobs verteilt werden.
VG
um es leserlicher zu machen benutze bitte Code Tags.
Zu deinen Fragen:
Zu 2:
https://devblogs.microsoft.com/scripting/parallel-processing-with-jobs-i ...
Ändern sich nur die Maschinenziele oder soll die Siemens SPS/Automation Software auch unterschiedlich parametrisiert auf den unterschiedlichen Maschinen installiert werden?
So oder so kannst du dir eine Config zusammenbauen die dann als Parameter auf die unterschiedlichen Jobs verteilt werden.
VG