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