PowerShell

Commandes utiles

Liens_Web:

Obtenir de l’aide

Liens_Web:
  1. Obtenir de l’aide depuis le shell

    get-help [nom_de_la_commande]
    
    ex :
    get-help get-member
    
  2. Les diférents modes de l’aide

    • Pour consulter les exemples :

      get-help Get-Help -examples
      
    • Pour plus d’informations :

      get-help Get-Help -detailed
      
    • Pour obtenir des informations techniques :

      get-help Get-Help -full
      
    • Pour l’aide en ligne :

      get-help Get-Help -online
      
  3. Obtenir la liste de toutes les blibliothèques d’aide dans PowerShell

    help about
    
  4. Obtenir de l’aide sur le formatage et l’utilisation des commentaires

  5. Obtenir de l’aide sur les méthodes ou les propriétés d’un objet « .net »

    1. Identifier le type (TypeName) de l’objet avec Get-Member

      > $a = ""
      > $a | gm
      
          TypeName : System.String
      
    2. Rechercher dans Google le TypeName identifier et aller sur la page Microsoft MSDN correspondant a la classe de l’objet

      Recherche : System.String
      
      Résultat :
      
          String classe (System) - MSDN - Microsoft
          https://msdn.microsoft.com/fr-fr/library/system.string(v=vs.110).aspx
      
    3. Séléctionner dans le menu de gauche la rubrique désirée (Constructeur, Méthode, Propriétés)

Activer / Désactiver le mode débogage

  1. activer le mode débogage

    set-psdebug -trace 2
    
  2. Désactiver le mode débogage

    set-psdebug -trace 0
    

Générer l’aide automatique dans un script ou dans une fonction

Liens_Web:

Connaître toutes les méthodes d’un objet

[Objet_ou_command] | get-member (ou gm)
    # exemple pour une variable : $v_a | get-member

Séléctionner une commande depuis une fenêtre graphique

Show-Command

Windows PowerShell Integrated Scripting Environment (ISE)

  1. Pour lancer PowerShell ISE depuis la console

    PS c:\ISE
    

Syntaxe et utilisation

Equivalent du print (ou du echo)

  1. Methode classique avec la commande “write-host”

    Dans cette commande, les simples cotes ne permettent pas d’interpréter de variable. L’utilisation des doubles cotes permet l’interpretation de variable ou d’objet

    PS C:\Users\polter> $valeur = 2
    PS C:\Users\polter> write-host '$valeur'
    $valeur
    PS C:\Users\polter> write-host "$valeur"
    2
    
  2. Méthode “plus propre” avec l’option “format” (-f)

    Avec cette méthode on utilise les doubles cotes pour encadrer le texte, les accolades avec un numéro d’index a l’intérieur (commençant a 0). Les variables sont placées a l’extérieur du bloc (après le “-f”) et séparées par des virgules

    PS C:\Users\polter> $valeur = 2
    PS C:\Users\polter> $valeur2 = 2
    PS C:\Users\polter> "{0} + {1} = {2}" -f $valeur, $valeur2, ($valeur + $valeur2)
    2 + 2 = 4
    

Renvoyer la sortie d’une commande vers une fenêtre graphique

PS C:\Users\polter> [commande] | Out-GridView
    # La fenêtre qui apparait permet alors d'appliquer des filtres en direct

ex :

PS C:\Users\polter> get-cliditem | Out-GridView

Equivalence de la command linux « grep »

netstat -an | findstr 1883

Caractère spécifiques

  1. Caractère échappement

    Le caractère d’échappement est le « ` » (accent grave seul [ALT_GR-7])
    • Placé en fin de ligne il permet de ligne, il sert de continuation pour aller à la ligne

      $Reg = get-wmiobject -Namespace Root\Default -computerName `
             $Comptuer -List | where-object `
             {$_.Name -eq "StdRegProv"}
      
    • Placé avant une variable elle sera interprétée comme une chaine de caractère

      ps:> $v_maVariable = "test"
      
      ps:> write-host "affichage de la variable : $v_maVariable"
      ps:> affichage de la variable : test
      
      ps:> write-host "affichage de la variable : `$v_maVariable"
      ps:> affichage de la variable : $v_maVariable
      
    • Placé devant un caractère, il sera interpréter comme une commande

      ps:> $v_maVariable = "test"
      ps:> write-host "blabla`t$v_maVariable"
      ps:> blabla    test
      

Déclarer une variable

  1. variable typee dynamiquement

    $maVarible = valeur
    
  2. variable fortement typee

    [bool] $maVarible = true
    

    N.B : par convention les string se declarent avec des simples cotes

    $maVarible = 'text'
    

variables spécifiques

$_:

contient l’objet en cours dans le pipeline

$Error:

contient les objets d’erreur de la session PowerShell en cours

Ecrire un bloc de texte sur plusieur ligne dans une variable (le here-string)

Pour écrire un bloc de texte sur plusieur ligne dans une variable, il faut entourer le bloc avec @” … “@ ou @ » … « @.

Simples cotes
PS C:\> $myvar = @'
>> blabla ...
>> Je s'appel groot !
>> etc ...
>> '@

Doubles cotes :
PS C:\> $myvar = @"
>> blabla ...
>> Je s'appel groot !
>> etc ...
>> "@

Rappel : Les simples cotes ne permettent pas d’interpréter les variables qu’elles contiennent alors que les double le permettent.

Créer des variables en PowerShell sous forme de tableau

Liens_Web:

Les Tableau

  1. Les Tableau fixe

    Ces tableau ne permettent pas d’ajouter ou de supprimer des données

    PS C:\> $monTableau = @(1, 'a')
    PS C:\> $monTableau
    1
    a
    PS C:\> $monTableau.Add('z')
    Exception lors de l'appel de « Add » avec « 1 » argument(s) : « La collection était d'une taille fixe. »
    Au caractère Ligne:1 : 1
    + $monTableau.Add('z')
    + ~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : NotSupportedException
    
  2. Les Tableau dynamiques

    Ces tableau permettent d’ajouter ou de supprimer des éléments

    PS C:\> [System.Collections.ArrayList]$monTableau = @(1, 'a')
    PS C:\> $monTableau
    1
    a
    PS C:\> $monTableau.Add('Z')
    2
    PS C:\> $monTableau
    1
    a
    Z
    PS C:\>
    

Slicing

$a = "test.txt"
$a.Substring(0, $a.length -4)
> test
$a.Substring(2, $a.length -4)
> st.t
$a.Substring($a.length -4)
> .txt


SCRIPTING

Liens_Web:

Autoriser l’exécution des script

set-ExecutionPolicy

Lancer un script depuis la console powershell

PS C:\. .\[mon_script].ps1
    # Ne pas oublier le premier "."

Déclarer une fonction

function [nom_de_la_fonction] {
[command_1]
[command_2]
[etc_...]
}

ex :

    function f_maFonction { get-cliditem }

Admisitration Exchange


Automatisation de Windows et de Windows Server avec Windows PowerShell

Liens_Web:
  1. DHCP Server Cmdlets

Créer des interfaces graphiques

  1. Avec WindowsForm

  2. Avec WPF (en XAML avec visual studio)

    Liens_Web:

HyperV

utiliser les cmdlets HyperV avec powershell2 (2008, 2008r2 et 2012)

Liens_Web:
  1. Lancer manuellement le module HyperV :

    Import-Module “c:\Program Files\modules\hyperv\hyperv.psd1”
    

Commandes en vrac

Activer PSRemote depuis un poste

Enable-PSRemoting -force
    # '-force' permet de supprimer les intéractions utilisateurs

Manipuler les variables d’environement

Liens_Web:

Ouvrir un document avec VIM depuis PowerShell

Liens_Web:
  1. Ouvrir le fichier du profil PowerShell :

    PS :> notepad $PROFILE
    
  2. Créer un alias associer au chemin de VIM :

    set-alias vi "C:\Program Files (x86)\Vim\vim80\gvim.exe"
    set-alias vim "C:\Program Files (x86)\Vim\vim80\gvim.exe"
    
  3. Tester après avoir fermer et réouvert PowerShell :

    vim test.txt
    

WmiObject

Conaitre les iformations de tous les medias

## Pour obtenir les infos de tous les médias
Get-WmiObject Win32_LogicalDisk -comp "localhost" | select -Property * | fl

## Pour obtenir les infos d'un média en particulier (ex : le disque dur C:
Get-WmiObject Win32_LogicalDisk -comp "localhost" | where {$_.Name -like "C:"} | select -Property * | fl

Connaitre la clef de licence de Windows

(Get-WmiObject -query ‘select * from SoftwareLicensingService’).OA3xOriginalProductKey

Connaitre les information du BIOS

Get-WmiObject win32_bios | select *