20 Jul 2022, 00:00

Notes sur Powershell

Share

Version

$PSVersionTable.PSVersion

Profils

https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.3

Les profils sont un peu l’équivalent du .bashrc pour bash.

echo

echo bidule est équivalent à 'bidule'

Variables

Affecter un nombre
$myvar = 1.1

Affecter une chaîne :
$myvar = "Chaîne de caractères"

Affecter plusieurs valeurs (vecteur ?) :
$myvar = 1,"chaine",3

Afficher une variable :
$myvar

Test si variable vide :
if ($myvar) { echo 'not empty' } else { 'empty' }

Variables d’environnement

Obtenir la liste :
dir env:

Utiliser une variable d’env spécifique (ici username) :
$env:username

Lancer Powershell à partir d’un script bat

Dans le script :
powershell -command myPScommand
Les variables affectées dans le script bat sont disponible sous PS dans les variables d’environnement

Langue des messages

on peut changer la langue d’affichage des messages (à l’échelle d’une seule commande) via la syntaxe :
[cultureinfo]::CurrentUICulture='en-us'; myPSCommand
(remplacer myPSCommand par la commande à exécuter)

Encodage

L’encodage par défaut n’est pas UTF-8 (il me semble que c’est UTF-16).
Pour le changer, par exemple avec get-content, il y’a l’option -encoding utf8.

Si cette commande est lancée via un bat, et le résultat utilisé, il faudra changer l’encodage dans le script bat pour qu’il passe en UTF-8 :
chcp 65001

Modules

Get-Module : liste les modules actuellement importés.
Get-Module -ListAvailable : liste tous les modules actuellement installés (avec leur emplacement)
Get-InstalledModule : liste les modules qui ont été installés via install-module (il me semble)

install-module -Name modulename
Demandera à installer NuGet si absent.

uninstall-module ModuleName : pour désinstaller le module

import-Module ModuleName
pour importer le module (rendre les commandes disponibles)

Exemples de modules :

  • MicrosoftTeams
  • PowershellGet

Lister les dépôts :
Get-PSRepository

Si message d’erreur :
AVERTISSEMENT : Unable to resolve package source 'https://www.powershellgallery.com/api/v2

Il faut forcer TLS 1.2. Pour ceci :
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Ceci force TLS1.2 pour la session PS actuelle uniquement. Pour le forcer par défaut, on peut utiliser une clé de registre (force pour Powershell) :
HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\ et créer une clé DWORD SchUseStrongCrypto avec la valeur 1.
Pour les apps 32b sur un OS 64b, on peut aussi créer la même clé à cet emplacement :
HKLM\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319

https://learn.microsoft.com/en-us/mem/configmgr/core/plan-design/security/enable-tls-1-2-client
https://www.inflectra.com/support/knowledgebase/kb510.aspx