Astuces en PowerShell

Voici quelques commandes powershell qui peuvent faciliter la vie dans des taches quotidiennes, comme la comparaison de répertoires, renommer des fichiers et pleins d'autres choses.

Astuces en PowerShell

Windows PowerShell est le langage de script et aussi l’interpréteur de ligne de commande pour Windows. Il a été conçu pour les administrateurs systèmes et est orienté objet. Vous trouverez de la documentation sur le site de Microsoft.

A noter qu'il existe une version opensource et multi-plateforme appelée PowerShell Core.

Dans cet article nous présentons une série de commandes que nous utilisons et aussi des scripts basés sur Windows PowerShell 5.1.

Commandes

  • Renommer une liste de fichiers dont le nom contient IMG
PS C:\Temp> Get-ChildItem -Filter '*IMG*' | Rename-Item -NewName {$_.Name -replace 'IMG','Photos'}
  • Lister à plat les fichiers ordonnés par taille et affichés dans une grille (vous pouvez ajouter un -Filter pour un type de fichiers ou autres)
PS C:\Temp> Get-ChildItem -Path 'C:\MesDocuments' -Recurse -Force -File | Select-Object -Property FullName,@{Name='SizeGB';Expression={$_.Length / 1GB}},@{Name='SizeMB';Expression={$_.Length / 1MB}},@{Name='SizeKB' ;Expression={$_.Length / 1KB}} | Sort-Object { $_.SizeKB } -Descending | Out-GridView
  • Comparer 2 répertoires contenant les mêmes fichiers:
> $Source = Get-Childitem -Recurse -path .\SourceFiles\

> $Copied = Get-ChildItem -Recurse -path .\CopiedFiles\

> Compare-Object -ReferenceObject $Source -DifferenceObject $Copied
Files with SiteIndicator => are only in the Copied folder
Files with SiteIndicator <= are only in the Source folder
  • Supprimer des répertoires ".svn" récursivement dans une arborescence:
> gci .\ -r -include .svn -force -directory | Remove-Item -r -force

Scripts

Pour exécuter les scripts, nous vous recommandons d'utiliser Microsoft Visual Studio Code qui permet d’exécuter et de debugger directement les fichiers .ps1 (extension des scripts PowerShell)

  • Appeler une API REST/Json
Function Get-SampleByGet($ip)
{
    $apiKey = "myKey"
    $resource = "https://geoipify.whoisxmlapi.com/api/v1?"

    $uri = $resource + "apiKey=$apiKey" + "&ipAddress=$ip"
    
    if ($ip) {
        $resp = Invoke-RestMethod -Method Get -Uri $uri -Header @{ "User-Agent" = "PowerShell" }
        $resp
    }
}

Get-SampleByGet 8.8.8.8

# And the result is an object with the following data
country    : US
region     : California
city       : Mountain View
lat        : 37.40599
lng        : -122.078514
postalCode : 94043
timezone   : -08:00