PowerShell

De Justine's wiki
Aller à la navigation Aller à la recherche

Introduction

La ligne de commande sous Windows a un peu évolué ; nous sommes passés du prompt MS-DOS (présent depuis 1981) à PowerShell en 2006. Le but :

  • Avoir plus de fonctionnalités (clairement inspiré des systèmes UNIX)
  • Avoir un langage objet
  • S'interfacer avec de nombreux outils Microsoft et autre
  • Avoir quelque chose de modulable et d'évolutif

Les versions

  • PS vers. 2 : Win7, 2008R2
  • PS vers. 3 : Win8, 2012
  • PS vers 4 : Win8.1, 2012 R2
  • PS vers 5 : Win10

Les fichiers powershell sont au format .ps1

Les cmdlet

Powershell est orienté objet, tout objet dans powersehll a des attributs / méthodes. On a le concept de cmdlet (commandlet) : c'est la plus petite unité de fonctionnalité dans PowerShell. Les cmdlet ne sont pas ensisbles à la casse et on l'autocomplétion. Les cmdlet sont constitués sous la forme verbe-nom, le verbe décrivant l'action à appliquer sur le nom.

Exemples de verbes : Add, Set, Get, Remove, Enable, Export...

Exemples de cmdlet : Add-Computer, Remove-ADUser, Get-ADUser, etc...

Get-childitem-----------> Sert à lister le contenu d’un repertoire

New-Item aaa.txt -type file –force -----------> Créer un nouveau fichier txt

Variables

Une variable est composée d'un $ suivi d'un nom, d'une affectation (=) et d'une valeur:

$mavariable = valeur

Ex : $maChaine = "abc"

Write-Host $maChaine

 

Quelques commandes

  • Get-ChildItem(Alias: gci, ls, dir): Cette cmdlet permet d’obtenir la liste des fichiers et dossiers présents dans le système de fichiers.
    • Ex: Get-ChildItemC:\Windows
  • Set-Location (Alias: sl, cd, chdir): Permet de se déplacer dans les l’arborescence des répertoires.
    • Ex: Set-Location  C:\Windows
  • Get-location (Alais: gl, pwd): Retourne l’emplacement actuel à l’intérieur d’une arborescence.
    • Ex: Get-Location
  • New-Item (Alias: ni, md): Permet de créer des répertoires et des fichiers.
    • Ex: New-Item –ItemType directory –Name Example
  • Write-Output (echo) : Ecrit dans la console (gère la redirection)
    • Ex: Write-Output "Hello World"
  • Get-command: Cette commande permet de découvrir toutes les commandes Powershell, les alias, les fonctions et les workflows sont également retournés.
    • Ex: Get-command –commandTypecmdlet; Get-command get-*
  • Get-Help: Fourni une aide sur les commandes. Windows PowerShell offre plusieurs niveaux de documentation d'aide: standard, détaillé (-Detailed) ,exemple (-Examples),full (-Full)...
    • Ex: Get-Help write-host –examples
  • Get-Member: Cette commande retourne toutes les propriétés et méthodes d’un objet ainsi que son type.
    • Ex: $a = ‘Hello world’$a | get-member
    • Ex: Get-Process | get-member
  • Get-Alias: Permet d’obtenir les alias de la session. Un alias est un autre nom que l’on attribue à une commande, une fonction, un script, un fichier exécutable ou un autre élément de commande.
    • Ex: gci l’alias de get-childit
  • Get-Process (alias ps) : équivalent d'un ps -e, liste les processus

! Contrairement à Bash, les arguments même longs ne prennent qu'un seul tiret : -commandType et pas --commandType

Le pipe |

Le pipe permet de passer un ou plusieurs objets à la commande qui suit.

Exemples:

<syntaxhighlight lang="powershell">

  • Get-Service WinRM| Restart-service
  1. Ici on récupère le service WinRM et on le redémarre.

Get-ChildItem| Where-Object {$_.Length –gt32KB}

  1. Ici on liste le contenu du repertoire courant uniquement pour les fichiers pesant plus de 32KB.

Get-Service | Where-Object {$_.Name -eq"WinRM"}

  1. Ici on liste le service qui porte le nom WinRM
  2. Note: $_ correspond à l’objet courant. Si c’est une liste on traite les objets les uns après les autres.

</syntaxhighlight>

Tri et forme

  • Format-List (Alias : fl) : Formate la sortie comme une liste de propriétés.
    • Ex : Get-ChildItem| fl
  • Format-Table (Alias : ft) : Formate la sortie comme une table avec les propriétés sélectionnées des objets dans chaque colonne.
    • Ex : Get-ChildItem| ft
  • Format-Wide (Alias : fw) : Formate la sortie comme une table multi colonne, mais seulement une propriété de chaque objet est affiché.
    • Ex : Get-ChildItem| format-wide-column2
    • Ex : Get-Service | fw-Property displayName–autosize
  • Select-Object (Alias : select) : Sélectionne des objets ou des propriétés
    • Ex : Get-ChildItem C:\Windows | Select-Object Name
  • Sort-Object (Alias : sort): Trie des objets dans l'ordre croissant à partir des valeurs de propriétés de l’objet.
    • Ex : Get-ChildItemC:\Windows | sort length -Descending
  • Where-Object (Alias : ?): Selectionne un object ense basantsur sespropriétés
    • Ex : Get-ChildItemC:\Windows | Where-Object {$_.name -like "system*"}

Formatage des données : Import / Export

  • Get-Content (alias gc): permet de lire le contenu d’un fichier texte ou binaire
    • Ex: Get-Content –path c:\doc.txt
    • Il est possible de faire une recherche dans le contenu d’une chaine de caractères ou d’un fichier.
  • Out-File Redirige les données vers un fichier spécifique
    • Ex :Get-Service | Out-file C:\Windows\log_service.txt
    • Equivalent d'un bon vieux > Linux, d'ailleurs le > marche aussi

Travailler avec le CSV

  • Export-CSV : permet d’exporter des données au format CSV
    • Ex: Get-Process | select-object ProcessName,ID| export-csv-path data.csv
  • Import-CSV : permet depuis un fichier csv de récupérer les données de celui-ci.
    • Ex :$a = Import-Csv-Delimiter “;” -path “.\data.csv”
    • $a
    • $a.ID

Sécuriser une chaîne

Pour sécuriser une chaine de caractère il existe deux méthodes :

  • Utiliser la cmdlet ConvertTo-SecureString avec les deux paramètres :
    • -Asplaintext (indique que l’on souhaite convertir une chaine standard en sécurisée)
    • –Force (Confirme l’utilisation de la première option).
    • Ex: $pw= ConvertTo-SecureString"password" -Asplaintext-Force ($pwest de type System.Security.SecureString)
  • -Sécuriser la chaine lors de la saisie avec la cmdlet Read-Host et le paramètre -AsSecureString
    • Ex: $pw= Read-Host  –AsSecureString

Powershell et Active Directory

<pdf>Fichier:Psad.pdf</pdf>