ps-scripts/Sharepoint/gui/spmover/sputils.ps1

545 lines
18 KiB
PowerShell

################################################################################
#
# 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 : (?<content>.*)/"
$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=(?<content>.*)}"
$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()