Compare commits
61 Commits
Author | SHA1 | Date | |
---|---|---|---|
d650d775ef | |||
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>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
|
||||
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-keep-lastNVersions.ps1
Normal file
64
Sharepoint/SP-keep-lastNVersions.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"
|
Loading…
x
Reference in New Issue
Block a user