Programmation PowerShell/Navigation
Maintenant que vous connaissez un peu mieux le principe de fonctionnement de PowerShell, abordons la navigation, ou comment s'y retrouver une fois dans la commande PowerShell. C'est bien joli de connaître les cmdlets ou de savoir le principe de la console, si on ne manipule rien et que l'on ne va nulle part. Dans ce chapitre sera traiter tout ce qui concerne les dossiers et les fichiers, que ce soit les parcourir, les créer, les modifier ou encore faire une recherche.
Un point sur le système de fichiers de Windows
modifierLe système de fichiers c'est la manière d'écrire les données sur le média en l’occurrence sur votre disque dur ! De mon point de vue, vous n'avez pas besoin de rentrer dans les détails mais je vous mets un lien à tout hasard : NTFS. Ce que vous devez savoir :
- vous pouvez créer une arborescence de dossiers, sous-dossiers qui contiennent des fichiers.
- vous pouvez définir des permissions (ACLs) pour restreindre les accès, etc.
Où suis-je ? Comment puis-je naviguer ?
modifier- Get-Location
Get-Location
La commandlette Get-Location vous indique le répertoire courant. Pour vous déplacer dans la hiérarchie de dossiers, sous-dossiers. utilisez la commande suivante :
- Set-Location
Set-Location c:\users
ce qui définira le dossier c:\users comme répertoire courant. Notez que vous n'êtes pas limité au lecteur C:\ ! Si vous avez une clef usb ou un disque dur externe, vous pouvez taper ceci par exemple :
Set-Location j:
Ouh laaa ... ça me gave de taper les chemins complet ! Là encore, PowerShell est un shell moderne et vous avez la complétion automatique à votre disposition. Procédez ainsi :
- Tapez la commande soit Set-Location puis
- Tapez le début du chemin soit c:\u
- Frappez la touche TAB (tabulation) ce qui demande l’auto-complétion.
Si le chemin n'est pas le chemin voulu, frappez au temps de fois la touche TAB que nécessaire ! Quand le chemin correct est affiché, validez en frappant la touche retour ou entrée !
Lister
modifierPour afficher le contenu d'un dossier, tapez :
Get-ChildItem
Notez que vous pouvez utiliser les arguments -File et -Directory pour ne lister que les fichiers ou que les dossiers :
Get-ChildItem -File Get-ChildItem -Directory
Bien qu'un peut compliquée si vous venez de commencer, je vous donne cette commande :
Get-ChildItem | Sort-Object -Property LastWriteTime
Ceci permet d'avoir les derniers fichiers modifiés ce qui peut être pratique.
Création et modification de fichiers
modifier- New-Item
La commande New-Item permet de créer des fichiers, dossiers et d'autres éléments que vous verrez plus tard ! Créer un fichier vide n'a guère de sens. Je vous donne donc la commandlette pour créer un sous-dossier :
New-Item -ItemType dir exemple
Remarquez que j'ai raccourci la valeur de l'argument. J'aurais pu écrire -ItemType Directory mais là aussi, PowerShell vous laisse être un peu paresseux.
- création d'un fichier avec un contenu
Utilisez le pipe comme suit pour créer un fichier avec du contenu
1 > exemple.txt
Vous pouvez vérifier, la valeur 1 est écrite dans le fichier exemple.txt
notepad .\exemple.txt
Faisons de même pour du texte :
'bonjour le monde' > .\exemple.txt "aujourd'hui c'est la fête !" >> .\exemple.txt
Retenez que le guillemet américain simple écrase le contenu et que le guillemet américain double met le contenu à la fin (mode append).
Lecture de fichier
modifierPour lire les 50 dernières lignes d'un gros fichier de logs :
Get-Content -Path var\log\dev.log -Tail 50
Pour en filtrer les lignes contenant une chaine (équivalent au grep Linux) :
Select-String -Path var\log\dev.log -Pattern "CRITICAL"
Mais où est Charlie ?
modifierPour l'instant, je ne trouve pas d'exemple pour démarrer une recherche Windows Search mais en théorie, ça doit être faisable
search-ms:query=fête&crumb=c:\your\path&
En revanche, voici deux commandlettes utilisables de suite :
Get-ChildItem "*fête*"
La commande ci-dessus listera les dossiers et les fichiers contenant le mot fête.
Get-ChildItem | Select-String "fête"
La commande ci-dessus listera les fichiers contenant le mot fête situés dans le dossier courant uniquement.
La commande ci-dessous fait de même mais en parcourant tous les sous-dossier ce qui peut prendre beaucoup de temps !
Get-ChildItem -Recurse | Select-String "fête"
La commande ci-dessus listera les fichiers contenant le mot fête dans le dossier courant et les sous-dossiers.
Attention toutefois, si la commande met trop de temps, vous pouvez l'arrêter avec la combinaison de touches ci-dessous :
CTRL + C
Important : en appuyant simultanément sur les touches contrôle et C, vous arrêtez l'exécution du script !