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 |
Powershell
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'ad | |||
%username% | le nom de l'utilisateur | |||
%computername% | le nom net bios |
les logs
Les logs | |||
---|---|---|---|
Get-WindowsUpdateLog | génère le fichier des log de windows update |
Powershell
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 off set oldtxt=May the Force be with You set 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/ou chemin 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 variable d'environnement PATH et étend %I en nom du premier fichier reconnu trouvé. Si le nom de la variable d'environnement n'est pas défini ou que 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 courts uniquement %~dp$PATH:i - parcourt les répertoires listés dans la variable d'environnement PATH à la recherche de %I et étend en lettre de lecteur du premier trouvé. %~ftzaI - étend %I en DIR comme ligne en sortie |
debugging
Mode debug | |||
---|---|---|---|
Set-PSDebug -trace 2 | passe powershell en mode debug | Set-PSDebug -trace 0 | pour enlever le débuggage |