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 -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???
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
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-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
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
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
-----------------------------