Les bases de PowerShell

PowerShell

Séquences d’échappement

Le caractère d’échappement Windows PowerShell est l’accent grave (`). Pour rendre un caractère littéral, faites-le précéder de `.

Séquences d’échappement spéciales

[table id=3 /]

Méthodes de traitement d’objets

Ces méthodes permettent de traiter des objets. Par exemple scinder un chaine de caractère.

$file = "fichier.txt"
$file.Split(".")[-1]
txt

Ou moins utile, connaitre la position du premier « l » dans « Hello ».

("Hello").IndexOf("l")
2

Méthodes pour le traitement d’objets. [table id=4 /]

Variables automatiques

[table id=5 /]

Chaînes

L’utilisation des guillemets simple ou double a son importance avec PowerShell. Elles permettent de résoudre ou non des opérations arithmétiques.

$resultat  = 'Le resultat est : $(5+3)'
$resultat
Le resultat est : $(5+3)
$resultat  = "Le resultat est : $(5+3)"
$resultat
Le resultat est : 8

Elles permettent de résoudre où non les variables.

$res = $(5+3)
$resultat  = 'Le resultat est : $res'
$resultat
Le resultat est : $res
$resultat  = "Le resultat est : $res"
$resultat
Le resultat est : 8

Elles autorisent l’insertion des caractères spéciaux grâces aux caractères d’échappement.

"Inserer une tabulation entre A et B: A`tB"
Inserer une tabulation entre A et B: A  B

Opérateurs de chaîne Les opérateurs de chaines vous permettent de manipuler des chaines de caractères.

"Bonjour Christophe" -Replace "Christophe","Sébastien"

Voici la liste des opérateurs disponibles. [table id =2 /]

Switch

$lang représente la valeur actuelle évaluée. Si un tableau est utilisé dans switch, chaque élément du tableau est testé.

$lang = (Get-WmiObject Win32_OperatingSystem -ComputerName SERVER001).oslanguage
$switch = switch ($lang) `
{
1033 {"English"};
1036 {"French"};
default {"Unknown"}
}
$switch

Conditions (If, Else, ElseIf)

L’instruction « If » est peut-être la plus fondamental des options de contrôle disponibles dans PowerShell.
Si l’expression est évaluée à $True alors le script présent dans le corps de l’instruction est exécutée. Si l’expression est évaluée à $False le code dans le corps de la déclaration est sautée.

$r = Read-Host
if ($r -eq "10"){ "Le nombre est 10." }

La variation « Esle » de l’instruction « If » nous permet également de spécifier du code à exécuter si l’expression dans l’instruction « If » est évaluée à $False.

$r = Read-Host
if ($r -eq "10"){ "Le nombre est 10." }
else { "Le nombre n'est pas 10." }

Enfin, il est parfois nécessaire de prendre des décisions fondées sur un certain nombre de critères différents. Il est alors nécessaire d’utiliser le « If » et « Elseif ».

$r = Read-Host
if ($r -eq "10"){ "Le nombre est 10." }
elseif ($r -eq "5"){ "Le nombre est 5." }
else { "Le nombre n'est ni 5 ni 10." }

Boucles (Foreach-Object)

L’utilisation de la cmdlet Foreach-Object ou de son alias Foreach permet de parcourir les valeurs d’un collection et par chacune, exécuter un instruction.

$valeurs = 1,2,3,4,5
Foreach($valeur in $valeurs){ "Le chiffre est $valeur"}

Foreach peut suivre un pipe, il permet alors d’utilisé les valeurs issues de la commande précédent le pipe.

(1..10) | Foreach {"Le chiffre est $_"}

Opérateurs logiques

Les opérateurs logiques permettent de vérifier plusieurs comparaisons dans le même expression.

$r = 5
($r -gt 2) -and ($r -lt 8)
True

Les opérateurs logiques disponibles sont
[table id=7 /]

19 réflexions sur « Les bases de PowerShell »

  1. Seb

    Je pense qu’il y a une erreur:
    IndexOf retourne la position (en commençant à 0) de la 1ère occurrence de la chaîne de caractères.
    Exemples:
    (« Helllo »).IndexOf(« l ») retourne 2
    (« Hello »).IndexOf(« lo ») retourne 3

    Répondre
  2. Seb

    @Seb
    Précision:
    dans le tableau, la description de cette fonction est exacte.
    l’erreur est d’écrire que IndexOf permet de compter le nombre de « l » dans « Hello ».

    Répondre
  3. Ping : Script PowerShell synchronisation Active Directory avec une liste SharePoint ← Fortis Fio

  4. Alexandre

    Merci Christophe Bluteau
    Je viens de lire votre article et je me régale
    (étudiant Certifs MS 70-642 et 70-640)
    Alexandre

    Répondre
  5. Ping : macys in store coupons april 2013

  6. jean87

    salut
    aider moi à ecrire avec powershell un script de sauvegarde de données automatique sous windows 7 pour mon rapport
    debutant en progammation
    merci bien

    Répondre
  7. jumeau

    Bonjour,

    Dans le cadre d’obtention de mon diplôme de fin d’année, j’aurai besoin de faire un script en powershell.
    Voici le besoin:

    Créer un script que l’on exécutera grâce aux tâches planifiées qui aura pour but d’écrire dans le fichier c:\result.log les noms des fichiers de plus de 200Mo dans le répertoire c:\Users\Public (et ses sous répertoires).
    Si le script n’a pas lancé depuis plus de 7 jours, un message l’indiquera au début du fichier, la date de dernière
    exécution étant enregistrée dans la base de registres avec le nombre de fichiers trouvés. Dans le journal des événements Application, on pourra suivre la date et l’heure de début et de fin d’exécution du script. A chaque nouvelle exécution, le fichier result.log existant déjà est conservé sous le nom result.log.back

    Merci d’avance pour votre aide

    Répondre
  8. Christophe

    Bonjour Christophe
    Je reste toujours admiratif des gens qui prennent le temps (la 25e heure?) de mettre autant d’informations de qualité à disposition des internautes.
    MERCI +++

    @aux étudiants : CTRL C+V n’est pas étudier…. sauf si vous êtes étudiant Manager

    Bon script et bonne journée
    Christophe

    Répondre
  9. alex conrad

    BONJOUR,

    Je ne connais rien en Scripting, cependant je dois via Power Shell créer un script qui me permet de récupérer sur nos serveur client d’un même domaine des infos de McAfee dans la base de registre.

    J’ai déjà commencé le script il fonctionne bien en local, mais je n’arrive pas a faire redirigé le résultat de mes 2 lignes de code vers un seul fichier report.txt et ensuite de le convertir en report.csv.

    voici mes lignes de codes:
    cd hklm:

    get-itemproperty .\software\wow6432node\Mcafee\avengine -name avdatdate,avdatversion,engineversionmajor,engineversionminor
    Get-ItemProperty .\SYSTEM\CurrentControlSet\control\ComputerName\ComputerName -Name computername

    Merci de votre aide si vous le pouvez.
    bonne soirée a vous

    Cordialement
    MRConrad

    Répondre
  10. Yohann Journiac

    Bonjour.

    Juste pour dire votre article est mon aide-mémoire du quotidien.
    Merci de l’avoir rédigé, ça m’aide très souvent.

    Répondre
  11. fredyyy

    Bonjour a tous

    j’essaye de récupérer dans un fichier TXT ou XML, tous les nom (…..) qui
    sont entre et

    ……..
    ……..
    ……..
    ……..
    ……..

    j’ai essayer d’utiliser une commande mais je n’est pas réussi
    Select-String -Path « C:\temp\14.txt » -Pattern «  »
    get-content file.txt | where {$_ -match «  »} | foreach
    {$_.SubString($_.IndexOf(«  »)+1)}

    Merci pour votre aide

    Répondre
  12. lucie

    Bonjour j’ essaye de faire une liste des repertoires sous repertoires et fichiers avec leurrs nom type date date de modification mots clés saisis dans l explorateur windows. Merci bien

    Répondre
  13. kouakou

    Tâches
    Créer un dossier pour chaque type de pokémon distinct (colonne « Type1 »). Le nom du dossier est la valeur de la colonne « Type1 »
    Particularités
    Un ordre de trie pour la création des dossiers est nécessaire. C’est le premier paramètre reçu qui détermine le trie.
    Pour le trie, un « C » reçu provoque la création des dossiers en ordre croissant ; un « D » reçu provoque la création des dossiers en ordre décroissant. Si aucune valeur est données, la valeur par défaut du paramètre est « R » et les dossiers sont créés en ordre d’apparission dans le fichier. Toutes autres valeurs pour le paramètre de trie provoque l’affichage du message « ne peut procéder – trie impossible ».

    Un paramètre pour définir l’emplacement de destination des dossiers est nécessaire. Un dossier de destination inexistant provoque l’affichage du message « ne peut procéder – destination inexistante ».

    Langage:PowerShell
    Svp quelqu’un pourrait me donner la solution a cet exercie je suis debutant en powershell

    Répondre
  14. BiancaJuicy

    Hi. I see that you don’t update your site too often. I know that writing articles is
    boring and time consuming. But did you know that there is a
    tool that allows you to create new posts using existing content (from article directories or other pages from your niche)?
    And it does it very well. The new articles are high quality and pass the copyscape test.
    You should try miftolo’s tools

    Répondre
  15. jeannet

    Bonjour
    je souhaiterais manipuler les données d’un tableau
    $tsite=@(« SITE », »MEL », »DATE »)
    $tsite+=@{SITE= »paris »; MEL= »4″; DATE= »2018-07-01}
    $tsite+=@{SITE= »paris »; MEL= »0″;DATE= »2018-07-02″}
    $tsite+=@{SITE= »paris »; MEL= »0″;DATE= »2018-07-03″}
    $tsite+=@{SITE= »paris »; MEL= »2″;DATE= »2018-07-04″}
    $tsite+=@{SITE= »londres »; MEL= »4″;DATE= »2018-07-01″}
    $tsite+=@{SITE= »moscou »; MEL= »0″;DATE= »2018-07-02″}
    $tsite+=@{SITE= »londres »; MEL= »0″;DATE= »2018-07-03″}
    $tsite+=@{SITE= »barcelone »; MEL= »2″;DATE= »2018-07-04″}

    Le but est de faire les sommes de mel par ville et d’obtenir dans ce cas la le résultat suivant
    $ttsite =
    paris 6
    londres 4
    moscou 0
    Barcelone 2

    je bloque sur la commande a passer pour faire les sommes de mel pour chaque site

    Répondre
  16. Joli

    $tsite=@()
    $tsite+=@{SITE= »paris »;MEL=4;DATE= »2018-07-01″}
    $tsite+=@{SITE= »paris »;MEL=0;DATE= »2018-07-02″}
    $tsite+=@{SITE= »paris »;MEL=0;DATE= »2018-07-03″}
    $tsite+=@{SITE= »paris »;MEL=2;DATE= »2018-07-04″}
    $tsite+=@{SITE= »londres »;MEL=4;DATE= »2018-07-01″}
    $tsite+=@{SITE= »moscou »;MEL=0;DATE= »2018-07-02″}
    $tsite+=@{SITE= »londres »;MEL=0;DATE= »2018-07-03″}
    $tsite+=@{SITE= »barcelone »;MEL=2;DATE= »2018-07-04″}

    Set-Variable __SommeSITE_* -value $NULL
    $tsite.GetEnumerator() | %{
    $NOM=$( « __SommeSITE_ » + $_.item(« SITE ») )
    [INT]$ancienne_VALEUR=$( Get-Variable -name $(${NOM}) -ValueOnly -ErrorAction:SilentlyContinue )
    [INT]$VALEUR=$( ${ancienne_VALEUR} + $_.item(« MEL ») )
    Write-Host « -NOM=${NOM}`tVALEUR=${VALEUR}`tancienne_VALEUR=${ancienne_VALEUR} »
    Set-Variable -name $( ${NOM} ) -Value $( ${VALEUR} )
    }
    Write-Host « `n`n[Total par SITE ci-dessous] »
    Get-Variable __SommeSITE_*

    Répondre
  17. khalil

    bonjour,
    je travaille pour un projet pour migrer les données de sqlserver à oracle,
    je veut convertir les type et j’ai écrire ce script :

    $scriptpath = »C:\Users\User\Desktop »
    $options.FileName = $scriptpath + « \$tables.sql »
    New-Item $options.FileName -type file -force | Out-Null
    $original_file = ‘C:\Users\User\Desktop\WINDEV1811EVAL\hra_tables.sql’
    $destination_file = ‘C:\Users\User\Desktop\tabl_tables.sql’
    (Get-Content $original_file) | Foreach-Object {

    $_ -replace ‘varchar’, ‘varchar2’ `
    -replace ‘tinyint’, ‘NUMBER’ `
    -replace ‘int’, ‘NUMBER’ `
    } | Set-Content $destination_file
    Write-Host « mapping data type complete »

    **************************************
    le problème q’il me change meme CONSTRAINT à CONSTRAnumber
    AINSI que le type contient un taille
    exemple : [VARCHAR](50) ET c’est pas le même dans oracle.
    pouvez vous m’aidez
    merci

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *