Compare commits
28 Commits
f401ceb825
...
1.0.0
Author | SHA1 | Date | |
---|---|---|---|
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 |
115
AD/CreateN1-N2Users/Create-ADtechs.ps1
Normal file
115
AD/CreateN1-N2Users/Create-ADtechs.ps1
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
#On vérifie que les modules soient bien installés
|
||||||
|
if (Get-Module -ListAvailable -Name PSWriteColor) {
|
||||||
|
$modExiste = $true
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$modExiste = $false
|
||||||
|
}
|
||||||
|
|
||||||
|
#Cette étape permet de désactiver les messages de confirmation d'install
|
||||||
|
Set-PSRepository -Name 'PSGallery' -InstallationPolicy Trusted
|
||||||
|
|
||||||
|
switch ($modExiste) {
|
||||||
|
$true{Import-Module ActiveDirectory;Import-Module PSWriteColor}
|
||||||
|
$false{Install-Module PSWriteColor -Confirm:$False;Import-Module ActiveDirectory;Import-Module PSWriteColor}
|
||||||
|
Default {Import-Module ActiveDirectory;Import-Module PSWriteColor}
|
||||||
|
}
|
||||||
|
|
||||||
|
#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 = "S-1-5-21-$domaineSID-1111"
|
||||||
|
$grpDHCPuser = "S-1-5-21-$domaineSID-1110"
|
||||||
|
$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-Color -Text "L'utilisateur ", $user, " existe déjà. Application des permissions." -Color White, Yellow
|
||||||
|
}
|
||||||
|
$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,$grpDHCPadm,$grpGPOadmin,$grpNetAdmin)}
|
||||||
|
"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-Color -Text "L'utilisateur ",$User," a bien été crée. Son mot de passe est ",$userPass -Color White,Green,White,Cyan
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Error "Erreur pour l'utilisateur $user : $_"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Color -Text "Les utilisateurs ainsi que leur mots de passes ont été exportés ici : ","C:\techLogins-$pcName.csv" -Color White,Green
|
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...
|
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
|
||||||
|
|
||||||
|
|
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": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@@ -12,13 +12,25 @@
|
|||||||
# Source : C:\Users\SebastienQUEROL\source\repos\sharepointmover-gui\Form1.Designer.cs
|
# Source : C:\Users\SebastienQUEROL\source\repos\sharepointmover-gui\Form1.Designer.cs
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
function Get-ScriptDirectory
|
###############Thread Setup
|
||||||
{ #Return the directory name of this script
|
|
||||||
$Invocation = (Get-Variable MyInvocation -Scope 1).Value
|
|
||||||
Split-Path $Invocation.MyCommand.Path
|
|
||||||
}
|
|
||||||
|
|
||||||
$ScriptPath = Get-ScriptDirectory
|
$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
|
# Chargement des assemblies externes
|
||||||
Add-Type -AssemblyName System.Windows.Forms
|
Add-Type -AssemblyName System.Windows.Forms
|
||||||
@@ -209,7 +221,7 @@ $BconnectSP.UseVisualStyleBackColor = $true
|
|||||||
#
|
#
|
||||||
$URLTenant.Location = New-Object System.Drawing.Point(22, 55)
|
$URLTenant.Location = New-Object System.Drawing.Point(22, 55)
|
||||||
$URLTenant.Name = "URLTenant"
|
$URLTenant.Name = "URLTenant"
|
||||||
$URLTenant.Text = "https://perlinpimpim-admin.sharepoint.com"
|
$URLTenant.Text = "https://guycarlier.sharepoint.com"
|
||||||
$URLTenant.Size = New-Object System.Drawing.Size(325, 20)
|
$URLTenant.Size = New-Object System.Drawing.Size(325, 20)
|
||||||
$URLTenant.TabIndex = 1
|
$URLTenant.TabIndex = 1
|
||||||
#
|
#
|
||||||
@@ -364,6 +376,7 @@ $tabPage5.UseVisualStyleBackColor = $true
|
|||||||
$LresultsMove.HideSelection = $false
|
$LresultsMove.HideSelection = $false
|
||||||
$LresultsMove.Location = New-Object System.Drawing.Point(8, 173)
|
$LresultsMove.Location = New-Object System.Drawing.Point(8, 173)
|
||||||
$LresultsMove.Name = "LresultsMove"
|
$LresultsMove.Name = "LresultsMove"
|
||||||
|
#$LresultsMove.FullRowSelect = true
|
||||||
$LresultsMove.Size = New-Object System.Drawing.Size(776, 190)
|
$LresultsMove.Size = New-Object System.Drawing.Size(776, 190)
|
||||||
$LresultsMove.TabIndex = 7
|
$LresultsMove.TabIndex = 7
|
||||||
$LresultsMove.AutoSize = $true
|
$LresultsMove.AutoSize = $true
|
||||||
@@ -383,7 +396,16 @@ $FMain.Text = "SharePoint Utils GUI"
|
|||||||
|
|
||||||
#Onglet Move
|
#Onglet Move
|
||||||
##Lister les sites dans les comboBoxes
|
##Lister les sites dans les comboBoxes
|
||||||
|
#### On lance le ScriptBlock dans un runspace au clic du bouton BlistSites
|
||||||
$BlistSites.Add_Click({
|
$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
|
#On vide la variable pnpConnection pour ne pas avoir de faux positifs
|
||||||
$pnpConnection=$Null
|
$pnpConnection=$Null
|
||||||
#On stocke la derniere connection PnP
|
#On stocke la derniere connection PnP
|
||||||
@@ -393,7 +415,7 @@ $BlistSites.Add_Click({
|
|||||||
$CBdestSite.Items.Clear()
|
$CBdestSite.Items.Clear()
|
||||||
$CBsourceSite.Items.Clear()
|
$CBsourceSite.Items.Clear()
|
||||||
$sitesList = $null
|
$sitesList = $null
|
||||||
$sitesList = Get-PnPTenantSite | Where -Property Template -NotIn ("SRCHCEN#0", "REDIRECTSITE#0", "SPSMSITEHOST#0", "APPCATALOG#0", "POINTPUBLISHINGHUB#0", "EDISC#0", "STS#-1", 'EHS#1','POINTPUBLISHINGTOPIC#0') | Select url
|
$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()
|
$LresultsMove.Items.Clear()
|
||||||
foreach($siteUrl in $sitesList){
|
foreach($siteUrl in $sitesList){
|
||||||
$siteUrl -match "@{Url=(?<content>.*)}"
|
$siteUrl -match "@{Url=(?<content>.*)}"
|
||||||
@@ -410,28 +432,66 @@ $BlistSites.Add_Click({
|
|||||||
$LresultsMove.Items.Clear()
|
$LresultsMove.Items.Clear()
|
||||||
$LresultsMove.Items.Add("Connectez-vous au tenant d'abord")
|
$LresultsMove.Items.Add("Connectez-vous au tenant d'abord")
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
$BlistSitesRunSpace.PowerShell.Runspace = $newRunspace
|
||||||
|
$BlistSitesRunSpace.Thread = $BlistSitesRunSpace.PowerShell.BeginInvoke()
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
##Bouger les dossiers
|
##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({
|
$Bgo.Add_Click({
|
||||||
$sourceSite = $CBsourceSite.Text
|
|
||||||
|
$newRunspace =[runspacefactory]::CreateRunspace()
|
||||||
|
$newRunspace.ApartmentState ="STA"
|
||||||
|
$newRunspace.ThreadOptions ="ReuseThread"
|
||||||
|
$newRunspace.Open()
|
||||||
|
$newRunspace.SessionStateProxy.SetVariable("syncHash",$syncHash)
|
||||||
|
|
||||||
|
$copySPRunspace.PowerShell = [PowerShell]::Create().AddScript({
|
||||||
$destSite = $CBdestSite.Text
|
$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]+)+)',''
|
||||||
|
|
||||||
$jobMovePending = Copy-PnPFile -SourceUrl $sourceSite -TargetUrl $destSite -Force -OverwriteIfAlreadyExists
|
$jobCopyPending = Copy-PnPFile -SourceUrl "$sourceSite" -TargetUrl "$destSite" -Force -OverwriteIfAlreadyExists
|
||||||
$jobStatus = Receive-PnPCopyMoveJobStatus -Job $jobMovePending
|
$jobStatus = Receive-PnPCopyMoveJobStatus -Job $jobCopyPending -Wait
|
||||||
Write-Host $jobStatus
|
Write-Output $jobStatus
|
||||||
|
})
|
||||||
|
$copySPRunspace.PowerShell.Runspace = $newRunspace
|
||||||
|
$copySPRunspace.Thread = $copySPRunspace.PowerShell.BeginInvoke()
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
#Onglet Parametres
|
#Onglet Parametres
|
||||||
##Connexion Sharepoint
|
##Connexion Sharepoint
|
||||||
$BconnectSP.Add_Click({
|
|
||||||
|
|
||||||
$pnpConnection=$null
|
$pnpConnection=$null
|
||||||
$pnpConnection = Get-PnPConnection | Out-string
|
$pnpConnection = Get-PnPConnection | Out-string
|
||||||
$tenantURL = $URLTenant.Text
|
$tenantURL = $URLTenant.Text
|
||||||
$connResults = Connect-PnPOnline -Url $tenantURL -Interactive 2>&1 | Out-String
|
|
||||||
|
$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)
|
Switch ($ERROR)
|
||||||
{
|
{
|
||||||
@@ -452,7 +512,9 @@ $BconnectSP.Add_Click({
|
|||||||
$label4.ForeColor = [System.Drawing.Color]::Green
|
$label4.ForeColor = [System.Drawing.Color]::Green
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
$connectToSPRunspace.PowerShell.Runspace = $newRunspace
|
||||||
|
$connectToSPRunspace.Thread = $connectToSPRunspace.PowerShell.BeginInvoke()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@@ -470,6 +532,9 @@ function OnFormClosing_FMain{
|
|||||||
$FMain.Add_FormClosing({
|
$FMain.Add_FormClosing({
|
||||||
#Disconnect-PnPOnline
|
#Disconnect-PnPOnline
|
||||||
Write-Host "Goodbye, come again soon :*"
|
Write-Host "Goodbye, come again soon :*"
|
||||||
|
$RunspacePool.Close()
|
||||||
|
$RunspacePool.Dispose()
|
||||||
|
[gc]::Collect()
|
||||||
OnFormClosing_FMain
|
OnFormClosing_FMain
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user