diff --git a/Sharepoint/gui/spmover/sputils.ps1 b/Sharepoint/gui/spmover/sputils.ps1 index ba1ffeb..e9aa301 100644 --- a/Sharepoint/gui/spmover/sputils.ps1 +++ b/Sharepoint/gui/spmover/sputils.ps1 @@ -12,6 +12,17 @@ # Source : C:\Users\SebastienQUEROL\source\repos\sharepointmover-gui\Form1.Designer.cs ################################################################################ +###############Thread Setup + +$Global:syncHash = [hashtable]::Synchronized(@{}) +$newRunspace =[runspacefactory]::CreateRunspace() +$newRunspace.ApartmentState ="STA" +$newRunspace.ThreadOptions ="ReuseThread" +$newRunspace.Open() +$newRunspace.SessionStateProxy.SetVariable("syncHash",$syncHash) + +########################### + ##Aucune foutre idée de ce qu'est cense faire ce morceau de code, ca a été généré par le createur de forms # function Get-ScriptDirectory # { #Return the directory name of this script @@ -387,35 +398,43 @@ $FMain.Text = "SharePoint Utils GUI" ##Lister les sites dans les comboBoxes #### On lance le ScriptBlock dans un runspace au clic du bouton BlistSites $BlistSites.Add_Click({ - # On vide la variable pnpConnection pour ne pas avoir de faux positifs - $pnpConnection = $Null + $newRunspace =[runspacefactory]::CreateRunspace() + $newRunspace.ApartmentState ="STA" + $newRunspace.ThreadOptions ="ReuseThread" + $newRunspace.Open() + $newRunspace.SessionStateProxy.SetVariable("syncHash",$syncHash) - # On stocke la dernière connexion PnP - $pnpConnection = Get-PnPConnection | Out-String + $BlistSitesRunSpace = [PowerShell]::Create().AddScript({ - # À améliorer, mais pour l'instant, ça devrait passer - if (-not ([string]::IsNullOrEmpty($pnpConnection))) { - $CBdestSite.Items.Clear() - $CBsourceSite.Items.Clear() - $sitesList = Get-PnPTenantSite | Where-Object -Property Template -NotIn ( - "SRCHCEN#0", "REDIRECTSITE#0", "SPSMSITEHOST#0", "APPCATALOG#0", - "POINTPUBLISHINGHUB#0", "EDISC#0", "STS#-1", 'EHS#1', 'POINTPUBLISHINGTOPIC#0' - ) | Select-Object url - - $LresultsMove.Items.Clear() - foreach ($siteUrl in $sitesList) { - $siteUrl -match "@{Url=(?.*)}" - $siteUrlClean = $matches["content"] - $CBsourceSite.Items.Add([string]$siteUrlClean) - $CBdestSite.Items.Add([string]$siteUrlClean) - } - } elseif ([string]::IsNullOrEmpty($pnpConnection)) { - $LresultsMove.Items.Clear() - $LresultsMove.Items.Add("Connectez-vous au tenant d'abord") - } else { - $LresultsMove.Items.Clear() - $LresultsMove.Items.Add("Connectez-vous au tenant d'abord") - } + #On vide la variable pnpConnection pour ne pas avoir de faux positifs + $pnpConnection=$Null + #On stocke la derniere connection PnP + $pnpConnection = Get-PnPConnection | Out-string + #A ameliorer, mais pour l'instant, ca devrait passer + if(-not ([string]::IsNullOrEmpty($pnpConnection))){ + $CBdestSite.Items.Clear() + $CBsourceSite.Items.Clear() + $sitesList = $null + $sitesList = Get-PnPTenantSite | Where-Object -Property Template -NotIn ("SRCHCEN#0", "REDIRECTSITE#0", "SPSMSITEHOST#0", "APPCATALOG#0", "POINTPUBLISHINGHUB#0", "EDISC#0", "STS#-1", 'EHS#1','POINTPUBLISHINGTOPIC#0') | Select-Object url + $LresultsMove.Items.Clear() + foreach($siteUrl in $sitesList){ + $siteUrl -match "@{Url=(?.*)}" + $siteUrlClean = $matches["content"] + $CBsourceSite.Items.Add([string]$siteUrlClean) + $CBdestSite.Items.Add([string]$siteUrlClean) + } + } + elseif(([string]::IsNullOrEmpty($pnpConnection))){ + $LresultsMove.Items.Clear() + $LresultsMove.Items.Add("Connectez-vous au tenant d'abord") + } + else{ + $LresultsMove.Items.Clear() + $LresultsMove.Items.Add("Connectez-vous au tenant d'abord") + } + }) + $BlistSitesRunSpace.PowerShell.Runspace = $newRunspace + $BlistSitesRunSpace.Thread = $BlistSitesRunSpace.PowerShell.BeginInvoke() }) @@ -434,6 +453,13 @@ $BlistSites.Add_Click({ $Bgo.Add_Click({ + $newRunspace =[runspacefactory]::CreateRunspace() + $newRunspace.ApartmentState ="STA" + $newRunspace.ThreadOptions ="ReuseThread" + $newRunspace.Open() + $newRunspace.SessionStateProxy.SetVariable("syncHash",$syncHash) + + $copySPRunspace.PowerShell = [PowerShell]::Create().AddScript({ $destSite = $CBdestSite.Text $sourceSite = $CBsourceSite.Text $sourceSite = $sourceSite -Replace '[A-Za-z]+://([A-Za-z]+(\.[A-Za-z]+)+)','' @@ -442,6 +468,9 @@ $Bgo.Add_Click({ $jobCopyPending = Copy-PnPFile -SourceUrl "$sourceSite" -TargetUrl "$destSite" -Force -OverwriteIfAlreadyExists $jobStatus = Receive-PnPCopyMoveJobStatus -Job $jobCopyPending -Wait Write-Output $jobStatus + }) + $copySPRunspace.PowerShell.Runspace = $newRunspace + $copySPRunspace.Thread = $copySPRunspace.PowerShell.BeginInvoke() }) @@ -455,29 +484,38 @@ $tenantURL = $URLTenant.Text $BconnectSP.Add_Click({ Disconnect-PnPOnline - $Url = $ConnectSPUrl - # Votre code de connexion à SharePoint ici - Connect-PnPOnline -Url $Url -UseWebLogin - Switch ($ERROR) - { - {$ERROR[0] -match "Host not reachable" }{ - $label4.Text = "Injoignable" - $label4.ForeColor = [System.Drawing.Color]::MediumVioletRed - Break} - {$ERROR[0] -match "User canceled authentication."}{ - $label4.Text = "Annulé" - $label4.ForeColor = [System.Drawing.Color]::MediumVioletRed - Break} - {-not ([string]::IsNullOrEmpty($pnpConnection))}{ - $label4.Text = "Connecté" - $label4.ForeColor = [System.Drawing.Color]::Green - } - Default { - $label4.Text = "..." - $label4.ForeColor = [System.Drawing.Color]::Gray + $newRunspace =[runspacefactory]::CreateRunspace() + $newRunspace.ApartmentState ="STA" + $newRunspace.ThreadOptions ="ReuseThread" + $newRunspace.Open() + $newRunspace.SessionStateProxy.SetVariable("syncHash",$syncHash) + + $connectToSPRunspace.PowerShell = [PowerShell]::Create().AddScript({ + Connect-PnPOnline -Url $tenantURL -Interactive | Out-String + + Switch ($ERROR) + { + {$ERROR[0] -match "Host not reachable" }{ + $label4.Text = "Injoignable" + $label4.ForeColor = [System.Drawing.Color]::MediumVioletRed + Break} + {$ERROR[0] -match "User canceled authentication."}{ + $label4.Text = "Annulé" + $label4.ForeColor = [System.Drawing.Color]::MediumVioletRed + Break} + {-not ([string]::IsNullOrEmpty($pnpConnection))}{ + $label4.Text = "Connecté" + $label4.ForeColor = [System.Drawing.Color]::Green + } + Default { + $label4.Text = "Connecté" + $label4.ForeColor = [System.Drawing.Color]::Green + } } - } -}) + }) + $connectToSPRunspace.PowerShell.Runspace = $newRunspace + $connectToSPRunspace.Thread = $connectToSPRunspace.PowerShell.BeginInvoke() + }) function OnFormClosing_FMain{