Powershell






powershell definitions
PowerShellPowerShell s'appuie sur la plateforme .NET plus particulièrement sur le Framework 2.0, ce qui signifie que tout est objet sous PowerShell (aussi nommé PS).Bien que PowerShell.exe soit un programme Win32 il est plus proche d'un loader du runtime .NET, vous pouvez utiliser le debugger fournis avec .NET 2.0 pour confirmer que PowerShell.exe est bien une application gérée.
%0 obtenir le chemin du fichier courant
%~n0 le chemin du fichier sans l'extension
%~n0%~x0 le nom du fichier avec l'extention
%~nx0 le nom du fichier avec l'extention
Get-Command <ta commande > | Get-Help -detailedobtenir l'aide détaillé de la commande
Get-Command | Foreach {Get-Help $_ -detailed}obtenir les aides détaillé dans une boucle
dism /get-features /online???
cmdletune cmdlet (commande-let) est une commande batch spécialisé dans l'exécution d'une tache spécifique, une cmdlet ne crée pas de nouveau processus
convention de nommage: : Verbe-nom
exemple: get-xxx, set-xxx add-xxx
3 prérogatives:
la classe doit dériver directement ou indirectement de System.Management.Automation.Cmdlet
l'attribut [System.Management.Automation.Cmdlet(…)] doit être défini sur la classe
une ou plusieurs des méthodes virtuelles suivantes : BeginProcessing(), ProcessRecord() et EndProcessing() doivent être surchargées

$ps=get-process
$ps[0]
$ps[0].processname
Nom de 'domaine' Description Exemples
Common Parameters Les paramètres communs suivants sont présents sur tous les cmdlets et la redéclaration de ces noms de paramètres provoquera une erreur lors de l'enregistrement du Cmdlet. Debug, Verbose, ErrorAction,…
ShouldProcess Parameters Les paramètres ShouldProcess suivants sont présents quand le cmdlet implémente la méthode ShouldProcess. Quand cette méthode est implémentée la redéclaration de ces noms de paramètres provoquera une erreur lors de l'enregistrement du Cmdlet. Confirm (Demande la confirmation d'une action),
WhatIf (Simule l'exécution de l'action).
Activity Parameters Paramètres utilisés pour préciser le comportement du Cmdlet. Compress, CaseSensitive, Retry, Notify …
Date and Time Parameters Paramètres utilisés pour manipuler l'information de date et d'heure lors d'une consultation ou création. After, Before, Accessed.
Format Parameters Paramètres utilisés pour le formatage ou la génération de données. As, Binary, NewLine, …
Property Parameters Paramètres utilisés pour spécifier des propriétés du Cmdlet. LogName, Property, Ownern, …
Quantity Parameters Paramètres utilisés pour spécifier la portée ou l'étendue d'une commande. All, Scope, Allocation, …
Resource Parameters Paramètres utilisés pour les ressources, telles que l'assemblage qui contient la classe du Cmdlet et l'application hébergeant le Cmdlet. Assembly, Class, Culture, Interface, …
Security Parameters Paramètres utilisés pour la sécurité, comme ceux indiquant la clé de certificat et les informations de privilèges. ACL, CertFile, CertStoreLocation, …
get-aliasaffiche les alias
get-command
get-command -Name [string] -Type [CommandTypes] -Verb [string] -Noun [string]
get-command get-command
affiche les cmdlet, elles manipulent et renvoient des instances de classes .NET. Dans une certaine mesure il n'est plus nécessaire de spécialiser les commandes puisque l'on accède à l'ensemble des informations disponibles de l'objet manipulé.
Get-Help ou Get-Command (-Noun -Verb)
get-help ls
affiche l'aide relative à une commande donnée
get-member
$a=get-item c:\windows
$a | get-member
permet d'afficher les propriété d'un objet
PowerShell_ISEdans un terminal lance l'environnement de développement powershell
importer [System.Reflection.Assembly] = > nom de classe
LoadWithPartialName = > le nom d'une méthode statique effectuant le chargement
System.Windows.Forms = >le nom de l'assembly hébergeant la classe Form
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
les mots réservé/regroupementsCes regroupements des verbes
Common Object Verbs Certains de ces derniers seront employés avec presque chaque nom.
Par exemple beaucoup de noms supporteront les verbes New, Remove.
Data verbs Ceux-ci sont employés pour les traitements des données.
Par exemple Compare et Merge.
Lifecycle verbs Ceux-ci concernent l'activité d'un Cmdlet.
Les verbes de cycle de vie incluent Start, Stop et Resume.
Diagnostic verbs Spécifie des opérations de diagnostiques.
L'ensemble inclut Measure, Test et Debug.
Communications verbs Spécifie des opérations de communications.
Par exemple Send et Receive.
Security Verbs PowerShell utilise cet ensemble pour définir les verbes à appliquer à la sécurité.
Par exemple Grant et Revoke.
Alias
Children
Command
Content
Drive
History
Item
Location
Object
Property
PropertyValue
Provider
RunSpace
Variable
providesdans le cas du provider du système de fichier, il crée un lecteur pour chaque disque de votre système. En conséquence, si vous avez un lecteur C et un lecteur D, le provider du système de fichier créera des lecteurs PowerShell appelés C et D. En fait, toutes les fois qu'un nouveau lecteur est créé par Windows, y compris un lecteur partagé sur un serveur, le provider du système de fichier crée un lecteur PowerShell avec le même nom. un providers est la manière d'accèder à l'information
espace d'objetUn espace d'objet est un ensemble d'objets organisés en hiérarchie. Cette hiérarchie est appelée un Drive."Drive:Path".Il peut y avoir à chaque position un ou plusieurs des éléments suivants : Children, Item, Property, Content, Permission, Relation.
driveUn espace d'objet est un ensemble d'objets organisés en hiérarchie. Cette hiérarchie est appelée un Drive.
pathLa hiérarchie est composée d'un ensemble de positions identifiées par des chaînes de caractère appelées Path.
Le pipelinening avec "|" permet d'envoyer la sortie d'une commande au début d'une autre commandecat "fichier" | grep momo
envoie la sortie de cat a la commande grep qui va rechercher momo
fsutilcrée un fichier de taille choisie en octet fsutil file createnew fichierde1G.txt 1073741824





Processus Powershell
PowerShell[.exe]
				    [-PSConsoleFile <file> | -Version <version>]
				    [-NoLogo]
				    [-NoExit]
				    [-Sta]
				    [-Mta]
				    [-NoProfile]
				    [-NonInteractive]
				    [-InputFormat {Text | XML}]
				    [-OutputFormat {Text | XML}]
				    [-WindowStyle <style>]
				    [-EncodedCommand <Base64EncodedCommand>]
				    [-ConfigurationName <string>]
				    [-File - | <filePath> <args>]
				    [-ExecutionPolicy <ExecutionPolicy>]
   				    [-Command - | { <script-block> [-args <arg-array>] }
		  	            | { <string> [<CommandParameters>] } ]

				PowerShell[.exe] -Help | -? | /?
-ExecutionPolicyDéfinit les stratégies d'exécution PowerShell pour les ordinateurs Windows.
BypassRien n'est bloqué et il n'y a pas d'avertissements ou d'invites.
[-PSConsoleFile <file> | -Version <version>]Charge le fichier de console PowerShell spécifié. Entrez le chemin d’accès et le nom du fichier de console. Pour créer un fichier de console, utilisez l’applet de commande Export-Console dans PowerShell.
-Version <version>Démarre la version spécifiée de PowerShell. Les valeurs valides sont 2.0 et 3.0. La version que vous spécifiez doit être installée sur le système. Si Windows PowerShell 3.0 est installé sur l’ordinateur, « 3.0 » est la version par défaut. Sinon, « 2.0 » est la version par défaut.
-NoLogoMasque la bannière de copyright au démarrage.
-NoExitNe quitte pas après l’exécution de commandes de démarrage.
-StaDémarre PowerShell à l’aide d’un cloisonnement monothread. Dans Windows PowerShell 2.0, le cloisonnement par défaut est multithread (MTA). Dans Windows PowerShell 3.0, le cloisonnement par défaut est monothread (STA).
-MtaDémarre PowerShell à l’aide d’un cloisonnement multithread. Ce paramètre est introduit dans PowerShell 3.0. Dans PowerShell 2.0, le cloisonnement par défaut est multithread (MTA). Dans PowerShell 3.0, le cloisonnement par défaut est monothread (STA).
-NoProfileNe charge pas le profil PowerShell.
-NonInteractiveNe présente pas d’invite interactive à l’utilisateur.
-InputFormat {Text | XML}Décrit le format des données envoyées à PowerShell. Les valeurs valides sont « Text » (chaînes de texte) ou « XML » (format CLIXML sérialisé).
-OutputFormat {Text | XML}Détermine la mise en forme de la sortie de PowerShell. Les valeurs valides sont « Text » (chaînes de texte) ou « XML » (format CLIXML sérialisé).
-WindowStyle <Window style>Définit le style de fenêtre pour la session. Les valeurs valides sont Normal, Hidden, Minimized et Maximized.
-EncodedCommand <Base64EncodedCommand>Accepte une version de chaîne codée en base 64 d’une commande. Utilisez ce paramètre pour envoyer à PowerShell des commandes qui nécessitent des guillemets ou des accolades complexes. La chaîne doit être mise en forme à l’aide de l’encodage de caractères UTF-16LE.
-ConfigurationName <string>Spécifie un point de terminaison de configuration dans lequel PowerShell est exécuté. Il peut s’agir de n’importe quel point de terminaison inscrit sur l’ordinateur local, y compris les points de terminaison de communication à distance PowerShell par défaut ou un point de terminaison personnalisé disposant de fonctionnalités de rôle utilisateur spécifiques.
-Fichier - | <filePath> <args>Si la valeur du fichier est « - », le texte de la commande est lu à partir d’une entrée standard. L’exécution powershell -File - sans entrée standard redirigée démarre une session régulière. Il s’agit de la même chose que de ne pas spécifier le paramètre File du tout.
Si la valeur du fichier est un chemin d’accès de fichier, le script s’exécute dans l’étendue locale





les chaines de caractères
"Hello".ToLower()Mettre en minuscule Résultat : "hello"
"Hello".ToUpper()Mettre en majusculeRésultat : "HELLO"
"Hello".EndsWith('lo')Vérifie si la chaîne de caractère se termine par Résultat : True
"Hello".StartsWith('he') Vérifie si la chaîne de caractère commence par "lo"Résultat : False
"Hello".toLower().StartsWith('he') Vérifie si la chaîne de caractère en minuscule commence par "lo"Résultat : True
"Hello".Contains('l') Vérifie si la chaîne de caractère contient "l" Résultat : True
"Hello".LastIndexOf('l')Donne le dernier emplacement du caractère "l" Résultat : 4
"Hello".IndexOf('l')Donne le premier emplacement du caractère "l"Résultat : 3
"Hello".Substring(3)Retourne les caractères a partir du 3èmeRésultat : "lo"
"Hello".Substring(3,1)Retourne 1 caractère en partant du 3èmeRésultat : "l"
"Hello".Insert(3, "INSERTED")Insère le mot "INSERTED" à la 3ème positionRésultat : "HelINSERTEDlo"
"Hello".Length Retourne le nombre de caractèreRésultat : 5
"Hello".Replace('l', 'x')Remplace les "l" par des "x"Résultat : "Hexo"
"Server1,Server2,Server3".Split(',') Sépare la chaîne de caractère en plusieurs avec comme séparateur la virguleRésultat : Tableau "Server1", "Server2", "Server3"
" remove space at ends ".Trim()Supprime tous les espaces avant et après la chaîne de caractèreRésultat : "remove spaceat ends"
remove space at ends ".Trim(' rem')Supprime tous les espaces du début de la chaîne de caractère : " Résultat : "remove spaceat ends "
manipulation de plusieurs chaînes
+permet de concaténer deux chaînes de caractèresExemple : $Ma_Variable = "Vive" + " " + "PowerShell" => $Ma_Variable = "Vive PowerShell"
*permet la multiplication, la répétition de chaîneExemple : $Ma_Variable = "Rouleau de printemps " * 3 => $Ma_Variable = "Rouleau de printemps Rouleau de printemps Rouleau de printemps "
les opérateurs
-eq Comparaison d'égalité :
-neComparaison de différence
-gtComparaison de supériorité
-ge Comparaison de supériorité ou égalité
-lt Comparaison d'infériorité
-le Comparaison d'infériorité ou égalité
le "i" permet de ne pas tenir compte de la casse
Le "c" permet de tenir compte de la casse
les echappement
'0 La valeur Null
'a Une alerte
'bUn retour arrière
'f Un saut de page
'nUne nouvelle ligne
'r Un retour chariot
'tUne tabulation
%logonserver%l'active directory
%username%le nom de l'utilisateur
%computername%le nom net bios





Les logs
Get-WindowsUpdateLoggénère le fichier des log de windows update





Les fichier
get-contentlire un fichier$MonFichier = get-content <EmplacementFichier >
foreach { $_ -replace }rechercher remplacer$remplacer = Get-Content < fichier a modifier> | foreach { $_ -replace "chaine 1","chaine 2" }
Set-Content -Path <fichier a modifier> -Value $remplacer
Out-File redirige la sortie de DIR vers monfichierdirDir | Out-File "C:\MonFichierDir.txt"
ADD-content ecrire dans un fichierADD-content -path "C:\Fichier_de_test.txt" -value "Test d'écriture"
equivalent de sed :Get-Content input.txt | %{$_ -replace "old", "new"} | Set-Content output.txt
exemplep.ex.@echo offset oldtxt=May the Force be with Youset newtxt=%oldtxt:th=l%Remplace tous les "th" par des "l"echo %newtxt% va donner :May le Force be wil You
Il existe aussi des fonctions d'extractions de nom et/ou extension et/ouchemin dans des variables contenant un nom de chemin complet.Cela s'applique :- aux variables de boucle FOR- aux paramètres %1, %2 ..., passés en paramètres%~I - étend %I en supprimant les guillemets (")
%~fI - étend %I en nom de chemin d'accès reconnu
%~dI - étend %I en lettre de lecteur uniquement
%~pI - étend %I en chemin d'accès uniquement
%~nI - étend %I en nom de fichier uniquement
%~xI - étend %I en extension de fichier uniquement
%~sI - chemin étendu contenant uniquement des noms courts
%~aI - étend %I en attributs du fichier
%~tI - étend %I en date/heure du fichier
%~zI - étend %I en taille du fichier
%~$PATH:I - parcourt les répertoires de la variabled'environnement PATH et étend %I en nom dupremier fichier reconnu trouvé. Si le nom de lavariable d'environnement n'est pas défini ouque le fichier n'est pas trouvé par la recherche,alors ce modificateur étend en chaîne vide
Vous pouvez combiner les modificateurs pour obtenir des résultats composés :
%~dpI - étend %I en lettre de lecteur et chemin d'accès uniquement
%~nxI - étend %I en nom de fichier et extension uniquement
%~fsI - étend %I en nom de chemin complet avec noms courtsuniquement
%~dp$PATH:i - parcourt les répertoires listés dans la variabled'environnement PATH à la recherche de %I et étenden lettre de lecteur du premier trouvé.
%~ftzaI - étend %I en DIR comme ligne en sortie





Mode debug
Set-PSDebug -trace 2passe powershell en mode debugSet-PSDebug -trace 0 pour enlever le débuggage





 les alias
bloc de script {}le bloc de script permet d'executer une liste d'instruction le & permet de le rendre executable &{}&{Get-Alias}
get-Alias les alias sont des racourcis vers les cmdlets
%ForEach-ObjectGet-Service | %{ $_.Name }
?Where-ObjectGet-Process | Where-Object {$_.WorkingSet -GT 250MB}
acAdd-Content
asnpAdd-PSSnapin
catGet-Content
cdSet-Location
CFSConvertFrom-String
chdirSet-Location
clcClear-Content
clearClear-Host
clhyClear-History
cliClear-Item
clpClear-ItemProperty
clsClear-Host
clv Clear-Variable
cnsnConnect-PSSession
compareCompare-Object
get-alias | select-object -first 20





les variables
$$ contien le dernier jeton (le dernier bloc de caratère) de la ligne de commande au cours de la session
$^contien le permier jeton de la dernière ligne de commande au cours d'une session
$?contient l'état d'execution de la dernière opération(true si ça s'est bien passé false sinon)
$_objet actif traité par le pipeline
$Args
$LastExitCode
$error
$HomeContient le chemin d'accès au répertoire de base de l'utilisateur courant
$Profilechemin d'acces au profil windows-powershell
$PSScriptRootindique le répertoire à partir duquel le script est exécuté
les variables de préférences (défini le comportement de powershell dans une situation donnée)
$ConfirmPreferencecomment powershell demande ou non confirmation avant d'éxécuter une commande
$ErrorActionPreferencecomportement façe à une erreur non fatale
$DebugPreferencecomportement façe au message de deboggage
$VerbosePreferencecomportement façe aux messages verbeux
$WhatifPreferencedetermine si le parametre watif est activé
$PSEmailServerindique le serveur de messagerie par default
$PSDefaultParameterValuesspecifie les valeurs par default de certaines cmdlets ou fonctions
$FormatEnumerationLimitspecifie le nombre d'éléments affichés au sein d'une même propriété
$ErrorViewle format d'affichage des erreurs
les variables d'environnement
get-childitem env:permet d'obtenir les variables d'environnement
HOME, HOMEPATH, PATH, USERNAME etc...
les tableau
création d'un tableau$tabint=1,2,3,4,5,6,7,8,9,10
$tabint=1..4
$tabstring="1","2","3","4"
appel$tabint[0] affichera : 1
$tabint[2] affichera : le second element (a partir de 0)
$tabint[-1] affichera : le dernier element 10
$tabint[-4..-1] affichera : les 4 dernier elements du tableau
$tabint[-4..4] affichera : 7,8,9,10,1,2,3,4,5
operation disponiblesget-Member -InputObject $tabbint
les dictionnaires
definitioncommence par @ et separe les [clef,valeur] par des ;
$hash=@{valeur1="1";valeur2="2";valeur3="bleue";valeur4="test";}
attribut [ordered]permet d'ordonner un dictionnaire selon l'ordre précis
$hash |Get-Memberpermet d'obtenir la listes des opérations sur un dictionnaire
keyspermet de lister les clefs
hash.valeur1 donnera 1
hash["valeur1"] donneras 1
Valuespermet de lister les valeurs
Add(clef,valeur)permet d'ajouter une paire
Remove(clef)permet de supprimer une paire
keys
keys
keys
les opérateurs
arithmétique+ addition
- soustraction
/ division
* multiplication
affectation= affecter une valeur
+= incrémente d'une valeur
-= décrémente d'une valeur
*= multiplie par une valeur
/= divise par une valeur
++ augmente d'une unitée
comparaison-eq egal à
-ne non égal à
-gt plus grand que
-ge plus grand ou égal
-lt plus petit que
-le plus petit ou égal
-like comme (-like "active*")
-notlike pas comme
-match recherche une expression régulière
-notmatch ne trouve pas l'expression
-replace remplace une occurence
les opérateurs logiques
-and(7 -eq 7) -and (8 -ne 7 ) => true
-or(7 -eq 7) -or (8 -eq 7 ) => true
-not / !-not (19 -lt 42) => false
les opérateurs de fractionnement et de jointure
-splitpermet de séparer une chaine
-split "windows powershell" = {windows,powershell}
1,2,3,4,5 -split ',' {1 2 3 4 5}
-joinpermet de joindre des objets
-join "windows", " powershell" = windows powershell
1,2,3,4,5 -join ':' {1:2:3:4:5}
..opérateur de plage
.opérateur de déférencement
$()opérateur de sous expression
|pipeline
[]opérateur d'indexe





les fournisseurs
Get-PSProviderles fournisseurs sont une manière de mieux gérer l'acces aux magasin de donnéecd Alias:
Aliaspermet d'acceder aux aliascd Alias:
Environnementpermet d'accèder aux variables d'environnementcd Environnement:
FileSystempermet d'acceder au repertoire et aux fichiers du système d'exploitationcd FileSystem:
Registrypermet d'accèder à la base de registrecd Registry:
Variablepermet d'accèder aux variables windows powershellcd Variable:
WSManPermet d'accèder aux informations de configurations WS-Managementcd WSMan:
les drives
Get-PSDrivefourni des informations sur les lecteurs de la session actuel
-PSProviderliste uniquement les lecteurs pris en charge par un fournisseur en particulier
New-PSDrivepermet de crée un drive powershell
-Namele nom du psdrive
-PSProviderle fournisseur associee
-Rootle chemin
Remove-PSDrive -Name <nom du drive>permet de supprimer un drive
get-childitem
Get-Location
Get-ItemProperty





l'encryption
Get-FileHash <filepath> -Algorithm MD5permet d'obtenir le hash d'un fichier