################################################################################ # # Name : C:\Users\SebastienQUEROL\source\repos\sharepointmover-gui\Form1.ps1 # Version : 0.1 # Author : # Date : 08/03/2024 # # Generated with ConvertForm module version 2.0.0 # PowerShell version 7.4.1 # # Invocation Line : Convert-Form -Path $Source -Destination $Destination -Encoding utf8 -force # 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 # $Invocation = (Get-Variable MyInvocation -Scope 1).Value # Split-Path $Invocation.MyCommand.Path # } # $ScriptPath = Get-ScriptDirectory ### # Chargement des assemblies externes Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing $FMain = New-Object System.Windows.Forms.Form $components = New-Object System.ComponentModel.Container $menuStrip1 = New-Object System.Windows.Forms.MenuStrip $Mquestion = New-Object System.Windows.Forms.ToolStripMenuItem $MQuestionApropos = New-Object System.Windows.Forms.ToolStripMenuItem $MQuestionWiki = New-Object System.Windows.Forms.ToolStripMenuItem $Bgo = New-Object System.Windows.Forms.Button $BlistSites = New-Object System.Windows.Forms.Button $CBsourceSite = New-Object System.Windows.Forms.ComboBox $CBdestSite = New-Object System.Windows.Forms.ComboBox $progressBar1 = New-Object System.Windows.Forms.ProgressBar $sourceInfo = New-Object System.Windows.Forms.ToolTip($components) $label1 = New-Object System.Windows.Forms.Label $label2 = New-Object System.Windows.Forms.Label $tabs = New-Object System.Windows.Forms.TabControl $tabPage1 = New-Object System.Windows.Forms.TabPage $tabPage2 = New-Object System.Windows.Forms.TabPage $BconnectSP = New-Object System.Windows.Forms.Button $URLTenant = New-Object System.Windows.Forms.TextBox $label3 = New-Object System.Windows.Forms.Label $groupBox1 = New-Object System.Windows.Forms.GroupBox $groupBox2 = New-Object System.Windows.Forms.GroupBox $radioButton1 = New-Object System.Windows.Forms.RadioButton $radioButton2 = New-Object System.Windows.Forms.RadioButton $radioButton3 = New-Object System.Windows.Forms.RadioButton $button1 = New-Object System.Windows.Forms.Button $checkBox1 = New-Object System.Windows.Forms.CheckBox $label4 = New-Object System.Windows.Forms.Label $tabPage3 = New-Object System.Windows.Forms.TabPage $tabPage4 = New-Object System.Windows.Forms.TabPage $tabPage5 = New-Object System.Windows.Forms.TabPage $LresultsMove = New-Object System.Windows.Forms.ListView # # menuStrip1 # $menuStrip1.Items.AddRange(@( $Mquestion)) $menuStrip1.Location = New-Object System.Drawing.Point(0, 0) $menuStrip1.Name = "menuStrip1" $menuStrip1.Size = New-Object System.Drawing.Size(800, 24) $menuStrip1.TabIndex = 0 $menuStrip1.Text = "menuStrip1" # # Mquestion # $Mquestion.DropDownItems.AddRange(@( $MQuestionApropos, $MQuestionWiki)) $Mquestion.Name = "Mquestion" $Mquestion.Size = New-Object System.Drawing.Size(24, 20) $Mquestion.Text = "?" # # MQuestionApropos # $MQuestionApropos.Name = "MQuestionApropos" $MQuestionApropos.Size = New-Object System.Drawing.Size(180, 22) $MQuestionApropos.Text = "A propos..." # # MQuestionWiki # $MQuestionWiki.Name = "MQuestionWiki" $MQuestionWiki.Size = New-Object System.Drawing.Size(180, 22) $MQuestionWiki.Text = "Wiki" # # Bgo # $Bgo.ForeColor = [System.Drawing.Color]::Black $Bgo.Location = New-Object System.Drawing.Point(649, 83) $Bgo.Name = "Bgo" $Bgo.Size = New-Object System.Drawing.Size(75, 23) $Bgo.TabIndex = 1 $Bgo.Text = "GO" $Bgo.UseVisualStyleBackColor = $true # # BlistSites # $BlistSItes.ForeColor = [System.Drawing.Color]::Black $BlistSItes.Location = New-Object System.Drawing.Point(649, 55) $BlistSItes.Name = "BlistSites" $BlistSItes.Size = New-Object System.Drawing.Size(75, 23) $BlistSItes.TabIndex = 2 $BlistSItes.Text = "List. Sites" $BlistSItes.UseVisualStyleBackColor = $true # # CBsourceSite # $CBsourceSite.FormattingEnabled = $true $CBsourceSite.Location = New-Object System.Drawing.Point(23, 44) $CBsourceSite.Name = "CBsourceSite" $CBsourceSite.Size = New-Object System.Drawing.Size(587, 21) $CBsourceSite.TabIndex = 3 # # CBdestSite # $CBdestSite.FormattingEnabled = $true $CBdestSite.Location = New-Object System.Drawing.Point(23, 113) $CBdestSite.Name = "CBdestSite" $CBdestSite.Size = New-Object System.Drawing.Size(587, 21) $CBdestSite.TabIndex = 4 # # progressBar1 # $progressBar1.Location = New-Object System.Drawing.Point(8, 369) $progressBar1.Name = "progressBar1" $progressBar1.Size = New-Object System.Drawing.Size(776, 23) $progressBar1.TabIndex = 5 # # label1 # $label1.AutoSize = $true $label1.ForeColor = [System.Drawing.Color]::Black $label1.Location = New-Object System.Drawing.Point(23, 19) $label1.Name = "label1" $label1.Size = New-Object System.Drawing.Size(41, 13) $label1.TabIndex = 6 $label1.Text = "Source" # # label2 # $label2.AutoSize = $true $label2.ForeColor = [System.Drawing.Color]::Black $label2.Location = New-Object System.Drawing.Point(23, 88) $label2.Name = "label2" $label2.Size = New-Object System.Drawing.Size(60, 13) $label2.TabIndex = 7 $label2.Text = "Destination" # # tabs # $tabs.Controls.Add($tabPage1) $tabs.Controls.Add($tabPage3) $tabs.Controls.Add($tabPage4) $tabs.Controls.Add($tabPage5) $tabs.Controls.Add($tabPage2) $tabs.Location = New-Object System.Drawing.Point(0, 27) $tabs.Name = "tabs" $tabs.SelectedIndex = 0 $tabs.Size = New-Object System.Drawing.Size(800, 424) $tabs.TabIndex = 8 # # tabPage1 # $tabPage1.Controls.Add($LresultsMove) $tabPage1.Controls.Add($label1) $tabPage1.Controls.Add($progressBar1) $tabPage1.Controls.Add($label2) $tabPage1.Controls.Add($Bgo) $tabPage1.Controls.Add($BlistSites) $tabPage1.Controls.Add($CBsourceSite) $tabPage1.Controls.Add($CBdestSite) $tabPage1.Location = New-Object System.Drawing.Point(4, 22) $tabPage1.Name = "tabPage1" $tabPage1.Padding = New-Object System.Windows.Forms.Padding(3) $tabPage1.Size = New-Object System.Drawing.Size(792, 398) $tabPage1.TabIndex = 0 $tabPage1.Text = "Move" $tabPage1.UseVisualStyleBackColor = $true # # tabPage2 # $tabPage2.Controls.Add($groupBox2) $tabPage2.Controls.Add($groupBox1) $tabPage2.Location = New-Object System.Drawing.Point(4, 22) $tabPage2.Name = "tabPage2" $tabPage2.Padding = New-Object System.Windows.Forms.Padding(3) $tabPage2.Size = New-Object System.Drawing.Size(792, 398) $tabPage2.TabIndex = 1 $tabPage2.Text = "Parametres" $tabPage2.UseVisualStyleBackColor = $true # # BconnectSP # $BconnectSP.ForeColor = [System.Drawing.Color]::Black $BconnectSP.Location = New-Object System.Drawing.Point(376, 53) $BconnectSP.Name = "BconnectSP" $BconnectSP.Size = New-Object System.Drawing.Size(75, 23) $BconnectSP.TabIndex = 0 $BconnectSP.Text = "Connexion" $BconnectSP.UseVisualStyleBackColor = $true # # URLTenant # $URLTenant.Location = New-Object System.Drawing.Point(22, 55) $URLTenant.Name = "URLTenant" $URLTenant.Text = "https://guycarlier.sharepoint.com" $URLTenant.Size = New-Object System.Drawing.Size(325, 20) $URLTenant.TabIndex = 1 # # label3 # $label3.AutoSize = $true $label3.ForeColor = [System.Drawing.Color]::Black $label3.Location = New-Object System.Drawing.Point(22, 32) $label3.Name = "label3" $label3.Size = New-Object System.Drawing.Size(132, 13) $label3.TabIndex = 2 $label3.Text = "URL du tenant SharePoint" # # groupBox1 # $groupBox1.Controls.Add($label4) $groupBox1.Controls.Add($label3) $groupBox1.Controls.Add($BconnectSP) $groupBox1.Controls.Add($URLTenant) $groupBox1.Location = New-Object System.Drawing.Point(8, 6) $groupBox1.Name = "groupBox1" $groupBox1.Size = New-Object System.Drawing.Size(473, 100) $groupBox1.TabIndex = 3 $groupBox1.TabStop = $false $groupBox1.Text = "Connexion" # # groupBox2 # $groupBox2.Controls.Add($checkBox1) $groupBox2.Controls.Add($button1) $groupBox2.Controls.Add($radioButton3) $groupBox2.Controls.Add($radioButton2) $groupBox2.Controls.Add($radioButton1) $groupBox2.Location = New-Object System.Drawing.Point(9, 113) $groupBox2.Name = "groupBox2" $groupBox2.Size = New-Object System.Drawing.Size(472, 145) $groupBox2.TabIndex = 4 $groupBox2.TabStop = $false $groupBox2.Text = "Rapports" # # radioButton1 # $radioButton1.AutoSize = $true $radioButton1.ForeColor = [System.Drawing.Color]::Black $radioButton1.Location = New-Object System.Drawing.Point(23, 66) $radioButton1.Name = "radioButton1" $radioButton1.Size = New-Object System.Drawing.Size(141, 17) $radioButton1.TabIndex = 0 $radioButton1.TabStop = $true $radioButton1.Text = "Intégralité des messages" $radioButton1.UseVisualStyleBackColor = $true # # radioButton2 # $radioButton2.AutoSize = $true $radioButton2.ForeColor = [System.Drawing.Color]::Black $radioButton2.Location = New-Object System.Drawing.Point(23, 92) $radioButton2.Name = "radioButton2" $radioButton2.Size = New-Object System.Drawing.Size(109, 17) $radioButton2.TabIndex = 1 $radioButton2.TabStop = $true $radioButton2.Text = "Erreurs seulement" $radioButton2.UseVisualStyleBackColor = $true # # radioButton3 # $radioButton3.AutoSize = $true $radioButton3.ForeColor = [System.Drawing.Color]::Black $radioButton3.Location = New-Object System.Drawing.Point(23, 116) $radioButton3.Name = "radioButton3" $radioButton3.Size = New-Object System.Drawing.Size(113, 17) $radioButton3.TabIndex = 2 $radioButton3.TabStop = $true $radioButton3.Text = "Réussis seulement" $radioButton3.UseVisualStyleBackColor = $true # # button1 # $button1.ForeColor = [System.Drawing.Color]::Black $button1.Location = New-Object System.Drawing.Point(21, 29) $button1.Name = "button1" $button1.Size = New-Object System.Drawing.Size(174, 23) $button1.TabIndex = 3 $button1.Text = "Choix de l'emplacement..." $button1.UseVisualStyleBackColor = $true # # checkBox1 # $checkBox1.AutoSize = $true $checkBox1.ForeColor = [System.Drawing.Color]::Black $checkBox1.Location = New-Object System.Drawing.Point(189, 68) $checkBox1.Name = "checkBox1" $checkBox1.Size = New-Object System.Drawing.Size(153, 17) $checkBox1.TabIndex = 4 $checkBox1.Text = "Inclure ligne de commande" $checkBox1.UseVisualStyleBackColor = $true # # label4 # $label4.AutoSize = $true $label4.ForeColor = [System.Drawing.Color]::MediumVioletRed $label4.Location = New-Object System.Drawing.Point(380, 32) $label4.Name = "label4" $label4.Size = New-Object System.Drawing.Size(66, 13) $label4.TabIndex = 3 $label4.TextAlign = [System.Drawing.ContentAlignment]::MiddleCenter ##On modifie le texte du label en fonction de l'état initial de la connection a PNPOnline $pnpConnection = Get-PnPConnection | Out-string if(-not ([string]::IsNullOrEmpty($pnpConnection))){ $pnpConnection -match "Url : (?.*)/" $pnpConnectionUrl = $matches["content"] $label4.Text = "Connecté" $label4.ForeColor = [System.Drawing.Color]::Green $URLTenant.Text = $pnpConnectionUrl }else{ $label4.Text = "Déconnecté" $label4.ForeColor = [System.Drawing.Color]::MediumVioletRed } # # tabPage3 # $tabPage3.Location = New-Object System.Drawing.Point(4, 22) $tabPage3.Name = "tabPage3" $tabPage3.Padding = New-Object System.Windows.Forms.Padding(3) $tabPage3.Size = New-Object System.Drawing.Size(792, 398) $tabPage3.TabIndex = 2 $tabPage3.Text = "Rapports" $tabPage3.UseVisualStyleBackColor = $true # # tabPage4 # $tabPage4.Location = New-Object System.Drawing.Point(4, 22) $tabPage4.Name = "tabPage4" $tabPage4.Padding = New-Object System.Windows.Forms.Padding(3) $tabPage4.Size = New-Object System.Drawing.Size(792, 398) $tabPage4.TabIndex = 3 $tabPage4.Text = "Import" $tabPage4.UseVisualStyleBackColor = $true # # tabPage5 # $tabPage5.Location = New-Object System.Drawing.Point(4, 22) $tabPage5.Name = "tabPage5" $tabPage5.Padding = New-Object System.Windows.Forms.Padding(3) $tabPage5.Size = New-Object System.Drawing.Size(792, 398) $tabPage5.TabIndex = 4 $tabPage5.Text = "Audit" $tabPage5.UseVisualStyleBackColor = $true # # LresultsMove # $LresultsMove.HideSelection = $false $LresultsMove.Location = New-Object System.Drawing.Point(8, 173) $LresultsMove.Name = "LresultsMove" #$LresultsMove.FullRowSelect = true $LresultsMove.Size = New-Object System.Drawing.Size(776, 190) $LresultsMove.TabIndex = 7 $LresultsMove.AutoSize = $true #$LresultsMove.MultiColumn = $false #$LresultsMove.UseCompatibleStateImageBehavior = $false # # FMain # $FMain.BackColor = [System.Drawing.SystemColors]::ControlText $FMain.ClientSize = New-Object System.Drawing.Size(800, 450) $FMain.Controls.Add($tabs) $FMain.Controls.Add($menuStrip1) $FMain.ForeColor = [System.Drawing.Color]::Black $FMain.MainMenuStrip = $menuStrip1 $FMain.Name = "FMain" $FMain.Text = "SharePoint Utils GUI" #Onglet Move ##Lister les sites dans les comboBoxes #### On lance le ScriptBlock dans un runspace au clic du bouton BlistSites $BlistSites.Add_Click({ $newRunspace =[runspacefactory]::CreateRunspace() $newRunspace.ApartmentState ="STA" $newRunspace.ThreadOptions ="ReuseThread" $newRunspace.Open() $newRunspace.SessionStateProxy.SetVariable("syncHash",$syncHash) $BlistSitesRunSpace = [PowerShell]::Create().AddScript({ #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() }) ##Bouger les dossiers # $copyIt = { # param ($sourceSite,$destSite) # $sourceSite = $sourceSite -Replace '[A-Za-z]+://([A-Za-z]+(\.[A-Za-z]+)+)','' # $destSite = $destSite -Replace '[A-Za-z]+://([A-Za-z]+(\.[A-Za-z]+)+)','' # $jobCopyPending = Copy-PnPFile -SourceUrl "$sourceSite" -TargetUrl "$destSite" -Force -OverwriteIfAlreadyExists # $jobStatus = Receive-PnPCopyMoveJobStatus -Job $jobCopyPending -Wait # Write-Output $jobStatus # } $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]+)+)','' $destSite = $destSite -Replace '[A-Za-z]+://([A-Za-z]+(\.[A-Za-z]+)+)','' $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() }) #Onglet Parametres ##Connexion Sharepoint $pnpConnection=$null $pnpConnection = Get-PnPConnection | Out-string $tenantURL = $URLTenant.Text $BconnectSP.Add_Click({ Disconnect-PnPOnline $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{ # $this parameter is equal to the sender (object) # $_ is equal to the parameter e (eventarg) # The CloseReason property indicates a reason for the closure : # if (($_).CloseReason -eq [System.Windows.Forms.CloseReason]::UserClosing) #Sets the value indicating that the event should be canceled. ($_).Cancel= $False } $FMain.Add_FormClosing({ #Disconnect-PnPOnline Write-Host "Goodbye, come again soon :*" $RunspacePool.Close() $RunspacePool.Dispose() [gc]::Collect() OnFormClosing_FMain }) $FMain.Add_Shown({$FMain.Activate()}) $ModalResult=$FMain.ShowDialog() # Libération de la Form $FMain.Dispose()