PowerShell
PowerShell est un langage de programmation pour les systèmes Microsoft Windows.
Référence
- http://www.it-connect.fr/powershell-pour-les-debutants-1ere-partie/
- http://www.it-connect.fr/powershell-et-active-directory-modifier-le-domaine-des-adresses-mails/
- http://www.it-connect.fr/active-directory-supprimer-les-ordinateurs-dune-ou-en-powershell/
- http://www.it-connect.fr/creer-des-comptes-utilisateurs-par-lot-avec-powershell-v2-et-le-module-active-directory-server-2008-r2/
- http://www.it-connect.fr/chapitres/modifier-la-resolution-de-lecran/
Site de Marie Pascal Delamare, BTS SIO / STS SIO
Document
Gestion des path sous PowerShell, PDF, 31 pages :
Source de script
Gérer les autorisations NTFS avec PowerShell :
Copie de fichiers avec BITS (Background Intelligent Transfer Service) :
PowerShell : convertir PS1 en EXE ; création d'un exécutable :
- https://www.it-connect.fr/powershell-convertir-ps1-en-exe-executable/
- https://www.majorgeeks.com/files/details/ps1_to_exe.html
Interface graphique
- Exemple d'interface graphique :
Exemple
Windows10Debloater
Script si problème mise à jour Windows
Le service "Windows Update" s'appelle wuauserv :
Stop-Service -Name wuauservStart-Service -Name wuauservSet-Service -Name wuauserv -StartupType AutomaticSet-Service -Name wuauserv -StartupType ManualSet-Service -Name wuauserv -StartupType Disabled
Script de mise à jour d'Active Directory
Pour la mise à jour de compte utilisateur, attribut titre et numéro de mobile, d'après le nom du compte et une fichier :
Import-Csv "D:\script\util-maj-tel.csv" | foreach {Set-ADUser -Identity $_.SamAccountName –Title $_.Title -MobilePhone $_.MobilePhone}
Script de nettoyage de contenu de fichier
# Traitement de texte sur fichier brut (enlever les lignes qui contiennent les mots ou expressions indiquées) ; le nouveau fichier est "fichier2.txt"
# l'expression "^[?]" indique une ligne commençant par un point d'interrogation.
# la barre verticale sépare les expressions recherchées ; les espaces sont pris en compte.
$fichier = get-content "c:\tmp\scores.txt" | where {$_ -notmatch "^[?]|putain|bite|caca| cul| chauve| mere"}
set-content fichier2.txt $fichier
Script de suppression de fichier
# Auteur : Ph. Page
# Création : 01/12/2021
# Modification :
#
# Script de suppression de fichiers de façon récursive !
#
Clear-Host
$CheminListe = @(
'C:\test\dossier1',
'C:\test\qcm',
'C:\test\Rufus'
)
Clear-Host
Write-Host "Demande de confirmation de suppression des fichiers des dossiers suivants :"
Write-host $CheminListe -Separator "`n"
$Reponse = Read-Host "`nEtes-vous sûr cette action ? (O/N)"
if ($reponse -eq "O") {
Write-Host "`n==> Traitement lancé..."
foreach ($Chemin in $CheminListe) {
if (Test-Path $Chemin) {
Get-ChildItem -file -recurse -Force -path $chemin | Remove-Item
#Get-ChildItem -file -recurse -Force -path $chemin
}
else {
Write-Host "`tLe dossier suivant n'existe pas ! $Chemin"
}
}
Write-Host "==> Traitement terminé."
}
else {
Write-Host "Traitement non lancé."
}
Fenêtre de dialogue

Création de fenêtre de dialogue :
Fenêtre de dialogue et sélection multiple
# Original example posted at http://technet.microsoft.com/en-us/library/ff730950.aspx
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
# Fonction pour la création de boite de message
function Show-Message {
param (
[string]$Message = "Veuillez entrer votre message",
[string]$Titre = "Titre de la fenêtre",
[switch]$OKCancel,
[switch]$AbortRetryIgnore,
[switch]$YesNoCancel,
[switch]$YesNo,
[switch]$RetryCancel,
[switch]$IconErreur,
[switch]$IconQuestion,
[switch]$IconAvertissement,
[switch]$IconInformation
)
# Affecter la valeur selon le type de boutons choisis
if ($OKCancel) { $Btn = 1 }
elseif ($AbortRetryIgnore) { $Btn = 2 }
elseif ($YesNoCancel) { $Btn = 3 }
elseif ($YesNo) { $Btn = 4 }
elseif ($RetryCancel) { $Btn = 5 }
else { $Btn = 0 }
# Affecter la valeur pour l'icone
if ($IconErreur) {$Icon = 16 }
elseif ($IconQuestion) {$Icon = 32 }
elseif ($IconAvertissement) {$Icon = 48 }
elseif ($IconInformation) {$Icon = 64 }
else {$Icon = 0 }
# Charger la biblithèque d'objets graphiques Windows.Forms
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
# Afficher la boite de dialogue et renvoyer la valeur de retour (bouton appuyé)
$Reponse = [System.Windows.Forms.MessageBox]::Show($Message, $Titre , $Btn, $Icon)
Return $Reponse
}
# Fin de la fonction pour la création de boite de message
# Création de la fenêtre de dialogue
$hauteurfenetre = 250
$form = New-Object System.Windows.Forms.Form
$form.Text = "Profils à supprimer"
$form.Size = New-Object System.Drawing.Size(320,$hauteurfenetre)
$form.StartPosition = "CenterScreen"
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(75,($hauteurfenetre-80))
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $OKButton
$form.Controls.Add($OKButton)
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(150,($hauteurfenetre-80))
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = "Cancel"
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $CancelButton
$form.Controls.Add($CancelButton)
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = "Sélectionner les profils à supprimer ; sélection multiple"
$form.Controls.Add($label)
$listBox = New-Object System.Windows.Forms.Listbox
$listBox.Location = New-Object System.Drawing.Point(10,40)
$listBox.Size = New-Object System.Drawing.Size(280,($hauteurfenetre-120))
$listBox.SelectionMode = "MultiExtended"
## Exemple pour la suppression de profil local # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# $profileliste = Get-WmiObject -ClassName Win32_UserProfile | Where-Object {$_.special -ne "true"} | foreach localpath
#
# foreach ($profile in $profileliste) {
# $listBox.Items.Add($profile)
# }
## à compléter...
## Exemple pour la suppression de dossier # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
$dossierliste = Get-childitem "c:\"
foreach ($dossier in $dossierliste) {
$listBox.Items.Add($dossier)
}
$form.Controls.Add($listBox)
$form.Topmost = $True
$result = $form.ShowDialog()
if ($result -eq [System.Windows.Forms.DialogResult]::OK) {
$x = $listBox.SelectedItems
if ($x.count -eq 0) {
$reponse = show-Message -Message "Aucun élément de sélectionné !" -Titre "Sélection" -IconAvertissement
}
else {
$maliste = $x -join "`n"
# $x
$reponse = show-Message -Message "Confirmez-vous la suppression des éléments ci-dessous ?`n`n$maliste" -Titre "Confirmation" -YesNo -IconQuestion
if ($reponse -eq "Yes") {
foreach ($elem in $x) {
Get-ChildItem "c:\$elem"
}
}
else {
$reponse = show-Message -Message "Suppression annulée !" -Titre "Annulation" -IconAvertissement
}
}
}
Image et redimensionnement
PowerShell et fonction :