232 lines
9.9 KiB
PowerShell
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() |