Powershell
powershell definitions | |||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PowerShell | PowerShell 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 -detailed | obtenir 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 | ??? | ||||||||||||||||||||||||||||||
cmdlet | une 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 | |||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||
get-alias | affiche 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_ISE | dans 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é/regroupements | Ces regroupements des verbes
| Alias Children Command Content Drive History Item Location Object Property PropertyValue Provider RunSpace Variable | |||||||||||||||||||||||||||||
provides | dans 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'objet | Un 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. | ||||||||||||||||||||||||||||||
drive | Un espace d'objet est un ensemble d'objets organisés en hiérarchie. Cette hiérarchie est appelée un Drive. | ||||||||||||||||||||||||||||||
path | La 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 commande | cat "fichier" | grep momo envoie la sortie de cat a la commande grep qui va rechercher momo | |||||||||||||||||||||||||||||
fsutil | cré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 | -? | /? | ||||
-ExecutionPolicy | Définit les stratégies d'exécution PowerShell pour les ordinateurs Windows. | |||
Bypass | Rien 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. | |||
-NoLogo | Masque la bannière de copyright au démarrage. | |||
-NoExit | Ne quitte pas après l’exécution de commandes de démarrage. | |||
-Sta | Dé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). | |||
-Mta | Dé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). | |||
-NoProfile | Ne charge pas le profil PowerShell. | |||
-NonInteractive | Ne 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 majuscule | Ré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ème | Résultat : "lo" | ||
"Hello".Substring(3,1) | Retourne 1 caractère en partant du 3ème | Résultat : "l" | ||
"Hello".Insert(3, "INSERTED") | Insère le mot "INSERTED" à la 3ème position | Résultat : "HelINSERTEDlo" | ||
"Hello".Length | Retourne le nombre de caractère | Ré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 virgule | Résultat : Tableau "Server1", "Server2", "Server3" | ||
" remove space at ends ".Trim() | Supprime tous les espaces avant et après la chaîne de caractère | Ré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ères | Exemple : $Ma_Variable = "Vive" + " " + "PowerShell" => $Ma_Variable = "Vive PowerShell" | ||
* | permet la multiplication, la répétition de chaîne | Exemple : $Ma_Variable = "Rouleau de printemps " * 3 => $Ma_Variable = "Rouleau de printemps Rouleau de printemps Rouleau de printemps " | ||
les opérateurs | ||||
-eq | Comparaison d'égalité : | |||
-ne | Comparaison de différence | |||
-gt | Comparaison 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 | |||
'b | Un retour arrière | |||
'f | Un saut de page | |||
'n | Une nouvelle ligne | |||
'r | Un retour chariot | |||
't | Une tabulation | |||
%logonserver% | l'active directory | |||
%username% | le nom de l'utilisateur | |||
%computername% | le nom net bios |
Les logs | |||
---|---|---|---|
Get-WindowsUpdateLog | génère le fichier des log de windows update |
Les fichier | |||
---|---|---|---|
get-content | lire 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 monfichierdir | Dir | Out-File "C:\MonFichierDir.txt" | |
ADD-content | ecrire dans un fichier | ADD-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 | ||
exemple | p.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 2 | passe powershell en mode debug | Set-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-Object | Get-Service | %{ $_.Name } | |
? | Where-Object | Get-Process | Where-Object {$_.WorkingSet -GT 250MB} | |
ac | Add-Content | ||
asnp | Add-PSSnapin | ||
cat | Get-Content | ||
cd | Set-Location | ||
CFS | ConvertFrom-String | ||
chdir | Set-Location | ||
clc | Clear-Content | ||
clear | Clear-Host | ||
clhy | Clear-History | ||
cli | Clear-Item | ||
clp | Clear-ItemProperty | ||
cls | Clear-Host | ||
clv | Clear-Variable | ||
cnsn | Connect-PSSession | ||
compare | Compare-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 | |||
$Home | Contient le chemin d'accès au répertoire de base de l'utilisateur courant | ||
$Profile | chemin d'acces au profil windows-powershell | ||
$PSScriptRoot | indique 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) | |||
$ConfirmPreference | comment powershell demande ou non confirmation avant d'éxécuter une commande | ||
$ErrorActionPreference | comportement façe à une erreur non fatale | ||
$DebugPreference | comportement façe au message de deboggage | ||
$VerbosePreference | comportement façe aux messages verbeux | ||
$WhatifPreference | determine si le parametre watif est activé | ||
$PSEmailServer | indique le serveur de messagerie par default | ||
$PSDefaultParameterValues | specifie les valeurs par default de certaines cmdlets ou fonctions | ||
$FormatEnumerationLimit | specifie le nombre d'éléments affichés au sein d'une même propriété | ||
$ErrorView | le 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 disponibles | get-Member -InputObject $tabbint | ||
les dictionnaires | |||
definition | commence 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-Member | permet d'obtenir la listes des opérations sur un dictionnaire | ||
keys | permet de lister les clefs hash.valeur1 donnera 1 hash["valeur1"] donneras 1 | ||
Values | permet 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 | |||
-split | permet de séparer une chaine -split "windows powershell" = {windows,powershell} 1,2,3,4,5 -split ',' {1 2 3 4 5} | ||
-join | permet 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-PSProvider | les fournisseurs sont une manière de mieux gérer l'acces aux magasin de donnée | cd Alias: | |
Alias | permet d'acceder aux alias | cd Alias: | |
Environnement | permet d'accèder aux variables d'environnement | cd Environnement: | |
FileSystem | permet d'acceder au repertoire et aux fichiers du système d'exploitation | cd FileSystem: | |
Registry | permet d'accèder à la base de registre | cd Registry: | |
Variable | permet d'accèder aux variables windows powershell | cd Variable: | |
WSMan | Permet d'accèder aux informations de configurations WS-Management | cd WSMan: | |
les drives | |||
Get-PSDrive | fourni des informations sur les lecteurs de la session actuel | ||
-PSProvider | liste uniquement les lecteurs pris en charge par un fournisseur en particulier | ||
New-PSDrive | permet de crée un drive powershell | ||
-Name | le nom du psdrive | ||
-PSProvider | le fournisseur associee | ||
-Root | le chemin | ||
Remove-PSDrive -Name <nom du drive> | permet de supprimer un drive | ||
get-childitem Get-Location Get-ItemProperty |
l'encryption | |||
---|---|---|---|
Get-FileHash <filepath> -Algorithm MD5 | permet d'obtenir le hash d'un fichier |