19 Jun 2023, 00:00

Exchange online et Powershell

Installation

Install-Module ExchangeOnlineManagement
Import-Module ExchangeOnlineManagement

Connect-ExchangeOnline -UserPrincipalName user@domain.com
Si le nom fourni est un admin, il pourra consulter les statistiques des autres boîtes mail.

Connection RPS (remote PowerShell) dépréciée :
Connect-ExchangeOnline -UseRPSSession

Lister les dossiers d’une boîte mail par ordre de taille

$mailbox = "user@domain.com"
(guillemets obligatoires)

Pour la taille de chaque dossier uniquement, sans les sous-dossiers :
Get-EXOMailboxFolderStatistics $mailbox | Select FolderPath,FolderSize,@{ name="FolderSizeBytes"; expression={((($_.FolderSize -replace '^(.*\()(.*)(\sbytes\))$','$2').Replace(',','')) -as [bigint])}}| Sort-Object -Property FolderSizeBytes -Descending | Out-String -Width 10000 | ft

Avec les sous-dossiers :
Get-EXOMailboxFolderStatistics $mailbox | Select FolderPath,FolderAndSubfolderSize,@{ name="FolderAndSubfolderSizeBytes"; expression={((($_.FolderAndSubfolderSize -replace '^(.*\()(.*)(\sbytes\))$','$2').Replace(',','')) -as [bigint])}}| Sort-Object -Property FolderAndSubfolderSizeBytes -Descending | Out-String -Width 10000 | ft

On peut le piper vers un fichier : > report.txt

Afficher les infos générales d’un boîte mail

Get-EXOMailboxStatistics $mailbox

31 May 2023, 00:00

Noms des services

Pour faire la correspondance entre les noms réels services Windows et leur nom d’affichage (localisés), on peut utiliser la commande Powershell
Get-Service

On peut également rechercher avec un motif du genre
Get-Service -Name *wua*
pour chercher sur le nom ou
Get-Service -DisplayName *update* pour chercher sur le nom d’affichage. Aucune sensibilité à la casse.

20 Jul 2022, 00:00

Notes sur Powershell

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.

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

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