haeuptling1977
Goto Top

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
  1. get Paramaeters
param(
[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


  1. Name the Window
$host.ui.RawUI.WindowTitle = "Initialize VM Test"

  1. Set Mode of Powershell
Set-StrictMode -Version Latest

  1. 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

  1. Define Logfile
$Logfile = "$LogDir\log_$NameOfBatch"+"_$VMnumber.txt"

Function LogWrite
{
Param ([string]$logstring)

Add-content $Logfile -value $logstring
}

  1. Check if parameter not empty
if(!$DropLocation) {LogWrite "Parameter DropLocation not set."}
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----"

  1. Check if selected VM is in use
  2. Explanation: Check if queue file for selected VM exists
LogWrite "Check if selected VM is free."
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"}

  1. Revert snapshot of selected VM
Start-Process -Wait "powershell.exe" -ArgumentList "-File `"$DispatchBatchDir\RevertSnap.ps1`"", "$VMnumber"

  1. Start selected VM
Start-Process -Wait "powershell.exe" -ArgumentList "-File `"$DispatchBatchDir\VMStart.ps1`"", "$VMnumber"

#Start-Sleep -s 180
Start-Process -Wait "powershell.exe" -ArgumentList "-File `"$DispatchBatchDir\Timer.ps1`""

  1. Check if selected VM is running
Start-Process -Wait "powershell.exe" -ArgumentList "-File `"$DispatchBatchDir\CheckIfVMrun.ps1`"", "$VMnumber"

  1. Copy files to VM
Start-Process -Wait "powershell.exe" -ArgumentList "-File `"$DispatchBatchDir\CopyMSPSTools.ps1`"", "$VMnumber", "$VmUserName", "$VmUserPasswd", "$LocalToolsPath", "$ToolsPath"

  1. Install TIA
Start-Process -Wait "powershell.exe" -ArgumentList "-File `"$DispatchBatchDir\Call_InstallTIA.ps1`"", "$VMnumber", "$VmUserName", "$VmUserPasswd", "$TempSetupPath", "$DropLocation", "$BuildDefinition", "$BuildNumber", "$DispatchBatchDir", "$LocalTIAPath"

  1. Restart VM
Start-Process -Wait "powershell.exe" -ArgumentList "-File `"$DispatchBatchDir\RestartVM.ps1`"", "$VMnumber"

#Start-Sleep -s 180
Start-Process -Wait "powershell.exe" -ArgumentList "-File `"$DispatchBatchDir\Timer.ps1`""

  1. Check if selected VM is running
Start-Process -Wait "powershell.exe" -ArgumentList "-File `"$DispatchBatchDir\CheckIfVMrun.ps1`"", "$VMnumber"

  1. Install S7Testtool
Start-Process -Wait "powershell.exe" -ArgumentList "-File `"$DispatchBatchDir\InstallTesttool.ps1`"", "$VMnumber", "$VmUserName", "$VmUserPasswd", "$LocalTIAPath", "$S7TesttoolVersion", "$S7TesttoolReleaseVersion", "$hostS7TesttoolPath", "$S7TesttoolName", "$S7TesttoolInstallPath", "$PropertyPath", "$PropertyLocation", "$S7TesttoolZip", "$MSPSConfigFiles", "$WBMConfigfiles", "$TIAProjects", "$MSPSLogfiles", "$WBMLogfiles"

  1. Stop VM
Start-Process -Wait "powershell.exe" -ArgumentList "-File `"$DispatchBatchDir\StopVM.ps1`"", "$VMnumber"

  1. Take Snapshot
Start-Process -Wait "powershell.exe" -ArgumentList "-File `"$DispatchBatchDir\TakeSnapshot.ps1`"", "$VMnumber", "$BuildDefinition", "$BuildNumber"

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.

Content-Key: 667559

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

Printed on: April 19, 2024 at 11:04 o'clock

Member: H41mSh1C0R
H41mSh1C0R Jun 14, 2021 updated at 07:45:48 (UTC)
Goto Top
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
Member: haeuptling1977
haeuptling1977 Jun 14, 2021 at 09:13:30 (UTC)
Goto Top
Hallo @H41mSh1C0R,

nur die Maschinenziele ändern sich. Alles andere bleibt gleich.

Sorry, dass ich mich vielleicht ein bisschen blöd anstelle, aber wo trage ich das mit dem Start-Job ein? In der Ini-Datei, die den Aufruf der ps1 startet oder muss ich eine extra Datei anlegen?

VG