Files
powershell-scripts/EgtDeploy/GUI/MachGrabberGUI.ps1
T
marco.locatelli@steamware.net 7f87236961 Accorpamento Progetti Powershell Script
2024-02-21 11:23:47 +01:00

232 lines
9.9 KiB
PowerShell

### GRAPHIC USER INTERFACE PER MACHINE GRABBER ###
#Caricamento classi di .NET Framework
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
Add-Type -AssemblyName System.Runtime
Add-Type -AssemblyName PresentationFramework
#inizializzo variabili vuote
$SelDir=""
$SelMach=""
$TestDirectory="C:\EgtTestData\EgtCAM5\Machines"
$StableDirectory="C:\ProgramData\EgalTech\EgtCAM5\Machines"
#Definisco path truenas di origine
$Artifacts = '\\truenas\Artifacts'
#funzione MachineCopy: date le macchine da copiare e la folder di destinazione, fa la copia da truenas al pc locale e mostra l'avanzamento nella progress bar
function MachineCopy($SelMach, $SelDir){
#inizializzo counter a zero per avanzamento barra progresso
$Counter = 0
#Cerco le cartelle delle macchine richieste
$MachinesList = Get-ChildItem -Path $Artifacts\EGT_SRV\EgtTech\EgtData\Machines\ -Directory | Select-String -Pattern $SelMach
#ricavo il numero delle macchine richieste trovate
$MachinesCount = $MachinesList.Count
#assegno il range di valori min max della barra di progresso in base al numero delle macchine trovate
$MinMax = 0..$MachinesCount | Measure-Object -Minimum -Maximum
#assegno i valori minimi e massimi della barra progresso in base al range definito precedentemente
$CopyProgressBar.Minimum = $MinMax.Minimum
$CopyProgressBar.Maximum = $MinMax.Maximum
#inizializzo il value della progress bar al minimo
$CopyProgressBar.Value = $MinMax.Minimum
#definisco lo step della progress bar a 1 (1 step=1 cartella copiata)
$CopyProgressBar.Step = 1
#Per ogni macchina richiesta trovata procedo a copiarla in EgtTestData\EgtCAM5\Machines
foreach($Machine in $MachinesList){
ROBOCOPY $Artifacts\EGT_SRV\EgtTech\EgtData\Machines\$Machine $SelDir\$Machine /MIR /FFT
$Counter++
# avanti uno step nella progress bar
$CopyProgressBar.PerformStep()
# calcolo il progresso in %
$ProgressFactor = ($CopyProgressBar.Value/$CopyProgressBar.Maximum)*100
$RoundedPercentage = [math]::Round($ProgressFactor)
#scrivo nel label dedicato la percentuale di avanzamento e faccio refresh progressbar
$PercentageLabel.Text = "$RoundedPercentage %"
$CopyProgressBar.Refresh()
}
}
#Definisco una finestra in cui è possibile aggiungere controlli.
$MachGrabForm = New-Object System.Windows.Forms.Form
$MachGrabForm.Text = 'Machine Grabber'
$MachGrabForm.Size = New-Object System.Drawing.Size(500,500)
$MachGrabForm.StartPosition = 'CenterScreen'
#Definisco una groupbox per la scelta delle macchine
$MachGroupBox = New-Object System.Windows.Forms.GroupBox
$MachGroupBox.Location = New-Object System.Drawing.Size(20,20)
$MachGroupBox.size = New-Object System.Drawing.Size(440,140)
$MachGroupBox.text = "Seleziona macchine da copiare:"
$MachGrabForm.Controls.Add($MachGroupBox)
#Definisco il bottone per selezionare macchine Belotti
$BelottiButton = New-Object System.Windows.Forms.RadioButton
$BelottiButton.Location = New-Object System.Drawing.Point(20,20)
$BelottiButton.Size = New-Object System.Drawing.Size(100,23)
$BelottiButton.Text = 'Belotti'
$BelottiButton.Checked = $true
$MachGrabForm.Controls.Add($BelottiButton)
$MachGroupBox.Controls.Add($BelottiButton)
#Definisco il bottone per selezionare macchine Cms
$CmsButton = New-Object System.Windows.Forms.RadioButton
$CmsButton.Location = New-Object System.Drawing.Point(20,40)
$CmsButton.Size = New-Object System.Drawing.Size(100,23)
$CmsButton.Text = 'Cms'
$MachGrabForm.Controls.Add($CmsButton)
$MachGroupBox.Controls.Add($CmsButton)
#Definisco il bottone per selezionare macchine Essetre
$EssetreButton = New-Object System.Windows.Forms.RadioButton
$EssetreButton.Location = New-Object System.Drawing.Point(20,60)
$EssetreButton.Size = New-Object System.Drawing.Size(100,23)
$EssetreButton.Text = 'Essetre'
$MachGrabForm.Controls.Add($EssetreButton)
$MachGroupBox.Controls.Add($EssetreButton)
#Definisco il bottone per selezionare macchine Multiax
$MultiaxButton = New-Object System.Windows.Forms.RadioButton
$MultiaxButton.Location = New-Object System.Drawing.Point(20,80)
$MultiaxButton.Size = New-Object System.Drawing.Size(100,23)
$MultiaxButton.Text = 'Multiax'
$MachGrabForm.Controls.Add($MultiaxButton)
$MachGroupBox.Controls.Add($MultiaxButton)
#Definisco il bottone per selezionare macchine Omag
$OmagButton = New-Object System.Windows.Forms.RadioButton
$OmagButton.Location = New-Object System.Drawing.Point(20,100)
$OmagButton.Size = New-Object System.Drawing.Size(100,23)
$OmagButton.Text = 'Omag'
$MachGrabForm.Controls.Add($OmagButton)
$MachGroupBox.Controls.Add($OmagButton)
#Definisco una groupbox per la scelta della cartella di destinazione
$FolderGroupBox = New-Object System.Windows.Forms.GroupBox
$FolderGroupBox.Location = New-Object System.Drawing.Size(20,180)
$FolderGroupBox.size = New-Object System.Drawing.Size(440,120)
$FolderGroupBox.text = "Seleziona directory di destinazione:"
$MachGrabForm.Controls.Add($FolderGroupBox)
#Definisco il bottone per selezionare folder Test
$TestFolderButton = New-Object System.Windows.Forms.RadioButton
$TestFolderButton.Location = New-Object System.Drawing.Point(20,20)
$TestFolderButton.Size = New-Object System.Drawing.Size(400,23)
$TestFolderButton.Text = "Test $TestDirectory"
$TestFolderButton.Checked = $true
$FolderGroupBox.Controls.Add($TestFolderButton)
#Definisco il bottone per selezionare folder Stable
$StableFolderButton = New-Object System.Windows.Forms.RadioButton
$StableFolderButton.Location = New-Object System.Drawing.Point(20,50)
$StableFolderButton.Size = New-Object System.Drawing.Size(400,23)
$StableFolderButton.Text = "Stable $StableDirectory"
$FolderGroupBox.Controls.Add($StableFolderButton)
#Definisco il bottone per selezionare folder Custom
$CustomFolderButton = New-Object System.Windows.Forms.RadioButton
$CustomFolderButton.Location = New-Object System.Drawing.Point(20,80)
$CustomFolderButton.Size = New-Object System.Drawing.Size(80,23)
$CustomFolderButton.Text = 'Custom'
$CustomFolderButton.Add_Click({
$FolderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog
$FolderBrowser.SelectedPath = "C:\"
[void]$FolderBrowser.ShowDialog()
$FolderBrowser.SelectedPath
$CustomFolderText.Text = $FolderBrowser.SelectedPath
})
$FolderGroupBox.Controls.Add($CustomFolderButton)
#Definisco il textbox che mostra la folder custom
$CustomFolderText = New-Object System.Windows.Forms.TextBox
$CustomFolderText.Location = New-Object System.Drawing.Point(100,80)
$CustomFolderText.Size = New-Object System.Drawing.Size(280,23)
$CustomFolderText.Text = ''
$CustomFolderText.Add_Click({
$FolderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog
$FolderBrowser.SelectedPath = "C:\"
[void]$FolderBrowser.ShowDialog()
$FolderBrowser.SelectedPath
$CustomFolderText.Text = $FolderBrowser.SelectedPath
})
$FolderGroupBox.Controls.Add($CustomFolderText)
#Definisco un label per mostrare l'avanzamento dell'operazione in corso
$PercentageLabel = New-Object System.Windows.Forms.Label
$PercentageLabel.Location = New-Object System.Drawing.Point(220,340)
$PercentageLabel.Size = New-Object System.Drawing.Size(280,20)
$PercentageLabel.Text = ""
$MachGrabForm.Controls.Add($PercentageLabel)
#Definisco la barra di avanzamento per mostrare il progresso della copia
$CopyProgressBar = New-Object System.Windows.Forms.ProgressBar
$CopyProgressBar.Width = 440
$CopyProgressBar.Height = 20
$CopyProgressBar.Location = New-Object System.Drawing.Point(20,360)
$CopyProgressBar.Style = 'Continuous'
$CopyProgressBar.Visible = $True
$MachGrabForm.Controls.Add($CopyProgressBar)
#Definisco il bottone per lanciare la copia delle macchine richieste
$GrabMachButton = New-Object System.Windows.Forms.Button
$GrabMachButton.Location = New-Object System.Drawing.Point(20,400)
$GrabMachButton.Size = New-Object System.Drawing.Size(100,23)
$GrabMachButton.Text = 'Copia Macchine'
#Quando l'utente clicca il copia macchine verifico la selezione richiesta e la cartella di destinazione
$GrabMachButton.Add_Click({
if ($BelottiButton.Checked -eq $true) {
$SelMach = 'Belotti'
}
if ($CmsButton.Checked -eq $true) {
$SelMach = 'CMS'
}
if ($EssetreButton.Checked -eq $true) {
$SelMach = 'Essetre'
}
if ($MultiaxButton.Checked -eq $true) {
$SelMach = 'Multiax'
}
if ($OmagButton.Checked -eq $true) {
$SelMach = 'Omag'
}
if ($TestFolderButton.Checked -eq $true) {
$SelDir = $TestDirectory
}
if ($StableFolderButton.Checked -eq $true) {
$SelDir = $StableDirectory
}
if ($CustomFolderButton.Checked -eq $true) {
$SelDir = $CustomFolderText.Text
}
#chiedo all'utente conferma della copia richiesta
$UserConfirmation = [System.Windows.MessageBox]::Show("Copia macchine $SelMach in folder $SelDir ?",'Conferma copia','YesNo','Info')
switch ($UserConfirmation){
'Yes' {
#chiamo funzione MachineCopy che fa il robocopy e mostra la barra di avanzamento in base al numero di cartelle da copiare
MachineCopy $SelMach $SelDir
[System.Windows.MessageBox]::Show("Macchine $SelMach copiate in $SelDir",'Operazione terminata')
$CopyProgressBar.Value = $CopyProgressBar.Minimum
$PercentageLabel.Text = ""
}
'No'{}
}
})
$MachGrabForm.Controls.Add($GrabMachButton)
#Definisco il bottone per navigazione al menu precedente
$MenuReturn = New-Object System.Windows.Forms.Button
$MenuReturn.Location = New-Object System.Drawing.Point(360,400)
$MenuReturn.Size = New-Object System.Drawing.Size(100,23)
$MenuReturn.Text = 'Torna alla home'
$MenuReturn.Add_Click({
$MachGrabForm.Close()
$MachGrabForm.Dispose()
Powershell.exe -executionpolicy remotesigned -File .\GUI\EgtScriptsGUI.ps1
})
$MachGrabForm.Controls.Add($MenuReturn)
#Proprietà Topmost su $true per forzare l'apertura della finestra sopra altre finestre e finestre di dialogo aperte.
$MachGrabForm.Topmost = $true
#Visualizzo il modulo:
$MachGrabForm.ShowDialog()