Compare commits
	
		
			60 Commits
		
	
	
		
			beta
			...
			ebf00f110f
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ebf00f110f | |||
| 0b350b268d | |||
| 2e037fe448 | |||
| ee7d0499e2 | |||
| be0e6f7c4e | |||
| b8bd6bd142 | |||
| 1018c693fd | |||
| 3a68df44b9 | |||
| 93c5060848 | |||
| 07bf2c14ce | |||
| f308f5e804 | |||
| 826c49d164 | |||
| 7df974133a | |||
| e7d688f972 | |||
| 842a474a80 | |||
| 7285578906 | |||
| 67f3e3a4fa | |||
| 5de0e4613d | |||
| 1ea4f9e09c | |||
| 74d891415f | |||
| 15a7637596 | |||
| ec5cb7dc4a | |||
| 9409e59f57 | |||
|  | 8ee990cca2 | ||
|  | d6982c4927 | ||
|  | bc97219e5e | ||
|  | eadda6107c | ||
|  | 2dd5bd9217 | ||
|  | 09d5e0f281 | ||
|  | 9c7533edb0 | ||
| 66bd96e180 | |||
| 5614dcb11c | |||
|  | 7824d55859 | ||
|  | 5f11213de5 | ||
|  | a42c3bf5ef | ||
|  | a66fb59b6e | ||
|  | f3634db543 | ||
| f401ceb825 | |||
|  | f120caa0e2 | ||
| 993825bea5 | |||
| 8b50ddb79c | |||
|  | 54ee71c7f2 | ||
|  | 3e6e4102ee | ||
| ec111816d5 | |||
|  | 8509174d91 | ||
|  | 327bf76a52 | ||
| 6f04ad15ea | |||
|  | d03b93e554 | ||
| 8021f12d2c | |||
| 5139e8c598 | |||
| 833dd4c4ce | |||
| e721c304e5 | |||
| 1194b87c71 | |||
| 44841d197c | |||
|  | 3a5b3fa66c | ||
|  | 00a54cf299 | ||
|  | 9927abaf81 | ||
|  | 7c18b41a56 | ||
|  | 5eb68f1858 | ||
|  | d8a61d1aae | 
							
								
								
									
										124
									
								
								AD/CreateN1-N2Users/Create-ADtechs.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								AD/CreateN1-N2Users/Create-ADtechs.ps1
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,124 @@ | ||||
| Import-Module ActiveDirectory | ||||
|  | ||||
| #On récupere le nom de la forest pour déposer les scripts au bon endroit | ||||
| $domainInfos = Get-ADDomain | ||||
| $forestName = $domainInfos.Forest | ||||
|  | ||||
| #On crée et place les scripts de logon pour tous les users | ||||
| New-Item -Path C:\WINDOWS\SYSVOL\sysvol\$forestName\scripts\ -Name "Tech-N1.bat" -ItemType "file" | ||||
| $contentToAdd = @" | ||||
| cmd.exe /c "SET __COMPAT_LAYER=RunAsInvoker & START dsa.msc" | ||||
| cmd.exe /c "SET __COMPAT_LAYER=RunAsInvoker & START dhcpmgmt.msc" | ||||
| cmd.exe /c "SET __COMPAT_LAYER=RunAsInvoker & START printmanagement.msc" | ||||
| "@ | ||||
| Add-Content C:\WINDOWS\SYSVOL\sysvol\$forestName\scripts\Tech-N1.bat $contentToAdd | ||||
|  | ||||
| New-Item -Path C:\WINDOWS\SYSVOL\sysvol\$forestName\scripts\ -Name "Tech-N2.bat" -ItemType "file" | ||||
| $contentToAdd = @" | ||||
| cmd.exe /c "SET __COMPAT_LAYER=RunAsInvoker & START dsa.msc" | ||||
| cmd.exe /c "SET __COMPAT_LAYER=RunAsInvoker & START dhcpmgmt.msc" | ||||
| cmd.exe /c "SET __COMPAT_LAYER=RunAsInvoker & START printmanagement.msc" | ||||
| cmd.exe /c "SET __COMPAT_LAYER=RunAsInvoker & START dnsmgmt.msc" | ||||
| cmd.exe /c "SET __COMPAT_LAYER=RunAsInvoker & START gpmc.msc" | ||||
| "@ | ||||
| Add-Content C:\WINDOWS\SYSVOL\sysvol\$forestName\scripts\Tech-N2.bat $contentToAdd | ||||
|  | ||||
| #On crée le CSV pour y stocker les ID | ||||
| $pcName = (Get-ComputerInfo).CSName | ||||
| Set-Content "C:\techLogins-$pcName.csv" -Value "Username,Password" | ||||
|  | ||||
| ########### Fonctions ########### | ||||
| function GenPass { #Genere un mdp aléatoire selon les parametres indiqués | ||||
|      | ||||
|     $TokenSet = @{ | ||||
|         U = [Char[]]'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | ||||
|         L = [Char[]]'abcdefghijklmnopqrstuvwxyz' | ||||
|         N = [Char[]]'0123456789' | ||||
|         S = [Char[]]'!"#$%&()*+-.:<=>?@[]^_`{}~' | ||||
|     } | ||||
|          | ||||
|     $Upper = Get-Random -Count 5 -InputObject $TokenSet.U | ||||
|     $Lower = Get-Random -Count 5 -InputObject $TokenSet.L | ||||
|     $Number = Get-Random -Count 5 -InputObject $TokenSet.N | ||||
|     $Special = Get-Random -Count 5 -InputObject $TokenSet.S | ||||
|      | ||||
|     $StringSet = $Upper + $Lower + $Number + $Special | ||||
|      | ||||
|     $RdString = (Get-Random -Count 15 -InputObject $StringSet) -join '' | ||||
|  | ||||
|     return $RdString | ||||
|  | ||||
| } | ||||
|  | ||||
| function GetADSID { #On récupere le SID de l'AD pour pouvoir l'intégrer aux groupes qui en ont besoin | ||||
|     $fullSID = (Get-ADDomain).DomainSID.Value | ||||
|     $domaineSID = $fullSID.split("-",5)[-1] | ||||
|     return $domaineSID | ||||
| } | ||||
|  | ||||
| ########### Variables ########### | ||||
| $userList = "Tech-N1","Tech-N2","Tech-N3" | ||||
|  | ||||
| # On récupère le SID du serveur car certains SID de groupes en ont besoin | ||||
| $domaineSID = (GetADSID) | ||||
|  | ||||
| # On utilise le SID des groupes au lieu de leur noms familliers car Microsoft les traduit dans la langue cible du serveur | ||||
| $grpAccountOp = "S-1-5-32-548" | ||||
| $grpDomainAdm = "S-1-5-21-$domaineSID-512" | ||||
| $grpPrintOp = "S-1-5-32-550" | ||||
| #$grpServerOp = "S-1-5-32-549" Pas utilisé | ||||
| #$grpPowerUsers = "S-1-5-32-547" Déprécié | ||||
| $grpDHCPadm = "Administrateurs DHCP" | ||||
| $grpDHCPuser = "Utilisateurs DHCP" | ||||
| $grpGPOadmin = "S-1-5-21-$domaineSID-520" | ||||
| $grpNetAdmin = "S-1-5-32-556" | ||||
| ################################# | ||||
|  | ||||
|  | ||||
| ###########  Script   ############ | ||||
|  | ||||
| #Pour chaque user, on le crée + ajoute aux bons groupes | ||||
| ForEach($user in $userList){ | ||||
|     try{ | ||||
|         # On vérifie si l'utilisateur existe déjà, passe au suivant si oui | ||||
|         $existingUser = Get-ADUser -Filter { Name -eq $user } -ErrorAction SilentlyContinue | ||||
|         if ($existingUser) { | ||||
|             Write-Host "L'utilisateur " -ForegroundColor White -NoNewline; Write-Host $user -ForegroundColor Yellow -NoNewline; Write-Host " existe deja. Application des permissions." -ForegroundColor White | ||||
|         } | ||||
|         $userPass = (GenPass) | ||||
|         $userEncPass = ConvertTo-SecureString -String $userPass -AsPlainText -Force | ||||
|         $detailsUser = @{ | ||||
|             Name = $user | ||||
|             AccountPassword = $userEncPass | ||||
|             Enabled = $true | ||||
|             ChangePasswordAtLogon = $false | ||||
|             PasswordNeverExpires = $true #On fait en sorte qu'il n'expire pas | ||||
|         } | ||||
|         New-ADUser @detailsUser #On cree l'user... | ||||
|  | ||||
|         #...puis on l'ajoute aux bons groupes | ||||
|         switch ($user) { | ||||
|             "Tech-N1"{$Groups = @($grpAccountOp,$grpPrintOp,$grpDHCPuser)} | ||||
|             "Tech-N2"{$Groups = @($grpAccountOp,$grpPrintOp,$grpGPOadmin,$grpNetAdmin,$grpDHCPadm)} | ||||
|             "Tech-N3"{$Groups = @($grpDomainAdm)} | ||||
|             Default {} | ||||
|         } | ||||
|  | ||||
|         $newCsvLine = @([PSCustomObject]@{Username = $user; Password = $userPass}) | ||||
|         $newCsvLine | Export-CSV "C:\techLogins-$pcName.csv" -Append -NoTypeInformation -Encoding UTF8 | ||||
|  | ||||
|         ForEach ($Group in $Groups) { | ||||
|  | ||||
|             Add-ADPrincipalGroupMembership $User -MemberOf $Group | ||||
|  | ||||
|         } | ||||
|  | ||||
|         Write-Host "L'utilisateur " -ForegroundColor White -NoNewline; Write-Host $User -ForegroundColor Green -NoNewline; Write-Host " a bien ete cree. Son mot de passe est " -ForegroundColor White -NoNewline; Write-Host $userPass -ForegroundColor Cyan | ||||
|     }      | ||||
|     catch { | ||||
|         Write-Error "Erreur pour l'utilisateur $user : $_" | ||||
|     } | ||||
| } | ||||
| Get-ADUser Tech-N1 | Set-ADUser -ScriptPath "Tech-N1.bat" | ||||
| Get-ADUser Tech-N2 | Set-ADUser -ScriptPath "Tech-N2.bat" | ||||
| Write-Host "Les utilisateurs ainsi que leur mots de passes ont ete exportes ici : " -ForegroundColor White -NoNewline; Write-Host "C:\techLogins-$pcName.csv" -ForegroundColor Green | ||||
							
								
								
									
										
											BIN
										
									
								
								AD/CreateN1-N2Users/Create-ADtechs.ps1.psbuild
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								AD/CreateN1-N2Users/Create-ADtechs.ps1.psbuild
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								AD/CreateN1-N2Users/bin/x64/Create-ADtechs.exe
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								AD/CreateN1-N2Users/bin/x64/Create-ADtechs.exe
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										13
									
								
								AD/CreateN1-N2Users/bin/x64/Create-ADtechs.exe.config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								AD/CreateN1-N2Users/bin/x64/Create-ADtechs.exe.config
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| <?xml version="1.0" encoding="utf-8" ?>  | ||||
| <configuration>  | ||||
|     <startup useLegacyV2RuntimeActivationPolicy="true">  | ||||
|         <supportedRuntime version="v4.0" />     | ||||
| 	    <supportedRuntime version="v2.0" /> | ||||
|     </startup>  | ||||
| 	<appSettings> | ||||
| 		<add key="EnableWindowsFormsHighDpiAutoResizing" value="true"/> | ||||
| 	</appSettings> | ||||
|     <runtime> | ||||
|         <AppContextSwitchOverrides value="Switch.System.IO.BlockLongPaths=false;Switch.System.IO.UseLegacyPathHandling=false"/> | ||||
|     </runtime> | ||||
| </configuration> | ||||
							
								
								
									
										17
									
								
								Intune/Random-PWGen.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								Intune/Random-PWGen.ps1
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| $TokenSet = @{ | ||||
|     U = [Char[]]'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | ||||
|     L = [Char[]]'abcdefghijklmnopqrstuvwxyz' | ||||
|     N = [Char[]]'0123456789' | ||||
|     S = [Char[]]'!"#$%&''()*+,-./:;<=>?@[\]^_`{|}~' | ||||
| } | ||||
|      | ||||
| $Upper = Get-Random -Count 5 -InputObject $TokenSet.U | ||||
| $Lower = Get-Random -Count 5 -InputObject $TokenSet.L | ||||
| $Number = Get-Random -Count 5 -InputObject $TokenSet.N | ||||
| $Special = Get-Random -Count 5 -InputObject $TokenSet.S | ||||
|  | ||||
| $StringSet = $Upper + $Lower + $Number + $Special | ||||
|  | ||||
| $RdString = (Get-Random -Count 15 -InputObject $StringSet) -join '' | ||||
|  | ||||
| #You can use now $RdString in your script to make a random password to an AD user or other stuff... | ||||
							
								
								
									
										89
									
								
								Intune/UpdateForensITXML-ProfWiz.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								Intune/UpdateForensITXML-ProfWiz.ps1
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| # Check that AzureAD is installed | ||||
| if (-Not (Get-Module -ListAvailable -Name AzureAD)) { | ||||
|  | ||||
|     $install = Read-Host 'The AzureAD PowerShell module is not installed. Do you want to install it now? (Y/n)' | ||||
|  | ||||
|     if($install -eq '' -Or $install -eq 'Y' -Or $install -eq 'Yes'){ | ||||
|         If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) | ||||
|         { | ||||
|             Write-Warning "Administrator permissions are needed to install the AzureAD PowerShell module.`nPlease re-run this script as an Administrator." | ||||
|             Exit | ||||
|         } | ||||
|  | ||||
|         write-host "Installing" | ||||
|         Install-Module -Name AzureAD | ||||
|     } | ||||
|     else { | ||||
|         exit | ||||
|     } | ||||
| } | ||||
|  | ||||
| # Create a temporary file to hold the unformatted results of our Get-AzureADUser query | ||||
| $TempFile = New-TemporaryFile | ||||
|  | ||||
| #Go ahead and attempt to get the Azure AD user IDs, but catch the error if there is no existing connection to Azure AD | ||||
| Try | ||||
| { | ||||
|     Get-AzureADUser -All:$true | Export-Csv -Path $TempFile -NoTypeInformation -encoding Utf8 | ||||
| } | ||||
| Catch [Microsoft.Open.Azure.AD.CommonLibrary.AadNeedAuthenticationException] | ||||
| { | ||||
|     #Connect to Azure AD. This will show a prompt. | ||||
|     Connect-AzureAD | Out-Null | ||||
|  | ||||
|     #Try again | ||||
|     Get-AzureADUser -All:$true | Export-Csv -Path $TempFile -NoTypeInformation -encoding Utf8 | ||||
| } | ||||
|  | ||||
|  | ||||
| # Get the tennant details | ||||
| $Tenant = Get-AzureADTenantDetail | ||||
|  | ||||
| # Get the unformatted data from the temporary file | ||||
| $azureADUsers = import-csv $TempFile | ||||
|  | ||||
| # Create the XML file | ||||
| $xmlsettings = New-Object System.Xml.XmlWriterSettings | ||||
| $xmlsettings.Indent = $true | ||||
| $xmlsettings.IndentChars = "    " | ||||
|  | ||||
| $XmlWriter = [System.XML.XmlWriter]::Create("$((Get-Location).Path)\ForensiTAzureID.xml", $xmlsettings) | ||||
|  | ||||
| # Write the XML Declaration and set the XSL | ||||
| $xmlWriter.WriteStartDocument() | ||||
| $xmlWriter.WriteProcessingInstruction("xml-stylesheet", "type='text/xsl' href='style.xsl'") | ||||
|  | ||||
| # Start the Root Element  | ||||
| $xmlWriter.WriteStartElement("ForensiTAzureID") | ||||
|  | ||||
| # Write the Azure AD domain details as attributes | ||||
| $xmlWriter.WriteAttributeString("ObjectId", $($Tenant.ObjectId)) | ||||
| $xmlWriter.WriteAttributeString("Name", $($Tenant.VerifiedDomains.Name)); | ||||
| $xmlWriter.WriteAttributeString("DisplayName", $($Tenant.DisplayName)); | ||||
|  | ||||
|  | ||||
| #Parse the data | ||||
| ForEach ($azureADUser in $azureADUsers){ | ||||
|    | ||||
|     $xmlWriter.WriteStartElement("User") | ||||
|  | ||||
|         $xmlWriter.WriteElementString("UserPrincipalName",$($azureADUser.UserPrincipalName)) | ||||
|         $xmlWriter.WriteElementString("ObjectId",$($azureADUser.ObjectId)) | ||||
|         $xmlWriter.WriteElementString("DisplayName",$($azureADUser.DisplayName)) | ||||
|  | ||||
|     $xmlWriter.WriteEndElement() | ||||
|     } | ||||
|  | ||||
| $xmlWriter.WriteEndElement() | ||||
|  | ||||
| # Close the XML Document | ||||
| $xmlWriter.WriteEndDocument() | ||||
| $xmlWriter.Flush() | ||||
| $xmlWriter.Close() | ||||
|  | ||||
|  | ||||
| # Clean up | ||||
| Remove-Item $TempFile | ||||
|   | ||||
| write-host "Azure user ID file created: $((Get-Location).Path)\ForensiTAzureID.xml" | ||||
|  | ||||
							
								
								
									
										7
									
								
								Misc/Multi-Thread/template.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Misc/Multi-Thread/template.ps1
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| # This is a template for multi-threaded stuff, or at least it should be... | ||||
|  | ||||
| # We start a new job and store it in a variable to be able to display said job later by invoking the variable in the Receive-Job cmdlet. | ||||
| $Job = Start-Job -ScriptBlock {Write-Output 'Hello World'} | ||||
| Receive-Job $Job # Will display Hello World in the cmd | ||||
|  | ||||
|  | ||||
							
								
								
									
										631
									
								
								Misc/Register Az App/regApp.TempPoint.psf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										631
									
								
								Misc/Register Az App/regApp.TempPoint.psf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,631 @@ | ||||
| <File version="3.2"> | ||||
|   <FileID>27bdac5f-55ae-4908-a755-ee5f598a9689</FileID> | ||||
|   <Preview>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 | ||||
| yhgAq8MAAIC1wQBYZQyA1WEAAMDaYACsMgbA6jAAAGBtMABWGQNgdRgAALA2GACrjAGwOgwAAFgb | ||||
| DIBVxgBYHQYAAKwNBsAqYwCsDgMAANYGA8BB5hAz31GJ7ryJiYkVj+etYgAAgBsMAAeZB5DuLvux | ||||
| fL/MdRgAALB6DADyKgYAALjBACCvYgAAgBsMAPIqBgAAuMEAIK9iAACAGwwA8ioGAAC4wQAgr2IA | ||||
| AIAbDADyKgYAALjBACCvYgAAgBsMAPIqBgAAuMEAIK9iAACAGwwA8ioGAAC4wQAgr2IAAIAbDADy | ||||
| KgYAALjBACCvYgAAgBsMAPIqBgAAuMEAIK9iAACAGwwA8ioGAAC4wQAgr2IAAIAbDADyKgYAALjB | ||||
| ACCvYgAAgBsMAPIqBgAAuMEAcNDk5KRmZmY0MzNNd9jExMSKx/NWMQAAwA0GwCozh39fX7/q6hvp | ||||
| TqprVFNzQiMjI3c0AhgAAOAGA2CVnT8/o9KySuWcLVRNbQPdZtU1DUrPyFJXV7empqZWPK43iwEA | ||||
| AG4wAFbZ+RkzACrU29dvP7Z4H2WxuNrbuxgAALAGGACrbHEAdHZ1248t3kdJWYU6OhgAALAWGACr | ||||
| jAFw9xgAALB2GACrjAFw9xgAALB2GACrjAFw9xgAALB2GACrjAFw9xgAALB2GACrjAFw9xgAALB2 | ||||
| GACrjAFw9xgAALB2GACrjAFw9xgAALB2GACrjAFw9xgAALB2GACrjAFw9xgAALB2GACrjAFw9xgA | ||||
| ALB2GACrbHEA9PTyswDulPlZAAwAAFgbDIBVZn4aYElpTAVFZWpJtNNt16aMzGx1diYZAACwBhgA | ||||
| q2xqalLJ7h7FKqpUUVlNt5l5vKpr6jU8PKyJiYkVj+vNYgAAgBsMAAeZEWCeCZiZodvNfOrEdCeH | ||||
| v4kBAABuMADIqxgAAOAGA4C8igEAAG4wAMirGAAA4AYDgLyKAQAAbjAAyKsYAADgBgOAvIoBAABu | ||||
| MADIqxgAAOAGA4C8igEAAG4wAMirGAAA4AYDgLyKAQAAbjAAyKsYAADgBgOAvIoBAABuMADIqxgA | ||||
| AOAGA4C8igEAAG4wAMirGAAA4AYDgLyKAQAAbjAAyKsYAADgBgOAvIoBAABuMADIqxgAAOAGA4C8 | ||||
| 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 | ||||
| 5LG8HjUAAAAASUVORK5CYII=</Preview> | ||||
|   <Form>2ZCr1rhxuBUAACODCAAAAAAABADVWFlzqkoQfk9V/gPFa6wjGnGpilaJW0xwAVyS85JiGYEIM2YY3H79nRFz | ||||
| QyJRPLe8laNVOEA33f19vQzeDYxXYJKgdn3FcXfRCUc2C1DltU1AgP9r6kILrYJfbYT96Jjhkm5l | ||||
| uAnAgYtgtfBLYN8M1wg9EmJQhSAkWPcy3DA0PNd8BJsRmgNYNUolXTTFYq5yWwBCucJzUPep5Rl9 | ||||
| Xo7nTMf1LEzl+AaCBCMv4HduUkeHGC0AJpu9Qj0kSDN1DzRdH0DmBBUtZrjc7V32XfSUag9ZgK+1 | ||||
| qaWTOg3PBZBo7pYqFPNihrstF08q9emRr+1COymrER2TIQpcQkPhaw1qDWDNxADAk7ojsCYsDuwf | ||||
| iraW9El7ORnp1t6fF7a+y+7uvoueToUpMCRMTwG+eEKsgGFEpo6mxSEYMjL1CMNcOZ/hxMN8ONTp | ||||
| udD1Qz+iN0+9zgsptCJ6Y46m0IlMFG5zNIPyaRRGutGFFlizcJLE4/w2kRnSYiAN5C88QID1ybuX | ||||
| g9tf+M9GCZA+HVjeSWh98VwgAOqQvBho/aepUKQVWyml5vTDYGpKc0LatIkxmuhRnFGGcMPRoc24 | ||||
| /PDqJXb9byFRXywYuOezKCFs0VZINh6FuY8gSIHxZ+ZT9YCI+ZiX51GfMHeOUp8wPc6mTgoJQfDi | ||||
| zAUAWn9aeKUShaZYSI0/s5Ua+BLlNn8m7mIa8d087QxSiI4DMHGDUPd2+Snp5ryBPIT52giHiYka | ||||
| r266qTDnUcwvu/V/reUegKFGsLu4eE7QORIGzNLIAZS3s7Kj6+s2YBswF9pnjtwujSn2ZCrArhxt | ||||
| bwh5O0gYNkz4ctDE3KKOqWAGKCAmeB9iDKgDb3guG48my659RH9Oo6Mep9+0fKYvhdpQtyxKF19j | ||||
| JUct0WOaMnXQikXEwh65i+D7skis791GO5+47fm+wNP0mqjA/wUhYXceL73PJykm6v+Xcsdz67v3 | ||||
| H8+1IdsI8jXVtZ3TLz9NetpEK/il+n5o7R1UnqXj+dHC+1p2f0lcHiMvfWAnad715Ri9kgt1vKm5 | ||||
| E2mgroTHjo3q9NPXxk5rbNOVxE7rSqP+zH5n5WzFYQupY0mjcatelzvDRnbtSAq76q20tre9vqLL | ||||
| wZIemnglecZ6o7G7kiOoE0cY5yu+dW85pj+um532woBKaPgTodtUwp5WyP1uWc87y4+TB7XVHl9f | ||||
| DVo3ZD4PBvZrXVFk/8nU9YfyWBTmsmAoW1smrlp4EGcN/GY43XJhbLS7EEzXheWjKvRCy/QCufDc | ||||
| 7c/1smtQ32ZyZ2RslFFvXGkpEtm+hUOCJLsuK6IElH7JNn+3+t2bp1U7V5yK5k19qi21gvTQJ9vu | ||||
| swwHgTRTl/dPSh+p11eToY/qQTecytoMik759am40ge9J00NRa3fUo3n4lZeyds3+RHPwdY28sCt | ||||
| lJedpTZVVk7oWqORUhha9280Yoab9KCOxRaeP9i2Xa3eZff0pCR3/2KT2ChO/zmxa8e3tPHnD9vr | ||||
| QXONmn3UY5Pmy8/vp8kd4yiyiSopgc0JOYrs4UBNHltNaun4/zz7fWWiS4cbzZ9PxzeN7igfyToX | ||||
| IUROHqIJjCQ7dZSS92VQ+wd/RWejuBUAAA==</Form> | ||||
|   <Code><![CDATA[ | ||||
| $form1_Load={ | ||||
| 	#TODO: Initialize Form Controls here | ||||
| 	 | ||||
| 	Set-ControlTheme $form1 -Theme Dark | ||||
| } | ||||
|  | ||||
| $darkToolStripMenuItem_Click={ | ||||
| 	#TODO: Place custom script here | ||||
| 	Set-ControlTheme -Control $form1 -Theme Dark | ||||
| } | ||||
|  | ||||
| $lightToolStripMenuItem_Click={ | ||||
| 	Set-ControlTheme -Control $form1 -Theme Light | ||||
| } | ||||
|  | ||||
| #region Control Theme Helper Function | ||||
| <# | ||||
| 	.SYNOPSIS | ||||
| 		Applies a theme to the control and its children. | ||||
| 	 | ||||
| 	.PARAMETER Control | ||||
| 		The control to theme. Usually the form itself. | ||||
| 	 | ||||
| 	.PARAMETER Theme | ||||
| 		The color theme: | ||||
| 		Light | ||||
| 		Dark | ||||
|  | ||||
| 	.PARAMETER CustomColor | ||||
| 		A hashtable that contains the color values. | ||||
| 		Keys: | ||||
| 		WindowColor | ||||
| 		ContainerColor | ||||
| 		BackColor | ||||
| 		ForeColor | ||||
| 		BorderColor | ||||
| 		SelectionForeColor | ||||
| 		SelectionBackColor | ||||
| 		MenuSelectionColor | ||||
| 	.EXAMPLE | ||||
| 		PS C:\> Set-ControlTheme -Control $form1 -Theme Dark | ||||
| 	 | ||||
| 	.EXAMPLE | ||||
| 		PS C:\> Set-ControlTheme -Control $form1 -CustomColor @{ WindowColor = 'White'; ContainerBackColor = 'Gray'; BackColor... } | ||||
| 	.NOTES | ||||
| 		Created by SAPIEN Technologies, Inc. | ||||
| #> | ||||
| function Set-ControlTheme | ||||
| { | ||||
| 	[CmdletBinding()] | ||||
| 	param | ||||
| 	( | ||||
| 		[Parameter(Mandatory = $true)] | ||||
| 		[ValidateNotNull()] | ||||
| 		[System.ComponentModel.Component]$Control, | ||||
| 		[ValidateSet('Light', 'Dark')] | ||||
| 		[string]$Theme = 'Dark', | ||||
| 		[System.Collections.Hashtable]$CustomColor | ||||
| 	) | ||||
| 	 | ||||
| 	$Font = [System.Drawing.Font]::New('Segoe UI', 9) | ||||
| 	 | ||||
| 	#Initialize the colors | ||||
| 	if ($Theme -eq 'Dark') | ||||
| 	{ | ||||
| 		$WindowColor = [System.Drawing.Color]::FromArgb(32, 32, 32) | ||||
| 		$ContainerColor = [System.Drawing.Color]::FromArgb(45, 45, 45) | ||||
| 		$BackColor = [System.Drawing.Color]::FromArgb(32, 32, 32) | ||||
| 		$ForeColor = [System.Drawing.Color]::White | ||||
| 		$BorderColor = [System.Drawing.Color]::DimGray | ||||
| 		$SelectionBackColor = [System.Drawing.SystemColors]::Highlight | ||||
| 		$SelectionForeColor = [System.Drawing.Color]::White | ||||
| 		$MenuSelectionColor = [System.Drawing.Color]::DimGray | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		$WindowColor = [System.Drawing.Color]::White | ||||
| 		$ContainerColor = [System.Drawing.Color]::WhiteSmoke | ||||
| 		$BackColor = [System.Drawing.Color]::Gainsboro | ||||
| 		$ForeColor = [System.Drawing.Color]::Black | ||||
| 		$BorderColor = [System.Drawing.Color]::DimGray | ||||
| 		$SelectionBackColor = [System.Drawing.SystemColors]::Highlight | ||||
| 		$SelectionForeColor = [System.Drawing.Color]::White | ||||
| 		$MenuSelectionColor = [System.Drawing.Color]::LightSteelBlue | ||||
| 	} | ||||
| 	 | ||||
| 	if ($CustomColor) | ||||
| 	{ | ||||
| 		#Check and Validate the custom colors: | ||||
| 		$Color = $CustomColor.WindowColor -as [System.Drawing.Color] | ||||
| 		if ($Color) { $WindowColor = $Color } | ||||
| 		$Color = $CustomColor.ContainerColor -as [System.Drawing.Color] | ||||
| 		if ($Color) { $ContainerColor = $Color } | ||||
| 		$Color = $CustomColor.BackColor -as [System.Drawing.Color] | ||||
| 		if ($Color) { $BackColor = $Color } | ||||
| 		$Color = $CustomColor.ForeColor -as [System.Drawing.Color] | ||||
| 		if ($Color) { $ForeColor = $Color } | ||||
| 		$Color = $CustomColor.BorderColor -as [System.Drawing.Color] | ||||
| 		if ($Color) { $BorderColor = $Color } | ||||
| 		$Color = $CustomColor.SelectionBackColor -as [System.Drawing.Color] | ||||
| 		if ($Color) { $SelectionBackColor = $Color } | ||||
| 		$Color = $CustomColor.SelectionForeColor -as [System.Drawing.Color] | ||||
| 		if ($Color) { $SelectionForeColor = $Color } | ||||
| 		$Color = $CustomColor.MenuSelectionColor -as [System.Drawing.Color] | ||||
| 		if ($Color) { $MenuSelectionColor = $Color } | ||||
| 	} | ||||
| 	 | ||||
| 	#Define the custom renderer for the menus | ||||
| 	#region Add-Type definition | ||||
| 	try | ||||
| 	{ | ||||
| 		[SAPIENTypes.SAPIENColorTable] | Out-Null | ||||
| 	} | ||||
| 	catch | ||||
| 	{ | ||||
| 		if ($PSVersionTable.PSVersion.Major -ge 7) | ||||
| 		{ | ||||
| 			$Assemblies = 'System.Windows.Forms', 'System.Drawing', 'System.Drawing.Primitives' | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			$Assemblies = 'System.Windows.Forms', 'System.Drawing' | ||||
| 		} | ||||
| 		Add-Type -ReferencedAssemblies $Assemblies -TypeDefinition " | ||||
| using System; | ||||
| using System.Windows.Forms; | ||||
| using System.Drawing; | ||||
| namespace SAPIENTypes | ||||
| { | ||||
|     public class SAPIENColorTable : ProfessionalColorTable | ||||
|     { | ||||
|         Color ContainerBackColor; | ||||
|         Color BackColor; | ||||
|         Color BorderColor; | ||||
| 		Color SelectBackColor; | ||||
|  | ||||
|         public SAPIENColorTable(Color containerColor, Color backColor, Color borderColor, Color selectBackColor) | ||||
|         { | ||||
|             ContainerBackColor = containerColor; | ||||
|             BackColor = backColor; | ||||
|             BorderColor = borderColor; | ||||
| 			SelectBackColor = selectBackColor; | ||||
|         }  | ||||
| 		public override Color MenuStripGradientBegin { get { return ContainerBackColor; } } | ||||
|         public override Color MenuStripGradientEnd { get { return ContainerBackColor; } } | ||||
|         public override Color ToolStripBorder { get { return BorderColor; } } | ||||
|         public override Color MenuItemBorder { get { return SelectBackColor; } } | ||||
|         public override Color MenuItemSelected { get { return SelectBackColor; } } | ||||
|         public override Color SeparatorDark { get { return BorderColor; } } | ||||
|         public override Color ToolStripDropDownBackground { get { return BackColor; } } | ||||
|         public override Color MenuBorder { get { return BorderColor; } } | ||||
|         public override Color MenuItemSelectedGradientBegin { get { return SelectBackColor; } } | ||||
|         public override Color MenuItemSelectedGradientEnd { get { return SelectBackColor; } }       | ||||
|         public override Color MenuItemPressedGradientBegin { get { return ContainerBackColor; } } | ||||
|         public override Color MenuItemPressedGradientEnd { get { return ContainerBackColor; } } | ||||
|         public override Color MenuItemPressedGradientMiddle { get { return ContainerBackColor; } } | ||||
|         public override Color ImageMarginGradientBegin { get { return BackColor; } } | ||||
|         public override Color ImageMarginGradientEnd { get { return BackColor; } } | ||||
|         public override Color ImageMarginGradientMiddle { get { return BackColor; } } | ||||
|     } | ||||
| }" | ||||
| 	} | ||||
| 	#endregion | ||||
| 	 | ||||
| 	$colorTable = New-Object SAPIENTypes.SAPIENColorTable -ArgumentList $ContainerColor, $BackColor, $BorderColor, $MenuSelectionColor | ||||
| 	$render = New-Object System.Windows.Forms.ToolStripProfessionalRenderer -ArgumentList $colorTable | ||||
| 	[System.Windows.Forms.ToolStripManager]::Renderer = $render | ||||
| 	 | ||||
| 	#Set up our processing queue | ||||
| 	$Queue = New-Object System.Collections.Generic.Queue[System.ComponentModel.Component] | ||||
| 	$Queue.Enqueue($Control) | ||||
| 	 | ||||
| 	Add-Type -AssemblyName System.Core | ||||
| 	 | ||||
| 	#Only process the controls once. | ||||
| 	$Processed = New-Object System.Collections.Generic.HashSet[System.ComponentModel.Component] | ||||
| 	 | ||||
| 	#Apply the colors to the controls | ||||
| 	while ($Queue.Count -gt 0) | ||||
| 	{ | ||||
| 		$target = $Queue.Dequeue() | ||||
| 		 | ||||
| 		#Skip controls we already processed | ||||
| 		if ($Processed.Contains($target)) { continue } | ||||
| 		$Processed.Add($target) | ||||
| 		 | ||||
| 		#Set the text color | ||||
| 		$target.ForeColor = $ForeColor | ||||
| 		 | ||||
| 		#region Handle Controls | ||||
| 		if ($target -is [System.Windows.Forms.Form]) | ||||
| 		{ | ||||
| 			#Set Font | ||||
| 			$target.Font = $Font | ||||
| 			$target.BackColor = $ContainerColor | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.SplitContainer]) | ||||
| 		{ | ||||
| 			$target.BackColor = $BorderColor | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.PropertyGrid]) | ||||
| 		{ | ||||
| 			$target.BackColor = $BorderColor | ||||
| 			$target.ViewBackColor = $BackColor | ||||
| 			$target.ViewForeColor = $ForeColor | ||||
| 			$target.ViewBorderColor = $BorderColor | ||||
| 			$target.CategoryForeColor = $ForeColor | ||||
| 			$target.CategorySplitterColor = $ContainerColor | ||||
| 			$target.HelpBackColor = $BackColor | ||||
| 			$target.HelpForeColor = $ForeColor | ||||
| 			$target.HelpBorderColor = $BorderColor | ||||
| 			$target.CommandsBackColor = $BackColor | ||||
| 			$target.CommandsBorderColor = $BorderColor | ||||
| 			$target.CommandsForeColor = $ForeColor | ||||
| 			$target.LineColor = $ContainerColor | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.ContainerControl] -or | ||||
| 			$target -is [System.Windows.Forms.Panel]) | ||||
| 		{ | ||||
| 			#Set the BackColor for the container | ||||
| 			$target.BackColor = $ContainerColor | ||||
| 			 | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.GroupBox]) | ||||
| 		{ | ||||
| 			$target.FlatStyle = 'Flat' | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.Button]) | ||||
| 		{ | ||||
| 			$target.FlatStyle = 'Flat' | ||||
| 			$target.FlatAppearance.BorderColor = $BorderColor | ||||
| 			$target.BackColor = $BackColor | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.CheckBox] -or | ||||
| 			$target -is [System.Windows.Forms.RadioButton] -or | ||||
| 			$target -is [System.Windows.Forms.Label]) | ||||
| 		{ | ||||
| 			#$target.FlatStyle = 'Flat' | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.ComboBox]) | ||||
| 		{ | ||||
| 			$target.BackColor = $BackColor | ||||
| 			$target.FlatStyle = 'Flat' | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.TextBox]) | ||||
| 		{ | ||||
| 			$target.BorderStyle = 'FixedSingle' | ||||
| 			$target.BackColor = $BackColor | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.DataGridView]) | ||||
| 		{ | ||||
| 			$target.GridColor = $BorderColor | ||||
| 			$target.BackgroundColor = $ContainerColor | ||||
| 			$target.DefaultCellStyle.BackColor = $WindowColor | ||||
| 			$target.DefaultCellStyle.SelectionBackColor = $SelectionBackColor | ||||
| 			$target.DefaultCellStyle.SelectionForeColor = $SelectionForeColor | ||||
| 			$target.ColumnHeadersDefaultCellStyle.BackColor = $ContainerColor | ||||
| 			$target.ColumnHeadersDefaultCellStyle.ForeColor = $ForeColor | ||||
| 			$target.EnableHeadersVisualStyles = $false | ||||
| 			$target.ColumnHeadersBorderStyle = 'Single' | ||||
| 			$target.RowHeadersBorderStyle = 'Single' | ||||
| 			$target.RowHeadersDefaultCellStyle.BackColor = $ContainerColor | ||||
| 			$target.RowHeadersDefaultCellStyle.ForeColor = $ForeColor | ||||
| 			 | ||||
| 		} | ||||
| 		elseif ($PSVersionTable.PSVersion.Major -le 5 -and $target -is [System.Windows.Forms.DataGrid]) | ||||
| 		{ | ||||
| 			$target.CaptionBackColor = $WindowColor | ||||
| 			$target.CaptionForeColor = $ForeColor | ||||
| 			$target.BackgroundColor = $ContainerColor | ||||
| 			$target.BackColor = $WindowColor | ||||
| 			$target.ForeColor = $ForeColor | ||||
| 			$target.HeaderBackColor = $ContainerColor | ||||
| 			$target.HeaderForeColor = $ForeColor | ||||
| 			$target.FlatMode = $true | ||||
| 			$target.BorderStyle = 'FixedSingle' | ||||
| 			$target.GridLineColor = $BorderColor | ||||
| 			$target.AlternatingBackColor = $ContainerColor | ||||
| 			$target.SelectionBackColor = $SelectionBackColor | ||||
| 			$target.SelectionForeColor = $SelectionForeColor | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.ToolStrip]) | ||||
| 		{ | ||||
| 			 | ||||
| 			$target.BackColor = $BackColor | ||||
| 			$target.Renderer = $render | ||||
| 			 | ||||
| 			foreach ($item in $target.Items) | ||||
| 			{ | ||||
| 				$Queue.Enqueue($item) | ||||
| 			} | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.ToolStripMenuItem] -or | ||||
| 			$target -is [System.Windows.Forms.ToolStripDropDown] -or | ||||
| 			$target -is [System.Windows.Forms.ToolStripDropDownItem]) | ||||
| 		{ | ||||
| 			$target.BackColor = $BackColor | ||||
| 			foreach ($item in $target.DropDownItems) | ||||
| 			{ | ||||
| 				$Queue.Enqueue($item) | ||||
| 			} | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.ListBox] -or | ||||
| 			$target -is [System.Windows.Forms.ListView] -or | ||||
| 			$target -is [System.Windows.Forms.TreeView]) | ||||
| 		{ | ||||
| 			$target.BackColor = $WindowColor | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			$target.BackColor = $BackColor | ||||
| 		} | ||||
| 		#endregion | ||||
| 		 | ||||
| 		if ($target -is [System.Windows.Forms.Control]) | ||||
| 		{ | ||||
| 			#Queue all the child controls | ||||
| 			foreach ($child in $target.Controls) | ||||
| 			{ | ||||
| 				$Queue.Enqueue($child) | ||||
| 			} | ||||
| 			if ($target.ContextMenuStrip) | ||||
| 			{ | ||||
| 				$Queue.Enqueue($target.ContextMenuStrip); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| #endregion | ||||
|  | ||||
|  | ||||
| $send_Click={ | ||||
| 	 | ||||
| 	Register-PnPEntraIDAppForInteractiveLogin -ApplicationName "$appName_box" -Tenant $tenant_box -Interactive | ||||
| 	 | ||||
| 	 | ||||
| } | ||||
|  | ||||
| $tenant_box_TextChanged={ | ||||
| 	#TODO: Place custom script here | ||||
| 	 | ||||
| } | ||||
|  | ||||
| #region Control Helper Functions | ||||
| <# | ||||
| 	.SYNOPSIS | ||||
| 		Sets the emulation of the WebBrowser control for the application. | ||||
| 	 | ||||
| 	.DESCRIPTION | ||||
| 		Sets the emulation of the WebBrowser control for the application using the installed version of IE. | ||||
| 		This improves the WebBrowser control compatibility with newer html features. | ||||
| 	 | ||||
| 	.PARAMETER ExecutableName | ||||
| 		The name of the executable E.g. PowerShellStudio.exe. | ||||
| 		Default Value: The running executable name. | ||||
| 	 | ||||
| 	.EXAMPLE | ||||
| 		PS C:\> Set-WebBrowserEmulation | ||||
|  | ||||
| 	.EXAMPLE | ||||
| 		PS C:\> Set-WebBrowserEmulation PowerShell.exe | ||||
| #> | ||||
| function Set-WebBrowserEmulation | ||||
| { | ||||
| 	param | ||||
| 	( | ||||
| 		[ValidateNotNullOrEmpty()] | ||||
| 		[string] | ||||
| 		$ExecutableName = [System.IO.Path]::GetFileName([System.Diagnostics.Process]::GetCurrentProcess().MainModule.FileName) | ||||
| 	) | ||||
| 	 | ||||
| 	#region Get IE Version | ||||
| 	$valueNames = 'svcVersion', 'svcUpdateVersion', 'Version', 'W2kVersion' | ||||
| 	 | ||||
| 	$version = 0; | ||||
| 	for ($i = 0; $i -lt $valueNames.Length; $i++) | ||||
| 	{ | ||||
| 		$objVal = [Microsoft.Win32.Registry]::GetValue('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer', $valueNames[$i], '0') | ||||
| 		$strVal = [System.Convert]::ToString($objVal) | ||||
| 		if ($strVal) | ||||
| 		{ | ||||
| 			$iPos = $strVal.IndexOf('.') | ||||
| 			if ($iPos -gt 0) | ||||
| 			{ | ||||
| 				$strVal = $strVal.Substring(0, $iPos) | ||||
| 			} | ||||
| 			 | ||||
| 			$res = 0; | ||||
| 			if ([int]::TryParse($strVal, [ref]$res)) | ||||
| 			{ | ||||
| 				$version = [Math]::Max($version, $res) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	if ($version -lt 7) | ||||
| 	{ | ||||
| 		$version = 7000 | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		$version = $version * 1000 | ||||
| 	} | ||||
| 	#endregion | ||||
| 	 | ||||
| 	[Microsoft.Win32.Registry]::SetValue('HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION', $ExecutableName, $version) | ||||
| } | ||||
|  | ||||
|  | ||||
| #endregion | ||||
|  | ||||
| $webbrowser1_DocumentCompleted=[System.Windows.Forms.WebBrowserDocumentCompletedEventHandler]{ | ||||
| #Event Argument: $_ = [System.Windows.Forms.WebBrowserDocumentCompletedEventArgs] | ||||
| 	#TODO: Place custom script here | ||||
| 	 | ||||
| } | ||||
| ]]></Code> | ||||
|   <TV>0</TV> | ||||
|   <Mode>1</Mode> | ||||
|   <Assemblies /> | ||||
| </File> | ||||
							
								
								
									
										647
									
								
								Misc/Register Az App/regApp.psf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										647
									
								
								Misc/Register Az App/regApp.psf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,647 @@ | ||||
| <File version="3.2"> | ||||
|   <FileID>27bdac5f-55ae-4908-a755-ee5f598a9689</FileID> | ||||
|   <Preview>iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAAAXNSR0IArs4c6QAAAARnQU1BAACx | ||||
| jwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAADyMSURBVHhe7d0HbFx3guf5vtnZwyywt3sH3B2w | ||||
| ONwdcJjZnZvF3s4udnu6Z7p7OkyP293OoZ1tWVYOVrACrZxzlm3JkmzlLEoUlSiSoiTmnHMx50xW | ||||
| YDHzd3iPTzL1KLclSyqaet8P8IVSFYum1P3/sapY/NGPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA | ||||
| AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA | ||||
| AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA | ||||
| AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA | ||||
| AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA | ||||
| AAAAAAAAAAAAAAAAAIeI/NGPfuT6H//lv3T94uc/c02ePMU1ZcpU1xTjRyIiIvphN2Wqa+rUqa7X | ||||
| Xn3V9a/+1V+4/uzP/sz1ox/9qMh+2I/w53/+5zV/9Vd/qfHjP9L+g8eUmlOi4soWFZY3ERER0Q+8 | ||||
| oopmFZY3KPxmrObNm6+//du/1V/8xV/Ift6P8C/+xZ+5xo8fr8joFCUX1utmRpluppfoZnopERER | ||||
| /eArUVR6qeLzapSeX6Fly5br3/7bfzNgP+9H+Nk//INrz77DSilu0M20Et1KJyIiorFWVJpLiQV1 | ||||
| irydrJdfeum7B8DkyZNdqbllis4q1+2MUiIiIhqj3Uhzqazeo/XrN373AJg+fbqror5DtzPLdTuz | ||||
| jIiIiMZoxkMBFU2dWrt23XcPgKlTprrKatsUk1WhmKxyIiKigBabXaG4nCeT8bbN28l8um7L/jG8 | ||||
| 062MMlU0+rRmzdoHGwDltW2Kzak031kiIqJAFZdTad51fT2h4Il0I6XYvI07txWV6hpxmceV8Tj8 | ||||
| ndsyikwuGnGZx1F4YoGiM8vuua07GffmVzZ1avVjGQA5lYrLrX6wcqpGXp+IiOg+xedWmQf0sfPR | ||||
| 2n88XPtPROjAY2z/8Qh9feqGLt3MUmJ+ta7F5urgmajHfzsnIs33/3DwLYUnFCo+r0oXItL01anI | ||||
| x35bRsZtnQyNMweH8TEc/jF9+AFQ16643CpzTdyT8XtZZYpJylR0UoZZjPFjSqFup5Todkqxbqe4 | ||||
| dDu1RDGpLsWk5d//7RAREdlKLqrTqSuJOhESo/SiGiXnVyk5v/KxlVpYrajEPO09Gq6UojodOHlD | ||||
| V29lKq2wesRljVLyq5RSUP3tfev7V2W+/8HXknTkQowS8qq058g1xWa4zOuNvHylUgqG3Zb5du+9 | ||||
| 7W/7WBiXNd7/g6dvKORGhpILa+/5mEZnVQwNgNUPMQDi86rNJXFPeTWKTcvX7Zh488fY1DzdTspX | ||||
| wuWVyjj7W6Wfe0nJp19Q3LHf6+aRl3U7+pbi8+vveRsJeTVKLKgdKr9GCfbbICIiR2YcyicvJej8 | ||||
| tSTzbIhIKlJkSvFjy3hGfGxGib48Fm6ODWMA3Egs0K2M0hGXNS+f6tLV2FxdickZWWyubqS4zHss | ||||
| 7NeLSClWbFa5rtzM0OHz0eZ5uu9YuBJzK0Zc1rydFJcikovuvm3j17fShh4GuRKTrWtxeYpKcSky | ||||
| edj1rJ+HJxUpOb9axy9E60JkujkAhn9MY7IrVdXsf/ABUFHXrgTjcM6rvrf8WsWlFygmOVNJxc1K | ||||
| LGpSTHajks++KU/aBPVVf60e1wZ1583R7b3/XjduhCmxoHHY9asVl+XSzaRc3UjM1o3kQsXmVCvR | ||||
| fjtEROS4Uovrdepyos6HJSupoEZRaY/3RehuZZYpNqNU+45HmLf11akocwDEZFeMuOztrArtOnBW | ||||
| Cxdv1KJlm7Vo2ZZhbVbQko3atueE+SQ7o+HXHXoRnipduZVp3gNgfLJr3GZSbqVuprnM19i5k/F8 | ||||
| h7D4PK3fdkBLV25T0JJN2rjziI5dvK2FS7dowaL1WrFmp/afuGIe5lGpd67rMn9uPIchpaBGx0Ni | ||||
| zHsAUorq7/mYxuZUqaq568EGgPEawhV1HXc/Qx9eUkGd4jMKFZ2apfiyJiWUNSkmr0Gxp96XN2eh | ||||
| 1HxCqlgjFX2kqzv/WpE3wpVU1GRdv04prkqFXb2ow4dP62RwiE5fvq2ozBpzsQy/V+Cb7vPru5e5 | ||||
| 3+WJiGisluZq1OmrSboQlqzUwlrdzihXdObI7M90v6f7XP5O5vMMMsvMx+jTXA366vRN3UwqND9T | ||||
| vvftVyg6s0ILFm9SdVWNNDgou5bmFi1cssm8B2Do8t9c33jcPSm/RtduZeloSKySCmrN2zTuxr+V | ||||
| PjQYzB/TyxSbXamQG2maF7ROFeWV6u/r0/ZdBzRx+mLFxSVrcHBAp05d0IqNe5VQUGte57ZRhlGp | ||||
| eU9BqnHPSUisQqIylVrccM/H1Lj3obrlgQfAFFdlfYf5MsDJBXX3lFLYoMTCGsXs26Fb419R2PiX | ||||
| dX3TZkWemay2uBelkqlS5jNS0l8reP2/U/iNG0p1tVjXb1BaaYXCLl3S+cg8pZZ1KMPVqJTCOqUU | ||||
| NZjv9N0fzd+rN3+eWlSvlMJvfn7396zLGivOGBD295WIiMZWGaXNOnM1WReuJ5uHWnSG9SV0w4rL | ||||
| rlJ8TrX54/2Kz61WrPFl7LbrDV23QvFZZeZd/xklTTp45pZuJRcpMbdGsZmVd4vLqjJ/DFq6RT6f | ||||
| TyWlFdp34LgOHTlj/piXV6SB/gF9umyLedf8ncvfKSbTeGy+zhwAx0LizDPMGACpBdXmsDAel/9m | ||||
| bBhPuK/Urq+C9emSjaquqZPP16nk5AxzaFy5ekOzF67XpdsZ5mfzxvVjjKwv1Tc+Rumuep28GKvQ | ||||
| qGylu5ru+ZganyjXtHQ/xABocCvV1WgersMz1llSZasiZ7wr1x9/pfz3X1bwS88r9PhklZ//P9QV | ||||
| +x/ki/if1Rn2P+jYkn+t8BtRSi9tta7fqIzyKl2/clnB11IVl1elxLwqpRhvMz1VwcEXdfL0WZ2/ | ||||
| ka2kkibFJafq4vkrCr4SrYikVF29dlOhYRE6dTZU1+LzFRZ2RcdPB+vCzXylFDcqzfa+EhHR2Cqr | ||||
| okVnw1IUEp6iDFeDYoyDNfubEgvqFXw9ScvW7FbQki1atGL7PS1cslmbPzuqm6mlSsirvee6RsY4 | ||||
| SMiu0IFTUcoqb9bBs7fNJ68b927HGaPCKj63RnE5Nebba25q0pEjZ/Th9GXae+yqJs9eo92ffS2v | ||||
| 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 | ||||
| 6/DRKNV0eOTzedVSnasrR08rr65UF7Yt0kcffqhx48Zp3KLPlVzWph7zqxFG/jeNtRgAAJyEAfCD | ||||
| yquewV75vcYLALWrw+NTn/UCQYM9nfJ6/err65ano13t7k7z5z6vV10D3/yFDvb1qKenR91+j9rb | ||||
| 3fIbL+5jfOlgn/GnvfIa17Vuz3zxH3+PBszbGFRft998USC3t0t9fV3yWJcxvlSxp69XvhEvWNSv | ||||
| Th4CAIAxiQEwihkf9M7OTnV2+ughc5v3Yoz8mD5KDAAATsIAGKWMD7jxgc/NK6CHKbdAhUUutba2 | ||||
| PvYRwAAA4CQMgFHK7+9UUnK6bt6KU3ZOPj1gWdn5uhp2Q5WV1fJ6H8PLJA+LAQDASRgAo5S/0xgA | ||||
| aaqtq7f/neA7JKdmqKyskgEAAI+AATBK3RkAFZXV9r8TfIfE5DSVlzMAAOBRMABGKQbA98cAAIBH | ||||
| xwAYpR7HAPDXp+vs+TT57X/wlGMAAMCjYwCMUiMGwGCXaitKVVrRcPdA7/M1qaysTI3eXvPXxhMH | ||||
| vS11Ki2tVLOvT5W3d+rF19Yqp6Pb/PPO1mqVllXKbX2x/kBPq8pLy9XYcef7+vWosapUZTUtGvbS | ||||
| AXe11JeptLRK7UM3J/V5VF1Wqkrjb824dk+X2lobVVXXIG9Plxqq69TWZb7AQEAxAADg0TEARqk7 | ||||
| A6CytlHq7lDU7ml64Znn9fwv39GSL26pqiZe+xb9k5559hn9YfF2Zbdkaev0aZo0fpye//0/6e25 | ||||
| X2r7/Nf1//zlT7XmYrm8lSe1dNLP9fxvf6N395xSbUerIlbN0Ktvv6hXXtqs5NIGFV2ZrTdf/oOe | ||||
| fe41rUsoUN/dFdCrktANev/F3+r5P7ysj+YdVklVmSL3vKE//P55/er9j3WlrkAhWxbp9Xcn6KU3 | ||||
| n9eHizZp5rhx+mBNsFq6ze9lHDAMAAB4dAyAUerOAKhvalFDUb5mvD9fha2SGot1ec8R7Vo/T0t3 | ||||
| nFB3f5eObg3Sot1faul707QtslYazNe2j4O047Otmrv8orrVooMLxmnblUyps0Cfzp+vLy5f0epn | ||||
| X9LCk1/p+I4LCrt8QvOnTVVsq9SXvV/PT9uhcs/QAuhriden77ynK1nGZ/oduvX5MR36cr1mzV6m | ||||
| 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</Preview> | ||||
|   <Form>7gF61QJ5XRkAACODCAAAAAAABADVmGlvqkwUgL836X8gfq2paMElURNwqxYXwKW9XxqWEag4Y1ncfv07A/bV | ||||
| VqrjzfWmt01wgDmc5TnnzEC5r78BI/CrtzcMU45PmGCzAJWUuvEDML+fONBEK/++ibx5fEwzSbfS | ||||
| zBh4voNghbtnyX+aqYVuEHqgAkEYeJqbZgah7jrGE9gM0QzAil4oaLzB57OlBw6wxVKKgdoca57i | ||||
| 52VTjGE7runheakagoGHXD8VmYkNHXhoAbxgsxMQwgCphuaCujMHkBiBp+bTTPahnPmYek60i0yQ | ||||
| qjaxprMyNdcBMFCdLRbI5/g081DMnxXq4WOqGrl2dq4aaF4wQL4TYFdS1RrWBjzV8ACAZ2WHYB0Q | ||||
| P7z58dTGEj9pN09Cmrmz55WMy5no7sfU86kgaTpwr54LLtEyBFCDwUiRTiXFN2wjSkMvBEfhOBaQ | ||||
| kKHFIc9jqsUchUiM9bOVFGK75EnO0QSomt6GJlinqjmWZnqUA7E9TJJB5UzM96fRFhYLElBJd/8q | ||||
| 6YcCNem9hdSU+cLFlLMlasrYIIZY9AcYkweKaH11yh7wsaSPVV1GeQ8tW+LSDE8T0y7W5LgOpE+N | ||||
| mPPeRmrOHJtLM7kSFbo96eI/BC6IOsqr/vvgSLWV6Kttr5CaQpbFDtJ1yT0EGovicjOws8hH9wZK | ||||
| WF9/LDgt7lqXkxORZ+KtR7BxcWh7CF7eW6mqNKZ9YOVluC/trse7te9wdzevaogvv2Lb/gBvMQwC | ||||
| BK+O2wfQ/N0KLUbxpIdGdFHTKuCEyF0Ii6eG1epTTB35YOz4oeZGSS1qxqyGXOR9vzwcbprxzt+Y | ||||
| xT6/RuMvu+aLE6ILYKgGnrO4ek7gF6PQJ5qGNsDcLsqO9lyzAHlLcqAVg8zRNtk29ungyXgCuXKy | ||||
| JyLkRiEhsSGTrxeaA7OwYQqYAhwQA3ysdiRQR9akmMyhNxlybe/9Jd0RW0wTwbjMPuOjEBtopolx | ||||
| 4e0nJoU14SNNmdpoRTwibg+dhU+9azp4G84db2lOFjhHXeD/ByHhFfqw9D6fUCzDfy/lTufWdx8p | ||||
| XMeC2HkcAsWx7PNfKOr4tI5W8Ev1/dDaO6o8U/NmJwvva9n9I365BB69Y2cxR335AK/oQM3bVJ2x | ||||
| 2FdW7FPLQgL+66kjuzGy8Egkp4JcE17I77SYKdlkILZMcThqCILUGtQya1uUyVV3pTbd7e0NHvaX | ||||
| +FD3VqKrrzcquSvarDK22VGuNDcfTduYjwSj1VzoUA71+Zht1+Wwq3LZXw3zJdL8NO4ojebo9qbf | ||||
| uAtmM79vvQmyLM2fDU3rFEc8O5NYXd5aUuAoXIef1rx33W4XuZHebEMwWXPLJ4Xthqbh+hL30u7N | ||||
| tKKjY9umUmuob+Rhd1RqyGKwfQ8HARItQZJ5Eci9gmX8avTad8+rZjY/4Y07YaIuVU7s9IJt+0WC | ||||
| fV+cKsvHZ7mHlNub8WCOBL8dTiR1Cnm7+PacX2n97rOqhLzaayj6S34rraTtu/TkzcDW0nPAKRWX | ||||
| raU6kVd26JjDocwNzMd37DGJm9hRRnzDm3Usy6pUypkdHkq4uzegxEZx/gti1I4fyAvpcXs9aq5x | ||||
| s999NUpYX35+P03uGCcjmyhCGdgsm8WRPV5Qk5etOtZ0+mPsbl+ZaNLxRvPn4/im0Z3kkSxzFSBS | ||||
| 8iKaQCTZqJNIPoZ+9T9wSmBFXRkAAA==</Form> | ||||
|   <Code><![CDATA[ | ||||
| $form1_Load={ | ||||
| 	#TODO: Initialize Form Controls here | ||||
| 	 | ||||
| 	Set-ControlTheme $form1 -Theme Dark | ||||
| } | ||||
|  | ||||
| $darkToolStripMenuItem_Click={ | ||||
| 	#TODO: Place custom script here | ||||
| 	Set-ControlTheme -Control $form1 -Theme Dark | ||||
| } | ||||
|  | ||||
| $lightToolStripMenuItem_Click={ | ||||
| 	Set-ControlTheme -Control $form1 -Theme Light | ||||
| } | ||||
|  | ||||
| #region Control Theme Helper Function | ||||
| <# | ||||
| 	.SYNOPSIS | ||||
| 		Applies a theme to the control and its children. | ||||
| 	 | ||||
| 	.PARAMETER Control | ||||
| 		The control to theme. Usually the form itself. | ||||
| 	 | ||||
| 	.PARAMETER Theme | ||||
| 		The color theme: | ||||
| 		Light | ||||
| 		Dark | ||||
|  | ||||
| 	.PARAMETER CustomColor | ||||
| 		A hashtable that contains the color values. | ||||
| 		Keys: | ||||
| 		WindowColor | ||||
| 		ContainerColor | ||||
| 		BackColor | ||||
| 		ForeColor | ||||
| 		BorderColor | ||||
| 		SelectionForeColor | ||||
| 		SelectionBackColor | ||||
| 		MenuSelectionColor | ||||
| 	.EXAMPLE | ||||
| 		PS C:\> Set-ControlTheme -Control $form1 -Theme Dark | ||||
| 	 | ||||
| 	.EXAMPLE | ||||
| 		PS C:\> Set-ControlTheme -Control $form1 -CustomColor @{ WindowColor = 'White'; ContainerBackColor = 'Gray'; BackColor... } | ||||
| 	.NOTES | ||||
| 		Created by SAPIEN Technologies, Inc. | ||||
| #> | ||||
| function Set-ControlTheme | ||||
| { | ||||
| 	[CmdletBinding()] | ||||
| 	param | ||||
| 	( | ||||
| 		[Parameter(Mandatory = $true)] | ||||
| 		[ValidateNotNull()] | ||||
| 		[System.ComponentModel.Component]$Control, | ||||
| 		[ValidateSet('Light', 'Dark')] | ||||
| 		[string]$Theme = 'Dark', | ||||
| 		[System.Collections.Hashtable]$CustomColor | ||||
| 	) | ||||
| 	 | ||||
| 	$Font = [System.Drawing.Font]::New('Segoe UI', 9) | ||||
| 	 | ||||
| 	#Initialize the colors | ||||
| 	if ($Theme -eq 'Dark') | ||||
| 	{ | ||||
| 		$WindowColor = [System.Drawing.Color]::FromArgb(32, 32, 32) | ||||
| 		$ContainerColor = [System.Drawing.Color]::FromArgb(45, 45, 45) | ||||
| 		$BackColor = [System.Drawing.Color]::FromArgb(32, 32, 32) | ||||
| 		$ForeColor = [System.Drawing.Color]::White | ||||
| 		$BorderColor = [System.Drawing.Color]::DimGray | ||||
| 		$SelectionBackColor = [System.Drawing.SystemColors]::Highlight | ||||
| 		$SelectionForeColor = [System.Drawing.Color]::White | ||||
| 		$MenuSelectionColor = [System.Drawing.Color]::DimGray | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		$WindowColor = [System.Drawing.Color]::White | ||||
| 		$ContainerColor = [System.Drawing.Color]::WhiteSmoke | ||||
| 		$BackColor = [System.Drawing.Color]::Gainsboro | ||||
| 		$ForeColor = [System.Drawing.Color]::Black | ||||
| 		$BorderColor = [System.Drawing.Color]::DimGray | ||||
| 		$SelectionBackColor = [System.Drawing.SystemColors]::Highlight | ||||
| 		$SelectionForeColor = [System.Drawing.Color]::White | ||||
| 		$MenuSelectionColor = [System.Drawing.Color]::LightSteelBlue | ||||
| 	} | ||||
| 	 | ||||
| 	if ($CustomColor) | ||||
| 	{ | ||||
| 		#Check and Validate the custom colors: | ||||
| 		$Color = $CustomColor.WindowColor -as [System.Drawing.Color] | ||||
| 		if ($Color) { $WindowColor = $Color } | ||||
| 		$Color = $CustomColor.ContainerColor -as [System.Drawing.Color] | ||||
| 		if ($Color) { $ContainerColor = $Color } | ||||
| 		$Color = $CustomColor.BackColor -as [System.Drawing.Color] | ||||
| 		if ($Color) { $BackColor = $Color } | ||||
| 		$Color = $CustomColor.ForeColor -as [System.Drawing.Color] | ||||
| 		if ($Color) { $ForeColor = $Color } | ||||
| 		$Color = $CustomColor.BorderColor -as [System.Drawing.Color] | ||||
| 		if ($Color) { $BorderColor = $Color } | ||||
| 		$Color = $CustomColor.SelectionBackColor -as [System.Drawing.Color] | ||||
| 		if ($Color) { $SelectionBackColor = $Color } | ||||
| 		$Color = $CustomColor.SelectionForeColor -as [System.Drawing.Color] | ||||
| 		if ($Color) { $SelectionForeColor = $Color } | ||||
| 		$Color = $CustomColor.MenuSelectionColor -as [System.Drawing.Color] | ||||
| 		if ($Color) { $MenuSelectionColor = $Color } | ||||
| 	} | ||||
| 	 | ||||
| 	#Define the custom renderer for the menus | ||||
| 	#region Add-Type definition | ||||
| 	try | ||||
| 	{ | ||||
| 		[SAPIENTypes.SAPIENColorTable] | Out-Null | ||||
| 	} | ||||
| 	catch | ||||
| 	{ | ||||
| 		if ($PSVersionTable.PSVersion.Major -ge 7) | ||||
| 		{ | ||||
| 			$Assemblies = 'System.Windows.Forms', 'System.Drawing', 'System.Drawing.Primitives' | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			$Assemblies = 'System.Windows.Forms', 'System.Drawing' | ||||
| 		} | ||||
| 		Add-Type -ReferencedAssemblies $Assemblies -TypeDefinition " | ||||
| using System; | ||||
| using System.Windows.Forms; | ||||
| using System.Drawing; | ||||
| namespace SAPIENTypes | ||||
| { | ||||
|     public class SAPIENColorTable : ProfessionalColorTable | ||||
|     { | ||||
|         Color ContainerBackColor; | ||||
|         Color BackColor; | ||||
|         Color BorderColor; | ||||
| 		Color SelectBackColor; | ||||
|  | ||||
|         public SAPIENColorTable(Color containerColor, Color backColor, Color borderColor, Color selectBackColor) | ||||
|         { | ||||
|             ContainerBackColor = containerColor; | ||||
|             BackColor = backColor; | ||||
|             BorderColor = borderColor; | ||||
| 			SelectBackColor = selectBackColor; | ||||
|         }  | ||||
| 		public override Color MenuStripGradientBegin { get { return ContainerBackColor; } } | ||||
|         public override Color MenuStripGradientEnd { get { return ContainerBackColor; } } | ||||
|         public override Color ToolStripBorder { get { return BorderColor; } } | ||||
|         public override Color MenuItemBorder { get { return SelectBackColor; } } | ||||
|         public override Color MenuItemSelected { get { return SelectBackColor; } } | ||||
|         public override Color SeparatorDark { get { return BorderColor; } } | ||||
|         public override Color ToolStripDropDownBackground { get { return BackColor; } } | ||||
|         public override Color MenuBorder { get { return BorderColor; } } | ||||
|         public override Color MenuItemSelectedGradientBegin { get { return SelectBackColor; } } | ||||
|         public override Color MenuItemSelectedGradientEnd { get { return SelectBackColor; } }       | ||||
|         public override Color MenuItemPressedGradientBegin { get { return ContainerBackColor; } } | ||||
|         public override Color MenuItemPressedGradientEnd { get { return ContainerBackColor; } } | ||||
|         public override Color MenuItemPressedGradientMiddle { get { return ContainerBackColor; } } | ||||
|         public override Color ImageMarginGradientBegin { get { return BackColor; } } | ||||
|         public override Color ImageMarginGradientEnd { get { return BackColor; } } | ||||
|         public override Color ImageMarginGradientMiddle { get { return BackColor; } } | ||||
|     } | ||||
| }" | ||||
| 	} | ||||
| 	#endregion | ||||
| 	 | ||||
| 	$colorTable = New-Object SAPIENTypes.SAPIENColorTable -ArgumentList $ContainerColor, $BackColor, $BorderColor, $MenuSelectionColor | ||||
| 	$render = New-Object System.Windows.Forms.ToolStripProfessionalRenderer -ArgumentList $colorTable | ||||
| 	[System.Windows.Forms.ToolStripManager]::Renderer = $render | ||||
| 	 | ||||
| 	#Set up our processing queue | ||||
| 	$Queue = New-Object System.Collections.Generic.Queue[System.ComponentModel.Component] | ||||
| 	$Queue.Enqueue($Control) | ||||
| 	 | ||||
| 	Add-Type -AssemblyName System.Core | ||||
| 	 | ||||
| 	#Only process the controls once. | ||||
| 	$Processed = New-Object System.Collections.Generic.HashSet[System.ComponentModel.Component] | ||||
| 	 | ||||
| 	#Apply the colors to the controls | ||||
| 	while ($Queue.Count -gt 0) | ||||
| 	{ | ||||
| 		$target = $Queue.Dequeue() | ||||
| 		 | ||||
| 		#Skip controls we already processed | ||||
| 		if ($Processed.Contains($target)) { continue } | ||||
| 		$Processed.Add($target) | ||||
| 		 | ||||
| 		#Set the text color | ||||
| 		$target.ForeColor = $ForeColor | ||||
| 		 | ||||
| 		#region Handle Controls | ||||
| 		if ($target -is [System.Windows.Forms.Form]) | ||||
| 		{ | ||||
| 			#Set Font | ||||
| 			$target.Font = $Font | ||||
| 			$target.BackColor = $ContainerColor | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.SplitContainer]) | ||||
| 		{ | ||||
| 			$target.BackColor = $BorderColor | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.PropertyGrid]) | ||||
| 		{ | ||||
| 			$target.BackColor = $BorderColor | ||||
| 			$target.ViewBackColor = $BackColor | ||||
| 			$target.ViewForeColor = $ForeColor | ||||
| 			$target.ViewBorderColor = $BorderColor | ||||
| 			$target.CategoryForeColor = $ForeColor | ||||
| 			$target.CategorySplitterColor = $ContainerColor | ||||
| 			$target.HelpBackColor = $BackColor | ||||
| 			$target.HelpForeColor = $ForeColor | ||||
| 			$target.HelpBorderColor = $BorderColor | ||||
| 			$target.CommandsBackColor = $BackColor | ||||
| 			$target.CommandsBorderColor = $BorderColor | ||||
| 			$target.CommandsForeColor = $ForeColor | ||||
| 			$target.LineColor = $ContainerColor | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.ContainerControl] -or | ||||
| 			$target -is [System.Windows.Forms.Panel]) | ||||
| 		{ | ||||
| 			#Set the BackColor for the container | ||||
| 			$target.BackColor = $ContainerColor | ||||
| 			 | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.GroupBox]) | ||||
| 		{ | ||||
| 			$target.FlatStyle = 'Flat' | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.Button]) | ||||
| 		{ | ||||
| 			$target.FlatStyle = 'Flat' | ||||
| 			$target.FlatAppearance.BorderColor = $BorderColor | ||||
| 			$target.BackColor = $BackColor | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.CheckBox] -or | ||||
| 			$target -is [System.Windows.Forms.RadioButton] -or | ||||
| 			$target -is [System.Windows.Forms.Label]) | ||||
| 		{ | ||||
| 			#$target.FlatStyle = 'Flat' | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.ComboBox]) | ||||
| 		{ | ||||
| 			$target.BackColor = $BackColor | ||||
| 			$target.FlatStyle = 'Flat' | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.TextBox]) | ||||
| 		{ | ||||
| 			$target.BorderStyle = 'FixedSingle' | ||||
| 			$target.BackColor = $BackColor | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.DataGridView]) | ||||
| 		{ | ||||
| 			$target.GridColor = $BorderColor | ||||
| 			$target.BackgroundColor = $ContainerColor | ||||
| 			$target.DefaultCellStyle.BackColor = $WindowColor | ||||
| 			$target.DefaultCellStyle.SelectionBackColor = $SelectionBackColor | ||||
| 			$target.DefaultCellStyle.SelectionForeColor = $SelectionForeColor | ||||
| 			$target.ColumnHeadersDefaultCellStyle.BackColor = $ContainerColor | ||||
| 			$target.ColumnHeadersDefaultCellStyle.ForeColor = $ForeColor | ||||
| 			$target.EnableHeadersVisualStyles = $false | ||||
| 			$target.ColumnHeadersBorderStyle = 'Single' | ||||
| 			$target.RowHeadersBorderStyle = 'Single' | ||||
| 			$target.RowHeadersDefaultCellStyle.BackColor = $ContainerColor | ||||
| 			$target.RowHeadersDefaultCellStyle.ForeColor = $ForeColor | ||||
| 			 | ||||
| 		} | ||||
| 		elseif ($PSVersionTable.PSVersion.Major -le 5 -and $target -is [System.Windows.Forms.DataGrid]) | ||||
| 		{ | ||||
| 			$target.CaptionBackColor = $WindowColor | ||||
| 			$target.CaptionForeColor = $ForeColor | ||||
| 			$target.BackgroundColor = $ContainerColor | ||||
| 			$target.BackColor = $WindowColor | ||||
| 			$target.ForeColor = $ForeColor | ||||
| 			$target.HeaderBackColor = $ContainerColor | ||||
| 			$target.HeaderForeColor = $ForeColor | ||||
| 			$target.FlatMode = $true | ||||
| 			$target.BorderStyle = 'FixedSingle' | ||||
| 			$target.GridLineColor = $BorderColor | ||||
| 			$target.AlternatingBackColor = $ContainerColor | ||||
| 			$target.SelectionBackColor = $SelectionBackColor | ||||
| 			$target.SelectionForeColor = $SelectionForeColor | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.ToolStrip]) | ||||
| 		{ | ||||
| 			 | ||||
| 			$target.BackColor = $BackColor | ||||
| 			$target.Renderer = $render | ||||
| 			 | ||||
| 			foreach ($item in $target.Items) | ||||
| 			{ | ||||
| 				$Queue.Enqueue($item) | ||||
| 			} | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.ToolStripMenuItem] -or | ||||
| 			$target -is [System.Windows.Forms.ToolStripDropDown] -or | ||||
| 			$target -is [System.Windows.Forms.ToolStripDropDownItem]) | ||||
| 		{ | ||||
| 			$target.BackColor = $BackColor | ||||
| 			foreach ($item in $target.DropDownItems) | ||||
| 			{ | ||||
| 				$Queue.Enqueue($item) | ||||
| 			} | ||||
| 		} | ||||
| 		elseif ($target -is [System.Windows.Forms.ListBox] -or | ||||
| 			$target -is [System.Windows.Forms.ListView] -or | ||||
| 			$target -is [System.Windows.Forms.TreeView]) | ||||
| 		{ | ||||
| 			$target.BackColor = $WindowColor | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			$target.BackColor = $BackColor | ||||
| 		} | ||||
| 		#endregion | ||||
| 		 | ||||
| 		if ($target -is [System.Windows.Forms.Control]) | ||||
| 		{ | ||||
| 			#Queue all the child controls | ||||
| 			foreach ($child in $target.Controls) | ||||
| 			{ | ||||
| 				$Queue.Enqueue($child) | ||||
| 			} | ||||
| 			if ($target.ContextMenuStrip) | ||||
| 			{ | ||||
| 				$Queue.Enqueue($target.ContextMenuStrip); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| #endregion | ||||
|  | ||||
|  | ||||
| $send_Click={ | ||||
| 	 | ||||
| 	$regJob = Start-Job -Name regJob -ScriptBlock {Register-PnPEntraIDAppForInteractiveLogin -ApplicationName "$appName_box" -Tenant $tenant_box -Interactive} | ||||
| 	while ($getRegJob[-1].State =$false) | ||||
| 	{ | ||||
| 		$getRegJob = Get-Job -Name regJob | ||||
| 	} | ||||
| 	$resultsBox.Text = Receive-Job -Job $regJob | ||||
| 	 | ||||
| } | ||||
|  | ||||
| ]]></Code> | ||||
|   <TV>0</TV> | ||||
|   <Mode>1</Mode> | ||||
|   <Assemblies /> | ||||
| </File> | ||||
							
								
								
									
										
											BIN
										
									
								
								Misc/Register Az App/regApp.psf.psbuild
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Misc/Register Az App/regApp.psf.psbuild
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										14
									
								
								Misc/SendLogs.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								Misc/SendLogs.ps1
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| #Connexion au Sharepoint (necessaire pour l'utilisation de l'API graph) | ||||
| Connect-PnPOnline -url https://site.sharepoint.com -interactive | ||||
|  | ||||
| #On precise les parametres basiques, on peut envoyer de n'importe quelle adresse mail du moment qu'elle fait partie du tenant. | ||||
| $EmailParams = @{ | ||||
|     From = "mail" | ||||
|     To = "mail" | ||||
|     Subject = "Script envoi de mails" #Titre du mail | ||||
|     BodyContentType = "HTML" #Type de contenu du mail | ||||
|     Body = "Test" #Contenu du corps du mail, on peut mettre ce qu'on veut | ||||
|     Attachments = "logsTest.log" #On peut attacher n'importe quel fichier | ||||
| } | ||||
|  | ||||
| Send-PnPMail @EmailParams #On envoie | ||||
							
								
								
									
										11
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								README.md
									
									
									
									
									
								
							| @@ -14,9 +14,10 @@ I added lots of comments and READMEs for all of them, the creation of a wiki und | ||||
|  | ||||
| ## Categories | ||||
|  | ||||
| - [Active Directory](https://git.kawawete.xyz/kawa/ps-scripts/AD) | ||||
| - [Anti Bloatware](https://git.kawawete.xyz/kawa/ps-scripts/Anti-Bloat) | ||||
| - [Intune](https://git.kawawete.xyz/kawa/ps-scripts/Intune) | ||||
| - [Windows](https://git.kawawete.xyz/kawa/ps-scripts/Windows) | ||||
| - [Sharepoint](https://git.kawawete.xyz/kawa/ps-scripts/Sharepoint) | ||||
| - [Active Directory](https://git.azuze.fr/kawa/ps-scripts/src/branch/main/AD) | ||||
| - [Anti Bloatware](https://git.azuze.fr/kawa/ps-scripts/src/branch/main/Anti-Bloat) | ||||
| - [Intune](https://git.azuze.fr/kawa/ps-scripts/src/branch/main/Intune) | ||||
| - [Windows](https://git.azuze.fr/kawa/ps-scripts/src/branch/main/Windows) | ||||
| - [Sharepoint](https://git.azuze.fr/kawa/ps-scripts/src/branch/main/Sharepoint) | ||||
| - [Misc](https://git.azuze.fr/kawa/ps-scripts/src/branch/main/Misc) | ||||
|  | ||||
|   | ||||
							
								
								
									
										64
									
								
								Sharepoint/SP-empty.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								Sharepoint/SP-empty.ps1
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,64 @@ | ||||
| #Config Parameters | ||||
| $SiteURL = Read-Host -Prompt "Entrez l'adresse du site Sharepoint" | ||||
| $VersionsToKeep = 5 | ||||
|   | ||||
| Try {  | ||||
|     #Connect to PnP Online | ||||
|     Connect-PnPOnline -Url $SiteURL -Interactive | ||||
|   | ||||
|     #Get the Context | ||||
|     $Ctx= Get-PnPContext | ||||
|   | ||||
|     #Exclude certain libraries | ||||
|     $ExcludedLists = @("Form Templates", "Preservation Hold Library","Site Assets", "Pages", "Site Pages", "Images", | ||||
|                             "Site Collection Documents", "Site Collection Images","Style Library") | ||||
|   | ||||
|     #Get All document libraries | ||||
|     $DocumentLibraries = Get-PnPList | Where-Object {$_.BaseType -eq "DocumentLibrary" -and $_.Title -notin $ExcludedLists -and $_.Hidden -eq $false} | ||||
|   | ||||
|     #Iterate through each document library | ||||
|     ForEach($Library in $DocumentLibraries) | ||||
|     { | ||||
|         Write-host "Processing Document Library:"$Library.Title -f Magenta | ||||
|   | ||||
|         #Get All Items from the List - Exclude 'Folder' List Items | ||||
|         $ListItems = Get-PnPListItem -List $Library -PageSize 2000 | Where {$_.FileSystemObjectType -eq "File"} | ||||
|   | ||||
|         #Loop through each file | ||||
|         ForEach ($Item in $ListItems) | ||||
|         { | ||||
|             #Get File Versions | ||||
|             $File = $Item.File | ||||
|             $Versions = $File.Versions | ||||
|             $Ctx.Load($File) | ||||
|             $Ctx.Load($Versions) | ||||
|             $Ctx.ExecuteQuery() | ||||
|    | ||||
|             Write-host -f Yellow "`tScanning File:"$File.Name | ||||
|             $VersionsCount = $Versions.Count | ||||
|             $VersionsToDelete = $VersionsCount - $VersionsToKeep | ||||
|             If($VersionsToDelete -gt 0) | ||||
|             { | ||||
|                 write-host -f Cyan "`t Total Number of Versions of the File:" $VersionsCount | ||||
|                 $VersionCounter= 0 | ||||
|                 #Delete versions | ||||
|                 For($i=0; $i -lt $VersionsToDelete; $i++) | ||||
|                 { | ||||
|                     If($Versions[$VersionCounter].IsCurrentVersion) | ||||
|                     { | ||||
|                        $VersionCounter++ | ||||
|                        Write-host -f Magenta "`t`t Retaining Current Major Version:"$Versions[$VersionCounter].VersionLabel | ||||
|                        Continue | ||||
|                     } | ||||
|                     Write-host -f Cyan "`t Deleting Version:" $Versions[$VersionCounter].VersionLabel | ||||
|                     $Versions[$VersionCounter].DeleteObject() | ||||
|                 } | ||||
|                 $Ctx.ExecuteQuery() | ||||
|                 Write-Host -f Green "`t Version History is cleaned for the File:"$File.Name | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| Catch { | ||||
|     write-host -f Red "Error Cleaning up Version History!" $_.Exception.Message | ||||
| } | ||||
							
								
								
									
										322
									
								
								Sharepoint/Sharepoint_Export_v3.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										322
									
								
								Sharepoint/Sharepoint_Export_v3.ps1
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,322 @@ | ||||
|  | ||||
| if($args[0] -eq $null) | ||||
| { | ||||
| 	$spUrl = Read-Host "Adresse du SharePoint du client (ex: https//client.sharepoint.com) " | ||||
| 	$spSite = Read-Host "Nom du site (ce qu'il y a apres '/sites/' dans l'URL du site en question) " | ||||
|     $pnpCiD = Read-Host "Votre Client ID (ex: fa7800b5-0298-4205-a369-ffb976de3058) " | ||||
|  | ||||
| } | ||||
| else | ||||
| { | ||||
| 	$spUrl=$args[0] | ||||
| 	$spSite=$args[1] | ||||
|     $pnpCiD=$args[2] | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| #Function to Get Permissions Applied on a particular Object, such as: Web, List, Folder or List Item | ||||
| Function Get-PnPPermissions([Microsoft.SharePoint.Client.SecurableObject]$Object) | ||||
| { | ||||
|     #Determine the type of the object | ||||
|     Switch($Object.TypedObject.ToString()) | ||||
|     { | ||||
|         "Microsoft.SharePoint.Client.Web"  { $ObjectType = "Site" ; $ObjectURL = $Object.URL; $ObjectTitle = $Object.Title } | ||||
|         "Microsoft.SharePoint.Client.ListItem" | ||||
|         {  | ||||
|             If($Object.FileSystemObjectType -eq "Folder") | ||||
|             { | ||||
|                 $ObjectType = "Folder" | ||||
|                 #Get the URL of the Folder  | ||||
|                 $Folder = Get-PnPProperty -ClientObject $Object -Property Folder | ||||
|                 $ObjectTitle = $Object.Folder.Name | ||||
|                 $ObjectURL = $("{0}{1}" -f $Web.Url.Replace($Web.ServerRelativeUrl,''),$Object.Folder.ServerRelativeUrl) | ||||
|             } | ||||
|             Else #File or List Item | ||||
|             { | ||||
|                 #Get the URL of the Object | ||||
|                 Get-PnPProperty -ClientObject $Object -Property File, ParentList | ||||
|                 If($Object.File.Name -ne $Null) | ||||
|                 { | ||||
|                     $ObjectType = "File" | ||||
|                     $ObjectTitle = $Object.File.Name | ||||
|                     $ObjectURL = $("{0}{1}" -f $Web.Url.Replace($Web.ServerRelativeUrl,''),$Object.File.ServerRelativeUrl) | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     $ObjectType = "List Item" | ||||
|                     $ObjectTitle = $Object["Title"] | ||||
|                     #Get the URL of the List Item | ||||
|                     $DefaultDisplayFormUrl = Get-PnPProperty -ClientObject $Object.ParentList -Property DefaultDisplayFormUrl                      | ||||
|                     $ObjectURL = $("{0}{1}?ID={2}" -f $Web.Url.Replace($Web.ServerRelativeUrl,''), $DefaultDisplayFormUrl,$Object.ID) | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         Default | ||||
|         {  | ||||
|             $ObjectType = "List or Library" | ||||
|             $ObjectTitle = $Object.Title | ||||
|             #Get the URL of the List or Library | ||||
|             $RootFolder = Get-PnPProperty -ClientObject $Object -Property RootFolder      | ||||
|             $ObjectURL = $("{0}{1}" -f $Web.Url.Replace($Web.ServerRelativeUrl,''), $RootFolder.ServerRelativeUrl) | ||||
|         } | ||||
|     } | ||||
|     | ||||
|     #Get permissions assigned to the object | ||||
|     Get-PnPProperty -ClientObject $Object -Property HasUniqueRoleAssignments, RoleAssignments | ||||
|   | ||||
|     #Check if Object has unique permissions | ||||
|     $HasUniquePermissions = $Object.HasUniqueRoleAssignments | ||||
|       | ||||
|     #Loop through each permission assigned and extract details | ||||
|     $PermissionCollection = @() | ||||
|     Foreach($RoleAssignment in $Object.RoleAssignments) | ||||
|     {  | ||||
|         #Get the Permission Levels assigned and Member | ||||
|         Get-PnPProperty -ClientObject $RoleAssignment -Property RoleDefinitionBindings, Member | ||||
|   | ||||
|         #Get the Principal Type: User, SP Group, AD Group | ||||
|         $PermissionType = $RoleAssignment.Member.PrincipalType | ||||
|      | ||||
|         #Get the Permission Levels assigned | ||||
|         $PermissionLevels = $RoleAssignment.RoleDefinitionBindings | Select -ExpandProperty Name | ||||
|   | ||||
|         #Remove Limited Access | ||||
|         $PermissionLevels = ($PermissionLevels | Where { $_ -ne "Limited Access"}) -join "," | ||||
|   | ||||
|         #Leave Principals with no Permissions | ||||
|         If($PermissionLevels.Length -eq 0) {Continue} | ||||
|   | ||||
|         #Get SharePoint group members | ||||
|         If($PermissionType -eq "SharePointGroup") | ||||
|         { | ||||
|             #Get Group Members | ||||
|             $GroupMembers = Get-PnPGroupMember -Identity $RoleAssignment.Member.LoginName | ||||
|                   | ||||
|             #Leave Empty Groups | ||||
|             If($GroupMembers.count -eq 0){Continue} | ||||
|             $GroupUsers = ($GroupMembers | Select -ExpandProperty Title) -join "," | ||||
|   | ||||
|             #Add the Data to Object | ||||
|             $Permissions = New-Object PSObject | ||||
|             $Permissions | Add-Member NoteProperty Object($ObjectType) | ||||
|             $Permissions | Add-Member NoteProperty Title($ObjectTitle) | ||||
|             $Permissions | Add-Member NoteProperty URL($ObjectURL) | ||||
|             $Permissions | Add-Member NoteProperty HasUniquePermissions($HasUniquePermissions) | ||||
|             $Permissions | Add-Member NoteProperty Users($GroupUsers) | ||||
|             $Permissions | Add-Member NoteProperty Type($PermissionType) | ||||
|             $Permissions | Add-Member NoteProperty Permissions($PermissionLevels) | ||||
|             $Permissions | Add-Member NoteProperty GrantedThrough("SharePoint Group: $($RoleAssignment.Member.LoginName)") | ||||
|             $PermissionCollection += $Permissions | ||||
|         } | ||||
|         Else | ||||
|         { | ||||
|             #Add the Data to Object | ||||
|             $Permissions = New-Object PSObject | ||||
|             $Permissions | Add-Member NoteProperty Object($ObjectType) | ||||
|             $Permissions | Add-Member NoteProperty Title($ObjectTitle) | ||||
|             $Permissions | Add-Member NoteProperty URL($ObjectURL) | ||||
|             $Permissions | Add-Member NoteProperty HasUniquePermissions($HasUniquePermissions) | ||||
|             $Permissions | Add-Member NoteProperty Users($RoleAssignment.Member.Title) | ||||
|             $Permissions | Add-Member NoteProperty Type($PermissionType) | ||||
|             $Permissions | Add-Member NoteProperty Permissions($PermissionLevels) | ||||
|             $Permissions | Add-Member NoteProperty GrantedThrough("Direct Permissions") | ||||
|             $PermissionCollection += $Permissions | ||||
|         } | ||||
|     } | ||||
|     #Export Permissions to CSV File | ||||
|     $PermissionCollection | Export-CSV $ReportFile -NoTypeInformation -Append | ||||
| } | ||||
|     | ||||
| #Function to get sharepoint online site permissions report | ||||
| Function Generate-PnPSitePermissionRpt() | ||||
| { | ||||
| [cmdletbinding()] | ||||
|   | ||||
|     Param  | ||||
|     (     | ||||
|         [Parameter(Mandatory=$false)] [String] $SiteURL,  | ||||
|         [Parameter(Mandatory=$false)] [String] $ReportFile,          | ||||
|         [Parameter(Mandatory=$false)] [switch] $Recursive, | ||||
|         [Parameter(Mandatory=$false)] [switch] $ScanItemLevel, | ||||
|         [Parameter(Mandatory=$false)] [switch] $IncludeInheritedPermissions        | ||||
|     )   | ||||
|     Try { | ||||
|         #Connect to the Site | ||||
|         Connect-PnPOnline -Url $spUrl -Interactive -ClientId $pnpCiD | ||||
|         #Get the Web | ||||
|         $Web = Get-PnPWeb | ||||
|   | ||||
|         Write-host -f Yellow "Getting Site Collection Administrators..." | ||||
|         #Get Site Collection Administrators | ||||
|         $SiteAdmins = Get-PnPSiteCollectionAdmin | ||||
|           | ||||
|         $SiteCollectionAdmins = ($SiteAdmins | Select -ExpandProperty Title) -join "," | ||||
|         #Add the Data to Object | ||||
|         $Permissions = New-Object PSObject | ||||
|         $Permissions | Add-Member NoteProperty Object("Site Collection") | ||||
|         $Permissions | Add-Member NoteProperty Title($Web.Title) | ||||
|         $Permissions | Add-Member NoteProperty URL($Web.URL) | ||||
|         $Permissions | Add-Member NoteProperty HasUniquePermissions("TRUE") | ||||
|         $Permissions | Add-Member NoteProperty Users($SiteCollectionAdmins) | ||||
|         $Permissions | Add-Member NoteProperty Type("Site Collection Administrators") | ||||
|         $Permissions | Add-Member NoteProperty Permissions("Site Owner") | ||||
|         $Permissions | Add-Member NoteProperty GrantedThrough("Direct Permissions") | ||||
|                 | ||||
|         #Export Permissions to CSV File | ||||
|         $Permissions | Export-CSV $ReportFile -NoTypeInformation | ||||
|     | ||||
|         #Function to Get Permissions of All List Items of a given List | ||||
|         Function Get-PnPListItemsPermission([Microsoft.SharePoint.Client.List]$List) | ||||
|         { | ||||
|             Write-host -f Yellow "`t `t Getting Permissions of List Items in the List:"$List.Title | ||||
|    | ||||
|             #Get All Items from List in batches | ||||
|             $ListItems = Get-PnPListItem -List $List -PageSize 500 | ||||
|    | ||||
|             $ItemCounter = 0 | ||||
|             #Loop through each List item | ||||
|             ForEach($ListItem in $ListItems) | ||||
|             { | ||||
|                 #Get Objects with Unique Permissions or Inherited Permissions based on 'IncludeInheritedPermissions' switch | ||||
|                 If($IncludeInheritedPermissions) | ||||
|                 { | ||||
|                     Get-PnPPermissions -Object $ListItem | ||||
|                 } | ||||
|                 Else | ||||
|                 { | ||||
|                     #Check if List Item has unique permissions | ||||
|                     $HasUniquePermissions = Get-PnPProperty -ClientObject $ListItem -Property HasUniqueRoleAssignments | ||||
|                     If($HasUniquePermissions -eq $True) | ||||
|                     { | ||||
|                         #Call the function to generate Permission report | ||||
|                         Get-PnPPermissions -Object $ListItem | ||||
|                     } | ||||
|                 } | ||||
|                 $ItemCounter++ | ||||
|                 Write-Progress -PercentComplete ($ItemCounter / ($List.ItemCount) * 100) -Activity "Processing Items $ItemCounter of $($List.ItemCount)" -Status "Searching Unique Permissions in List Items of '$($List.Title)'" | ||||
|             } | ||||
|         } | ||||
|   | ||||
|         #Function to Get Permissions of all lists from the given web | ||||
|         Function Get-PnPListPermission([Microsoft.SharePoint.Client.Web]$Web) | ||||
|         { | ||||
|             #Get All Lists from the web | ||||
|             $Lists = Get-PnPProperty -ClientObject $Web -Property Lists | ||||
|     | ||||
|             #Exclude system lists | ||||
|             $ExcludedLists = @("Access Requests","App Packages","appdata","appfiles","Apps in Testing","Cache Profiles","Composed Looks","Content and Structure Reports","Content type publishing error log","Converted Forms", | ||||
|             "Device Channels","Form Templates","fpdatasources","Get started with Apps for Office and SharePoint","List Template Gallery", "Long Running Operation Status","Maintenance Log Library", "Images", "site collection images" | ||||
|             ,"Master Docs","Master Page Gallery","MicroFeed","NintexFormXml","Quick Deploy Items","Relationships List","Reusable Content","Reporting Metadata", "Reporting Templates", "Search Config List","Site Assets","Preservation Hold Library", | ||||
|             "Site Pages", "Solution Gallery","Style Library","Suggested Content Browser Locations","Theme Gallery", "TaxonomyHiddenList","User Information List","Web Part Gallery","wfpub","wfsvc","Workflow History","Workflow Tasks", "Pages") | ||||
|               | ||||
|             $Counter = 0 | ||||
|             #Get all lists from the web    | ||||
|             ForEach($List in $Lists) | ||||
|             { | ||||
|                 #Exclude System Lists | ||||
|                 If($List.Hidden -eq $False -and $ExcludedLists -notcontains $List.Title) | ||||
|                 { | ||||
|                     $Counter++ | ||||
|                     Write-Progress -PercentComplete ($Counter / ($Lists.Count) * 100) -Activity "Exporting Permissions from List '$($List.Title)' in $($Web.URL)" -Status "Processing Lists $Counter of $($Lists.Count)" | ||||
|   | ||||
|                     #Get Item Level Permissions if 'ScanItemLevel' switch present | ||||
|                     If($ScanItemLevel) | ||||
|                     { | ||||
|                         #Get List Items Permissions | ||||
|                         Get-PnPListItemsPermission -List $List | ||||
|                     } | ||||
|   | ||||
|                     #Get Lists with Unique Permissions or Inherited Permissions based on 'IncludeInheritedPermissions' switch | ||||
|                     If($IncludeInheritedPermissions) | ||||
|                     { | ||||
|                         Get-PnPPermissions -Object $List | ||||
|                     } | ||||
|                     Else | ||||
|                     { | ||||
|                         #Check if List has unique permissions | ||||
|                         $HasUniquePermissions = Get-PnPProperty -ClientObject $List -Property HasUniqueRoleAssignments | ||||
|                         If($HasUniquePermissions -eq $True) | ||||
|                         { | ||||
|                             #Call the function to check permissions | ||||
|                             Get-PnPPermissions -Object $List | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     | ||||
|         #Function to Get Webs's Permissions from given URL | ||||
|         Function Get-PnPWebPermission([Microsoft.SharePoint.Client.Web]$Web)  | ||||
|         { | ||||
|             #Call the function to Get permissions of the web | ||||
|             Write-host -f Yellow "Getting Permissions of the Web: $($Web.URL)..."  | ||||
|             Get-PnPPermissions -Object $Web | ||||
|     | ||||
|             #Get List Permissions | ||||
|             Write-host -f Yellow "`t Getting Permissions of Lists and Libraries..." | ||||
|             Get-PnPListPermission($Web) | ||||
|   | ||||
|             #Recursively get permissions from all sub-webs based on the "Recursive" Switch | ||||
|             If($Recursive) | ||||
|             { | ||||
|                 #Get Subwebs of the Web | ||||
|                 $Subwebs = Get-PnPProperty -ClientObject $Web -Property Webs | ||||
|   | ||||
|                 #Iterate through each subsite in the current web | ||||
|                 Foreach ($Subweb in $web.Webs) | ||||
|                 { | ||||
|                     #Get Webs with Unique Permissions or Inherited Permissions based on 'IncludeInheritedPermissions' switch | ||||
|                     If($IncludeInheritedPermissions) | ||||
|                     { | ||||
|                         Get-PnPWebPermission($Subweb) | ||||
|                     } | ||||
|                     Else | ||||
|                     { | ||||
|                         #Check if the Web has unique permissions | ||||
|                         $HasUniquePermissions = Get-PnPProperty -ClientObject $SubWeb -Property HasUniqueRoleAssignments | ||||
|     | ||||
|                         #Get the Web's Permissions | ||||
|                         If($HasUniquePermissions -eq $true)  | ||||
|                         {  | ||||
|                             #Call the function recursively                             | ||||
|                             Get-PnPWebPermission($Subweb) | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|   | ||||
|         #Call the function with RootWeb to get site collection permissions | ||||
|         Get-PnPWebPermission $Web | ||||
|     | ||||
|         Write-host -f Green "`n*** Site Permission Report Generated Successfully!***" | ||||
|      } | ||||
|     Catch { | ||||
|         write-host -f Red "Error Generating Site Permission Report!" $_.Exception.Message | ||||
|    } | ||||
| } | ||||
|     | ||||
|     | ||||
|  | ||||
| Function Get-FileName($initialDirectory) {    | ||||
|     [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | | ||||
|     Out-Null | ||||
|  | ||||
|     $SaveFileDialog = New-Object System.Windows.Forms.SaveFileDialog | ||||
|     $SaveFileDialog.initialDirectory = $initialDirectory | ||||
|     $SaveFileDialog.filter = "CSV (*.csv)|*.csv"; | ||||
|     $SaveFileDialog.ShowDialog() | Out-Null | ||||
|     $SaveFileDialog.filename | ||||
| } | ||||
| $SaveMyFile = Get-Filename | ||||
|  | ||||
| #region ***Parameters*** | ||||
| $SiteURL=$spUrl+"/sites/"+$spSite | ||||
| $ReportFile="$SaveMyFile" | ||||
| #endregion | ||||
|   | ||||
| #Call the function to generate permission report | ||||
| Generate-PnPSitePermissionRpt -SiteURL $SiteURL -ReportFile $ReportFile -Recursive | ||||
							
								
								
									
										328
									
								
								Sharepoint/Sharepoint_Export_v3_mass.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										328
									
								
								Sharepoint/Sharepoint_Export_v3_mass.ps1
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,328 @@ | ||||
| if($args[0] -eq $null) | ||||
| { | ||||
|     $pnpCiD = Read-Host "Votre Client ID (ex: fa7800b5-0298-4205-a369-ffb976de3058) " | ||||
|     $csvSPpath = Read-Host "Chemin vers la liste des sites (CSV) " | ||||
|  | ||||
| } | ||||
| else | ||||
| { | ||||
|     $pnpCiD=$args[0] | ||||
|     $csvSPpath=$args[1] | ||||
| } | ||||
|  | ||||
| $csvSPfile = Import-Csv -Path "$csvSPpath" | ||||
|  | ||||
|  | ||||
|  | ||||
| #Function to Get Permissions Applied on a particular Object, such as: Web, List, Folder or List Item | ||||
| Function Get-PnPPermissions([Microsoft.SharePoint.Client.SecurableObject]$Object) | ||||
| { | ||||
|     #Determine the type of the object | ||||
|     Switch($Object.TypedObject.ToString()) | ||||
|     { | ||||
|         "Microsoft.SharePoint.Client.Web"  { $ObjectType = "Site" ; $ObjectURL = $Object.URL; $ObjectTitle = $Object.Title } | ||||
|         "Microsoft.SharePoint.Client.ListItem" | ||||
|         {  | ||||
|             If($Object.FileSystemObjectType -eq "Folder") | ||||
|             { | ||||
|                 $ObjectType = "Folder" | ||||
|                 #Get the URL of the Folder  | ||||
|                 $Folder = Get-PnPProperty -ClientObject $Object -Property Folder | ||||
|                 $ObjectTitle = $Object.Folder.Name | ||||
|                 $ObjectURL = $("{0}{1}" -f $Web.Url.Replace($Web.ServerRelativeUrl,''),$Object.Folder.ServerRelativeUrl) | ||||
|             } | ||||
|             Else #File or List Item | ||||
|             { | ||||
|                 #Get the URL of the Object | ||||
|                 Get-PnPProperty -ClientObject $Object -Property File, ParentList | ||||
|                 If($Object.File.Name -ne $Null) | ||||
|                 { | ||||
|                     $ObjectType = "File" | ||||
|                     $ObjectTitle = $Object.File.Name | ||||
|                     $ObjectURL = $("{0}{1}" -f $Web.Url.Replace($Web.ServerRelativeUrl,''),$Object.File.ServerRelativeUrl) | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     $ObjectType = "List Item" | ||||
|                     $ObjectTitle = $Object["Title"] | ||||
|                     #Get the URL of the List Item | ||||
|                     $DefaultDisplayFormUrl = Get-PnPProperty -ClientObject $Object.ParentList -Property DefaultDisplayFormUrl                      | ||||
|                     $ObjectURL = $("{0}{1}?ID={2}" -f $Web.Url.Replace($Web.ServerRelativeUrl,''), $DefaultDisplayFormUrl,$Object.ID) | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         Default | ||||
|         {  | ||||
|             $ObjectType = "List or Library" | ||||
|             $ObjectTitle = $Object.Title | ||||
|             #Get the URL of the List or Library | ||||
|             $RootFolder = Get-PnPProperty -ClientObject $Object -Property RootFolder      | ||||
|             $ObjectURL = $("{0}{1}" -f $Web.Url.Replace($Web.ServerRelativeUrl,''), $RootFolder.ServerRelativeUrl) | ||||
|         } | ||||
|     } | ||||
|     | ||||
|     #Get permissions assigned to the object | ||||
|     Get-PnPProperty -ClientObject $Object -Property HasUniqueRoleAssignments, RoleAssignments | ||||
|   | ||||
|     #Check if Object has unique permissions | ||||
|     $HasUniquePermissions = $Object.HasUniqueRoleAssignments | ||||
|       | ||||
|     #Loop through each permission assigned and extract details | ||||
|     $PermissionCollection = @() | ||||
|     Foreach($RoleAssignment in $Object.RoleAssignments) | ||||
|     {  | ||||
|         #Get the Permission Levels assigned and Member | ||||
|         Get-PnPProperty -ClientObject $RoleAssignment -Property RoleDefinitionBindings, Member | ||||
|   | ||||
|         #Get the Principal Type: User, SP Group, AD Group | ||||
|         $PermissionType = $RoleAssignment.Member.PrincipalType | ||||
|      | ||||
|         #Get the Permission Levels assigned | ||||
|         $PermissionLevels = $RoleAssignment.RoleDefinitionBindings | Select -ExpandProperty Name | ||||
|   | ||||
|         #Remove Limited Access | ||||
|         $PermissionLevels = ($PermissionLevels | Where { $_ -ne "Limited Access"}) -join "," | ||||
|   | ||||
|         #Leave Principals with no Permissions | ||||
|         If($PermissionLevels.Length -eq 0) {Continue} | ||||
|   | ||||
|         #Get SharePoint group members | ||||
|         If($PermissionType -eq "SharePointGroup") | ||||
|         { | ||||
|             #Get Group Members | ||||
|             $GroupMembers = Get-PnPGroupMember -Identity $RoleAssignment.Member.LoginName | ||||
|                   | ||||
|             #Leave Empty Groups | ||||
|             If($GroupMembers.count -eq 0){Continue} | ||||
|             $GroupUsers = ($GroupMembers | Select -ExpandProperty Title) -join "," | ||||
|   | ||||
|             #Add the Data to Object | ||||
|             $Permissions = New-Object PSObject | ||||
|             $Permissions | Add-Member NoteProperty Object($ObjectType) | ||||
|             $Permissions | Add-Member NoteProperty Title($ObjectTitle) | ||||
|             $Permissions | Add-Member NoteProperty URL($ObjectURL) | ||||
|             $Permissions | Add-Member NoteProperty HasUniquePermissions($HasUniquePermissions) | ||||
|             $Permissions | Add-Member NoteProperty Users($GroupUsers) | ||||
|             $Permissions | Add-Member NoteProperty Type($PermissionType) | ||||
|             $Permissions | Add-Member NoteProperty Permissions($PermissionLevels) | ||||
|             $Permissions | Add-Member NoteProperty GrantedThrough("SharePoint Group: $($RoleAssignment.Member.LoginName)") | ||||
|             $PermissionCollection += $Permissions | ||||
|         } | ||||
|         Else | ||||
|         { | ||||
|             #Add the Data to Object | ||||
|             $Permissions = New-Object PSObject | ||||
|             $Permissions | Add-Member NoteProperty Object($ObjectType) | ||||
|             $Permissions | Add-Member NoteProperty Title($ObjectTitle) | ||||
|             $Permissions | Add-Member NoteProperty URL($ObjectURL) | ||||
|             $Permissions | Add-Member NoteProperty HasUniquePermissions($HasUniquePermissions) | ||||
|             $Permissions | Add-Member NoteProperty Users($RoleAssignment.Member.Title) | ||||
|             $Permissions | Add-Member NoteProperty Type($PermissionType) | ||||
|             $Permissions | Add-Member NoteProperty Permissions($PermissionLevels) | ||||
|             $Permissions | Add-Member NoteProperty GrantedThrough("Direct Permissions") | ||||
|             $PermissionCollection += $Permissions | ||||
|         } | ||||
|     } | ||||
|     #Export Permissions to CSV File | ||||
|     $PermissionCollection | Export-CSV $ReportFile -NoTypeInformation -Append | ||||
| } | ||||
|     | ||||
| #Function to get sharepoint online site permissions report | ||||
| Function Generate-PnPSitePermissionRpt() | ||||
| { | ||||
| [cmdletbinding()] | ||||
|   | ||||
|     Param  | ||||
|     (     | ||||
|         [Parameter(Mandatory=$false)] [String] $SiteURL,  | ||||
|         [Parameter(Mandatory=$false)] [String] $ReportFile,          | ||||
|         [Parameter(Mandatory=$false)] [switch] $Recursive, | ||||
|         [Parameter(Mandatory=$false)] [switch] $ScanItemLevel, | ||||
|         [Parameter(Mandatory=$false)] [switch] $IncludeInheritedPermissions        | ||||
|     )   | ||||
|     Try { | ||||
|         #Connect to the Site | ||||
|         Connect-PnPOnline -Url $SiteURL -Interactive -ClientId $pnpCiD | ||||
|         #Get the Web | ||||
|         $Web = Get-PnPWeb | ||||
|   | ||||
|         Write-host -f Yellow "Getting Site Collection Administrators..." | ||||
|         #Get Site Collection Administrators | ||||
|         $SiteAdmins = Get-PnPSiteCollectionAdmin | ||||
|           | ||||
|         $SiteCollectionAdmins = ($SiteAdmins | Select -ExpandProperty Title) -join "," | ||||
|         #Add the Data to Object | ||||
|         $Permissions = New-Object PSObject | ||||
|         $Permissions | Add-Member NoteProperty Object("Site Collection") | ||||
|         $Permissions | Add-Member NoteProperty Title($Web.Title) | ||||
|         $Permissions | Add-Member NoteProperty URL($Web.URL) | ||||
|         $Permissions | Add-Member NoteProperty HasUniquePermissions("TRUE") | ||||
|         $Permissions | Add-Member NoteProperty Users($SiteCollectionAdmins) | ||||
|         $Permissions | Add-Member NoteProperty Type("Site Collection Administrators") | ||||
|         $Permissions | Add-Member NoteProperty Permissions("Site Owner") | ||||
|         $Permissions | Add-Member NoteProperty GrantedThrough("Direct Permissions") | ||||
|                 | ||||
|         #Export Permissions to CSV File | ||||
|         $Permissions | Export-CSV $ReportFile -NoTypeInformation | ||||
|     | ||||
|         #Function to Get Permissions of All List Items of a given List | ||||
|         Function Get-PnPListItemsPermission([Microsoft.SharePoint.Client.List]$List) | ||||
|         { | ||||
|             Write-host -f Yellow "`t `t Getting Permissions of List Items in the List:"$List.Title | ||||
|    | ||||
|             #Get All Items from List in batches | ||||
|             $ListItems = Get-PnPListItem -List $List -PageSize 500 | ||||
|    | ||||
|             $ItemCounter = 0 | ||||
|             #Loop through each List item | ||||
|             ForEach($ListItem in $ListItems) | ||||
|             { | ||||
|                 #Get Objects with Unique Permissions or Inherited Permissions based on 'IncludeInheritedPermissions' switch | ||||
|                 If($IncludeInheritedPermissions) | ||||
|                 { | ||||
|                     Get-PnPPermissions -Object $ListItem | ||||
|                 } | ||||
|                 Else | ||||
|                 { | ||||
|                     #Check if List Item has unique permissions | ||||
|                     $HasUniquePermissions = Get-PnPProperty -ClientObject $ListItem -Property HasUniqueRoleAssignments | ||||
|                     If($HasUniquePermissions -eq $True) | ||||
|                     { | ||||
|                         #Call the function to generate Permission report | ||||
|                         Get-PnPPermissions -Object $ListItem | ||||
|                     } | ||||
|                 } | ||||
|                 $ItemCounter++ | ||||
|                 Write-Progress -PercentComplete ($ItemCounter / ($List.ItemCount) * 100) -Activity "Processing Items $ItemCounter of $($List.ItemCount)" -Status "Searching Unique Permissions in List Items of '$($List.Title)'" | ||||
|             } | ||||
|         } | ||||
|   | ||||
|         #Function to Get Permissions of all lists from the given web | ||||
|         Function Get-PnPListPermission([Microsoft.SharePoint.Client.Web]$Web) | ||||
|         { | ||||
|             #Get All Lists from the web | ||||
|             $Lists = Get-PnPProperty -ClientObject $Web -Property Lists | ||||
|     | ||||
|             #Exclude system lists | ||||
|             $ExcludedLists = @("Access Requests","App Packages","appdata","appfiles","Apps in Testing","Cache Profiles","Composed Looks","Content and Structure Reports","Content type publishing error log","Converted Forms", | ||||
|             "Device Channels","Form Templates","fpdatasources","Get started with Apps for Office and SharePoint","List Template Gallery", "Long Running Operation Status","Maintenance Log Library", "Images", "site collection images" | ||||
|             ,"Master Docs","Master Page Gallery","MicroFeed","NintexFormXml","Quick Deploy Items","Relationships List","Reusable Content","Reporting Metadata", "Reporting Templates", "Search Config List","Site Assets","Preservation Hold Library", | ||||
|             "Site Pages", "Solution Gallery","Style Library","Suggested Content Browser Locations","Theme Gallery", "TaxonomyHiddenList","User Information List","Web Part Gallery","wfpub","wfsvc","Workflow History","Workflow Tasks", "Pages") | ||||
|               | ||||
|             $Counter = 0 | ||||
|             #Get all lists from the web    | ||||
|             ForEach($List in $Lists) | ||||
|             { | ||||
|                 #Exclude System Lists | ||||
|                 If($List.Hidden -eq $False -and $ExcludedLists -notcontains $List.Title) | ||||
|                 { | ||||
|                     $Counter++ | ||||
|                     Write-Progress -PercentComplete ($Counter / ($Lists.Count) * 100) -Activity "Exporting Permissions from List '$($List.Title)' in $($Web.URL)" -Status "Processing Lists $Counter of $($Lists.Count)" | ||||
|   | ||||
|                     #Get Item Level Permissions if 'ScanItemLevel' switch present | ||||
|                     If($ScanItemLevel) | ||||
|                     { | ||||
|                         #Get List Items Permissions | ||||
|                         Get-PnPListItemsPermission -List $List | ||||
|                     } | ||||
|   | ||||
|                     #Get Lists with Unique Permissions or Inherited Permissions based on 'IncludeInheritedPermissions' switch | ||||
|                     If($IncludeInheritedPermissions) | ||||
|                     { | ||||
|                         Get-PnPPermissions -Object $List | ||||
|                     } | ||||
|                     Else | ||||
|                     { | ||||
|                         #Check if List has unique permissions | ||||
|                         $HasUniquePermissions = Get-PnPProperty -ClientObject $List -Property HasUniqueRoleAssignments | ||||
|                         If($HasUniquePermissions -eq $True) | ||||
|                         { | ||||
|                             #Call the function to check permissions | ||||
|                             Get-PnPPermissions -Object $List | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     | ||||
|         #Function to Get Webs's Permissions from given URL | ||||
|         Function Get-PnPWebPermission([Microsoft.SharePoint.Client.Web]$Web)  | ||||
|         { | ||||
|             #Call the function to Get permissions of the web | ||||
|             Write-host -f Yellow "Getting Permissions of the Web: $($Web.URL)..."  | ||||
|             Get-PnPPermissions -Object $Web | ||||
|     | ||||
|             #Get List Permissions | ||||
|             Write-host -f Yellow "`t Getting Permissions of Lists and Libraries..." | ||||
|             Get-PnPListPermission($Web) | ||||
|   | ||||
|             #Recursively get permissions from all sub-webs based on the "Recursive" Switch | ||||
|             If($Recursive) | ||||
|             { | ||||
|                 #Get Subwebs of the Web | ||||
|                 $Subwebs = Get-PnPProperty -ClientObject $Web -Property Webs | ||||
|   | ||||
|                 #Iterate through each subsite in the current web | ||||
|                 Foreach ($Subweb in $web.Webs) | ||||
|                 { | ||||
|                     #Get Webs with Unique Permissions or Inherited Permissions based on 'IncludeInheritedPermissions' switch | ||||
|                     If($IncludeInheritedPermissions) | ||||
|                     { | ||||
|                         Get-PnPWebPermission($Subweb) | ||||
|                     } | ||||
|                     Else | ||||
|                     { | ||||
|                         #Check if the Web has unique permissions | ||||
|                         $HasUniquePermissions = Get-PnPProperty -ClientObject $SubWeb -Property HasUniqueRoleAssignments | ||||
|     | ||||
|                         #Get the Web's Permissions | ||||
|                         If($HasUniquePermissions -eq $true)  | ||||
|                         {  | ||||
|                             #Call the function recursively                             | ||||
|                             Get-PnPWebPermission($Subweb) | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|   | ||||
|         #Call the function with RootWeb to get site collection permissions | ||||
|         Get-PnPWebPermission $Web | ||||
|     | ||||
|         Write-host -f Green "`n*** Site Permission Report Generated Successfully!***" | ||||
|      } | ||||
|     Catch { | ||||
|         write-host -f Red "Error Generating Site Permission Report!" $_.Exception.Message | ||||
|    } | ||||
| } | ||||
|     | ||||
|     | ||||
|  | ||||
| Function Get-Folder($initialDirectory="") | ||||
|  | ||||
| { | ||||
|     [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")|Out-Null | ||||
|  | ||||
|     $foldername = New-Object System.Windows.Forms.FolderBrowserDialog | ||||
|     $foldername.Description = "Select a folder" | ||||
|     $foldername.rootfolder = "MyComputer" | ||||
|     $foldername.SelectedPath = $initialDirectory | ||||
|  | ||||
|     if($foldername.ShowDialog() -eq "OK") | ||||
|     { | ||||
|         $folder += $foldername.SelectedPath | ||||
|     } | ||||
|     return $folder | ||||
| } | ||||
|  | ||||
| $destinationFolder = Get-Folder | ||||
|  | ||||
| foreach ($site in $csvSPfile) | ||||
| { | ||||
|     #Call the function to generate permission report | ||||
|     $siteName =  $site.SiteName | ||||
|     Write-Host $siteName | ||||
|     $siteUrlin = $site.URL | ||||
|     Write-Host $siteUrlin | ||||
|     Generate-PnPSitePermissionRpt -SiteURL $siteUrlin -ReportFile "$destinationFolder\$siteName.csv" -Recursive | ||||
| } | ||||
							
								
								
									
										38
									
								
								Sharepoint/gui/Re-Link/reLink.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								Sharepoint/gui/Re-Link/reLink.ps1
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| $oldPrefix = "\\Srv75008s\juridique" | ||||
| $newPrefix = "%userprofile%\Skornik\Dossiers utilisateurs - Documents\Juridique" | ||||
|  | ||||
| #$oldPrefix = "\\srv75008s\Commun" | ||||
| #$newPrefix = "%userprofile%\Skornik\Commun - Documents" | ||||
|  | ||||
|  | ||||
| $searchPath = "Z:\juridique" | ||||
|  | ||||
| $dryRun = $FALSE | ||||
|  | ||||
| $shell = new-object -com wscript.shell | ||||
|  | ||||
| if ( $dryRun ) { | ||||
|    write-host "Dry run..." -foregroundcolor green -backgroundcolor black | ||||
| } else { | ||||
|    write-host "Warning : Real run" -foregroundcolor red -backgroundcolor black | ||||
| } | ||||
|  | ||||
| dir $searchPath -filter *.lnk -recurse | foreach { | ||||
|    $lnk = $shell.createShortcut( $_.fullname ) | ||||
|    $oldPath= $lnk.targetPath | ||||
|  | ||||
|    $lnkRegex = "^" + [regex]::escape( $oldPrefix )  | ||||
|  | ||||
|    if ( $oldPath -match $lnkRegex ) { | ||||
|       $newPath = $oldPath -replace $lnkRegex, $newPrefix | ||||
|  | ||||
|       write-host "Found: " + $_.fullname -foregroundcolor yellow -backgroundcolor black | ||||
|       write-host " Replace: " + $oldPath | ||||
|       write-host " With:    " + $newPath | ||||
|  | ||||
|       if ( !$dryRun ) { | ||||
|          $lnk.targetPath = $newPath | ||||
|          $lnk.Save() | ||||
|       } | ||||
|    } | ||||
| } | ||||
							
								
								
									
										11
									
								
								Sharepoint/gui/spmover/.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								Sharepoint/gui/spmover/.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| { | ||||
|     "configurations": [ | ||||
|         { | ||||
|             "name": "PowerShell: Launch Script", | ||||
|             "type": "PowerShell", | ||||
|             "request": "launch", | ||||
|             "script": "${workspaceFolder}\\sputils.ps1", | ||||
|             "args": [] | ||||
|         } | ||||
|     ] | ||||
| } | ||||
							
								
								
									
										
											BIN
										
									
								
								Sharepoint/gui/spmover/Functions.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Sharepoint/gui/spmover/Functions.ps1
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Sharepoint/gui/spmover/logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Sharepoint/gui/spmover/logo.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 13 KiB | 
							
								
								
									
										3
									
								
								Sharepoint/gui/spmover/readme.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Sharepoint/gui/spmover/readme.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # SharePoint Utils | ||||
|  | ||||
| Sharepoint Utils concatenate all the useful scripts useed to manage your SharePoints in one easy to use GUI. | ||||
							
								
								
									
										544
									
								
								Sharepoint/gui/spmover/sputils.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										544
									
								
								Sharepoint/gui/spmover/sputils.ps1
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,544 @@ | ||||
| ################################################################################  | ||||
| # | ||||
| #  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() | ||||
							
								
								
									
										4
									
								
								Sharepoint/readme.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								Sharepoint/readme.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| # Scripts Sharepoint | ||||
|  | ||||
| - [Verifier la taille des corbeilles du Sharepoint](https://git.azuze.fr/kawa/ps-scripts/src/branch/main/Sharepoint/sharepoint-taille-trash.ps1) | ||||
| - [Nettoyer toutes les versions de fichier en conservant les 5 dernieres](https://git.azuze.fr/kawa/ps-scripts/src/branch/main/Sharepoint/SP-empty.ps1) | ||||
							
								
								
									
										11
									
								
								Sharepoint/sharepoint-taille-trash.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								Sharepoint/sharepoint-taille-trash.ps1
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| #On rentre l'URL du site Sharepoint | ||||
| $SiteURL = Read-Host -Prompt "Entrez l'URL du site " | ||||
|   | ||||
| #On s'y connecte | ||||
| Connect-PnPOnline -Url $SiteURL -Credentials (Get-Credential) | ||||
|   | ||||
| #On additionne la taille de tous les objets de la corbeille | ||||
| $RecycleBinSize = Get-PnPRecycleBinItem -RowLimit 500000 | Where-Object { $_.ItemState -eq "FirstStage" }| Measure-Object -Property Size -Sum | ||||
|   | ||||
| #On recupere la taille en format lisible | ||||
| Write-host "Recycle Bin Size (GB):" ([Math]::Round($RecycleBinSize.Sum/1GB,2))  | ||||
							
								
								
									
										29
									
								
								Windows/FirefoxAutoUpdate.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								Windows/FirefoxAutoUpdate.ps1
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| # On verifie quelle version est installée | ||||
| if (Test-Path "C:\Program Files\Mozilla Firefox\firefox.exe") { | ||||
|     $installedVersion = (Get-ItemProperty "HKLM:\Software\Mozilla\Mozilla Firefox" -Name "CurrentVersion").CurrentVersion | ||||
|     Write-Host "Version installee: $installedVersion" | ||||
| } else { | ||||
|     Write-Host "Firefox n'est pas installe." | ||||
| } | ||||
|  | ||||
| # On récupère la dernière version | ||||
| $r = Invoke-WebRequest -Uri "https://www.mozilla.org/fr-FR/firefox/new/" | ||||
| $latestVersion = $r.Content.Split([Environment]::NewLine) | Select-String 'data-latest-firefox' |  | ||||
|                  ForEach-Object { $_.ToString().Split('"')[9] } | ||||
|  | ||||
| # On fait le comparo entre la version installée et la dernière disponible | ||||
| if ($installedVersion -lt $latestVersion) { | ||||
|     Write-Host "Nouvelle version disponible: $latestVersion" | ||||
|  | ||||
|     # On DL la nouvelle version | ||||
|     $url = "https://download.mozilla.org/?product=firefox-latest-ssl&os=win64&lang=fr-FR" | ||||
|     $output = "C:\Users\$env:USERNAME\Downloads\FirefoxSetup.exe" | ||||
|     Invoke-WebRequest -Uri $url -OutFile $output | ||||
|  | ||||
|     # On installe silencieusement | ||||
|     Start-Process -FilePath $output -ArgumentList "/S" -Wait | ||||
|  | ||||
|     Write-Host "Firefox a bien ete passe en version $latestVersion." | ||||
| } else { | ||||
|     Write-Host "Firefox est a jour. Version: $installedVersion" | ||||
| } | ||||
							
								
								
									
										2
									
								
								Windows/get-bio.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								Windows/get-bio.ps1
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| #On recupere la liste des peripheriques biometriques | ||||
| Get-PnpDevice -PresentOnly -Class Biometric | ||||
							
								
								
									
										25
									
								
								Windows/getAcl.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								Windows/getAcl.ps1
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| #On demande à l'user de rentrer le chemin source | ||||
| $entPath = Read-Host "Chemin vers le dossier a examiner : " | ||||
|  | ||||
| #et le chemin cible | ||||
| $outPath = Read-Host "Ou stocker le CSV : " | ||||
|  | ||||
| #On active la recursion | ||||
| $FolderPath = dir -Directory -Path "$entPath" -Recurse -Force | ||||
|  | ||||
| $Report = @() | ||||
|  | ||||
| #Une petite boucle pour recuperer les ACL de tous les dossiers | ||||
| Foreach ($Folder in $FolderPath) { | ||||
|     $Acl = Get-Acl -Path $Folder.FullName | ||||
|     foreach ($Access in $acl.Access) | ||||
|         { | ||||
|             $Properties = [ordered]@{'FolderName'=$Folder.FullName;'AD | ||||
| Group or | ||||
| User'=$Access.IdentityReference;'Permissions'=$Access.FileSystemRights;'Inherited'=$Access.IsInherited} | ||||
|             $Report += New-Object -TypeName PSObject -Property $Properties | ||||
|         } | ||||
| } | ||||
|  | ||||
| #On stocke le rapport la ou l'user veut | ||||
| $Report | Export-Csv -path "$outPath" | ||||
		Reference in New Issue
	
	Block a user