Get-ExecutionPolicy -List afficher les stratégies d’exécution pour chaque étendue
Set-ExecutionPolicy / empêcher exécution de codes malveillants
4 niveaux d’accès aux scripts PowerShell : restricted/all signed/ remote signed (exé sript ok mais si vient d’internet doit ê signé)/unrestricted
Set-ExecutionPolicy restricted
PS> Unblock-File -Path .\Start-ActivityTracker.ps1 pour ne débloquer qu’un scripte en maintenant politique restrictive
Automatisation : planificateur de tâches
-> tâche de base -> « Programme/script » -> powershell et dans arguments :
-File Chemin \script.ps1
Testeur de script PS : PESTER
cd .\Users\VotreNomDUtilisateur\Documents\
se deplacer dans documents (powerwhell)
Pour exécuter le script :
powershell -File « chemin/vers/le/script.ps1 »
.\chemin\vers\le\script.ps 1
Copy-item copier (comme « cp »)
Robocopy copier: robocopy [[ …]] []
Ex :robocopy c:\reports « \marketing\videos » yearly-report.mov /mt /z
copier un fichier nommé yearly-report.mov avec multithreading pour de meilleures performances (avec le paramètre /mt ) et la possibilité de redémarrer le transfert en cas d’interruption (avec le paramètre /z )
clear-host : permet de nettoyer la console.
Write-Host = Write Output : permet d’écrire dans la console.
Read-Host attend saisie de l’utilisateur.
Get-Date : obtenir la date
Variable
$input = Read-Host -Prompt « Voulez vous ouvrir google.com ? (Y/N) »
forcer type [string]$MaVariable = « … »
stocker resultat d’une cmd dans variable
variables d’envir
« Get-ChildItem Env: » (= gci env:) lister ls var. d’env.
$env:[nom_de_variable]
ComputerName : nom de l’ordinateur
LogonServer : serveur utilisé pour authentifier la session actuelle, généralement un contrôleur de domaine Active Directory en entreprise, ou l’hôte local s’il s’agit d’une session locale
SystemDrive : lettre du lecteur où est installé Windows, généralement « C: »
Username : nom de l’utilisateur actuellement connecté sur la machine
UserProfile : chemin vers le profil Windows de l’utilisateur
UserDnsDomain : le nom complet (nom DNS) lors de la connexion à un domaine
UserDomain : le nom court du domaine Active Directory
Processor_Architecture : architecture du processeur, par exemple AMD64
CMD (DOS) %computername%, %username% (=%LogonUser%)
Conditions
if (…){
}else{
}
if(($input -eq « y »)){
echo « vous avez ouvert la page le «
Get-Date
[system.Diagnostics.Process]::Start(« https://www.google.com »)
}else{
echo « une prochaine fois ! »
}
Boucle
For ( [elements] in [collection] ){
…
}
switch (cas)
switch ( $operateur ){
« + » {…
}
« – » {…
}
default{…
}
}
Ex:
Met le script en pause tant que l’utilisateur n’appuie pas sur une touche :
Read-Host
Demande à l’utilisateur de renseigner la première valeur :
$valeur1 = read-host « Entrez la valeur 1. »
Demande à l’utilisateur de renseigner la 2° valeur :
$valeur2 = read-host « Entrez la valeur 2. »
Demande à l’utilisateur de renseigner l’operateur de calcul :
$operateur = read-host « Entrez l’opérateur de calcul. »
Write-Host « »
Write-Host « ——————————————————–«
switch($operateur){
« + » {
Write-Host » Addition des valeurs : »
[int]$valeur1 + [int]$valeur2
}
« -« {
Write-Host » Soustraction des valeurs : »
[int]$valeur1 – [int]$valeur2
}
default{
Write-Host « opérateur incorrect: »
}ue
while / until
*Gestion des erreurs -ErrorAction et -ErrorVariable
Get-ADUser -Identity « UtilisateurInexistant » -ErrorAction Stop -ErrorVariable erreurAD
if ($erreurAD) {
Write-Host « Erreur lors de la recherche de l’utilisateur : » $erreuAD
}
Ici, -ErrorAction Stop force PowerShell à arrêter l’exécution dès qu’une erreur se produit, et -ErrorVariable erreurAD stocke l’erreur dans la variable $erreurAD.
*try/catch/finaly
Try : on essaye de récupérer l’utilisateur avec Get-ADUser. Si l’utilisateur est trouvé, son nom est affiché. Si une erreur survient, elle est immédiatement capturée.
Catch : si l’utilisateur n’est pas trouvé ou qu’une autre erreur se produit, un message d’erreur est affiché pour informer de l’échec de la recherche.
Finally : ce bloc s’exécute toujours, que le try réussisse ou non. Il affiche un message indiquant que la recherche est terminée.
*icacls :
icacls $cheminDossier /inheritance:r # désactive héritage
icacls $cheminDossier /remove:g « Users » /T # Supprime les permissions existante
$utilisateurAD = « $($utilisateur.SamAccountName) »
icacls $cheminDossier /grant « $utilisateurAD:(OI)(CI)F » /T # défini les droits en contrôle total pour utilis.
icacls $cheminDossier /grant « $groupeAD:(OI)(CI)M » /T # défini les droits en modif pour groupeAD
(OI)(CI) : Héritage des objets (fichiers/dossiers) = ce dossier, ss-doss, fichiers
(OI) = ce dossier, fichiers
(CI) = ce dossier, ss-doss
aucun = ce dossier seulement
(S/E) = ss-doss ?? voir doc Microsoft
/grant:r -> :r pour ajouter les nouvelles autorisations, sans -> remplacer
F : Full control (utilisateur)
M : Modify (lecture/écriture pour le groupe)
RX – Lecture et exécution de l’accès
R – Accès en lecture seule
W – Accès en écriture seule
/t Effectue l’opération sur tous les fichiers spécifiés dans le répertoire actif et ses sous-répertoires.
[/grant[ :r] <>:[…]] Accorde les droits d’accès utilisateur spécifiés. Les autorisations remplacent les autorisations explicites précédemment accordées.
L’ajout du :r signifie que les autorisations sont ajoutées à toutes les autorisations explicites précédemment accordées.
*NTFSSecurity :
Install-Module NTFSSecurity
Add-NTFSAccess –Path « C:\Partage\Public\ » –Account « utilisateur01@domaine.local » –AccessRights Modify
Remove-NTFSAccess –Path « C:\Partage\Public\ » –Account « utilisateur03@domaine.local » –AccessRights Modify
Get-NTFSEffectiveAccess C:\Partage\Personnel\utilisateur01
