FreshRSS

🔒
❌ À propos de FreshRSS
Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.
À partir d’avant-hierFlux principal

Rename files with PowerShell

14 octobre 2021 à 17:12

In this beginner's guide, you will learn how to rename files with PowerShell. I will demonstrate how to list files with the Get-ChildItem cmdlet, and then I will discuss a few examples of renaming files with the Rename-Item cmdlet.

The post Rename files with PowerShell first appeared on 4sysops.

Comment monter un partage NFS sur Windows ?

11 octobre 2021 à 16:00

I. Présentation

Dans ce tutoriel, nous allons voir comment monter un partage NFS sur Windows en installant un client NFS via PowerShell ou l'interface graphique.

Nativement, il n'est pas possible d'accéder à un partage NFS depuis Windows, que ce soit les éditions Desktop (Windows 10 ou Windows 11), ou les éditions Server comme comme Windows Server 2019. Ce n'est pas surprenant, car ce type de partage réseau étant créé dans la plupart des cas sur un hôte Linux.

Heureusement, Microsoft a tout prévu pour permettre l'accès à un partage NFS depuis Windows Server. Il suffit de passer par l'installation de fonctionnalités facultatives.

Pour cela, j'utilise un serveur Windows Server 2019 en tant que client NFS, concernant le serveur NFS il s'agit d'un serveur Debian avec le partage /srv/partagenfs.

Si vous souhaitez découvrir le protocole NFS plus en détails, voici mon tutoriel d'introduction :

II. Installation du client NFS sous Windows

Deux méthodes d'installation seront détaillées : méthode graphique / méthode PowerShell (beaucoup plus rapide).

A. Installer le client NFS avec l'interface graphique

Ouvrez le Gestionnaire de serveur, cliquez sur "Gérer" et "Ajouter des rôles et fonctionnalités". Lorsque l'étape "Avant de commencer" apparaît, cliquez sur "Suivant".

winnfs1

Sélectionnez "Installation basée sur un rôle ou une fonctionnalité" et poursuivez.

winnfs2

Ensuite, sélectionnez le serveur sur lequel vous souhaitez installer la fonctionnalité, continuez. Concernant l'étape "Rôles de serveurs" vous pouvez la passer, car dans ce cas c'est l'installation de fonctionnalités qui nous intéressent.

Désormais, nous arrivons à l'étape la plus importante de l'installation : le choix des éléments à installer. Vous devez cocher deux fonctionnalités :

- Client pour NFS

- Outils d'administration de serveur distant > Outils d'administration de rôles > Outils de services de fichiers > Services des outils de gestion du système de gestion de fichiers en réseau (ceci étant un outil RSAT).

Une fois les deux choix effectués, cliquez sur "Suivant".

Client pour NFS Windows

Enfin, cliquez sur "Installer" et patientez un instant.

B. Installer le client NFS avec PowerShell

Ouvrez une console PowerShell, et, saisissez la commande suivante sur votre serveur Windows :

Install-WindowsFeature NFS-Client,RSAT-NFS-Admin

Patientez pendant l'installation, vraiment très simple et efficace en PowerShell une fois le nom des fonctionnalités repéré.

Si vous souhaitez installer le client NFS sur une édition Desktop de Windows, comme Windows 10 ou Windows 11, la commande est différente :

Enable-WindowsOptionalFeature -FeatureName ServicesForNFS-ClientOnly, ClientForNFS-Infrastructure -Online

III. Monter un partage NFS sur Windows

L'installation étant effectuée, on peut désormais monter le partage NFS sur le serveur Windows. Ouvrez une Invite de commande, et, utilisez la commande mount comme ceci pour un montage anonyme :

mount -o anon <serveur>:<partage> <lettre-montage>:

N'utilisez pas une console PowerShell pour monter le partage NFS avec la syntaxe ci-dessus, car cela ne fonctionnera pas : il y a un alias entre "mount" et "New-PSDrive".

mount -o anon 192.168.100.121:/srv/partagenfs N:
Partage NFS monté sur Windows avec mount
Partage NFS monté sur Windows avec mount

Si vous utilisez une console PowerShell, vous pouvez utiliser ceci :

New-PSDrive -Name N -Root "\\192.168.100.121\srv\partagenfs" -PSProvider FileSystem

Néanmoins, je trouve que les résultats sont assez aléatoires pour monter un partage NFS avec New-PSDrive. Préférez plutôt la commande "mount" dans l'Invite de commande.

Le partage NFS se retrouve bien sous la lettre N sur le serveur :

Nous pourrions également monter ce partage NFS à partir de l'Explorateur de fichiers Windows, en précisant le chemin vers le partage au format UNC. Cela donnerait : \\192.168.100.121\srv\partagenfs

IV. Registre Windows : AnonymousGid et AnonymousUid

Lorsque le partage NFS est monté comme nous venons de le faire, il y a de fortes chances pour qu'il soit monté en lecture seule. Si vous avez besoin d'être en mode anonyme tout en ayant les droits de lecture et d'écriture, il va falloir modifier la base de Registre de Windows.

Ouvrez l'éditeur de Registre en tant qu'administrateur :

regedit.exe

Parcourez l'arborescence comme ceci :

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default

Ici, il va falloir créer deux valeurs "DWORD (32 bits)" nommées : AnonymousGid (ID du groupe) et AnonymousUid (ID de l'utilisateur).

Pour ces valeurs, la valeur décimale doit correspondre à l'ID déclaré dans la configuration du partage NFS, sur le serveur distant. Pour ma part, mon partage s'appuie sur l'utilisateur nobody et le groupe nogroup. Ces deux éléments ont le même ID : 65534.

Sur mon serveur Linux, dans le fichier "/etc/exports", j'ai la configuration suivante :

/srv/partagenfs 192.168.100.0/24(rw,sync,anonuid=65534,anongid=65534,no_subtree_check)

Ce qui me donne dans le Registre :

Registre Windows : les valeurs AnonymousGid et AnonymousUid
Registre Windows : les valeurs AnonymousGid et AnonymousUid

Suite à cette modification, il faut redémarrer le serveur. Ensuite, vous devriez pouvoir accéder au partage NFS en lecture et écriture !

V. Paramétrage du client NFS

En cas de nécessité, sachez qu'il est possible de paramétrer le client NFS que nous avons installé. Pour cela, accédez aux Outils d'administration et ouvrez "Services pour NFS". Lorsque la console est ouverte, effectuez un clic droit sur "Client pour NFS" et cliquez sur "Propriétés".

Propriété client pour NFS

Divers paramètres sont accessibles, comme le(s) protocole(s) de transport à utiliser par le client NFS (UDP, TCP ou les deux) ou encore les autorisations UNIX à attribuer par défaut aux fichiers créés sur le partage.

Options du client NFS Windows

Enfin, l'onglet "Sécurité" sert à spécifier les stratégies de sécurité autorisées. Tout ce qui concerne Kerberos, à savoir "krb5", "krb5i" et "krb5p" nécessite d'utiliser NFS v4 au minimum.

The post Comment monter un partage NFS sur Windows ? first appeared on IT-Connect.

Serveur d’impression : lister les imprimantes avec le nom et l’adresse IP

11 octobre 2021 à 10:00

I. Présentation

Dans ce tutoriel, nous allons voir comment utiliser PowerShell pour lister les imprimantes installées sur un serveur d'impression Windows, en indiquant le nom et l'adresse IP.

Lorsque l'on utilise la console Gestion des impressions, on peut afficher plusieurs informations comme le nom de l'imprimante, le nom du pilote, le nom du port, etc... Mais pas l'adresse IP. C'est dommage, surtout si vous ne mettez pas l'adresse IP dans le nom de vos ports.

Encore une fois, PowerShell va nous sauver la mise, car avec un petit bout de code de quelques lignes, on va pouvoir lister les imprimantes et obtenir l'adresse IP !

II. PowerShell : Get-Printer et Get-PrinterPort

En PowerShell, on peut lister les imprimantes avec la commande Get-Printer.

Get-Printer

Elle nous retourne différentes propriétés, un peu dans le même esprit que la console Gestion des impressions.

Nous avons aussi un autre cmdlet, nommé Get-PrinterPort, qui lui retourne des informations sur les ports. Intéressant... d'autant plus que l'on peut avoir le nom du port, mais aussi l'adresse IP en regardant la propriété PrinterHostAddress.

Get-PrinterPort

Pour obtenir l'adresse IP d'une imprimante, il faut spécifier le nom du port de l'imprimante grâce au paramètre -Name (ou avec un filtre Where, mais c'est moins efficient). Puis, récupérer seulement la propriété PrinterHostAddress, comme ceci :

(Get-PrinterPort -Name "MonPortNumero1" ).PrinterHostAddress

Nous avons tout ce qu'il nous faut, sauf que l'on a le nom de l'imprimante d'une part, et l'adresse IP du port de l'autre. Il ne reste plus qu'à faire opérer la magie de PowerShell pour ressortir un joli tableau avec nos deux informations, grâce à un objet personnalisé.

Nous récupérer la liste des imprimantes et effectuer une boucle Foreach.

Get-Printer | Foreach{ <code> }

Au sein de cette boucle, nous allons construire notre objet personnalisé et il sera alimenté à chaque tour de boucle. Il aura deux propriétés (mais on pourrait ajouter d'autres champs) : le nom et l'adresse IP.

Ce qui nous donne le bout de code suivant :

Get-Printer | Foreach{

   $PrinterName = $_.Name
   $PrinterPort = $_.PortName
   $PrinterIPAddress = (Get-PrinterPort -Name $PrinterPort).PrinterHostAddress

   New-Object PSObject -Property @{
      "Nom" = $PrinterName
      "AdresseIP" = $PrinterIPAddress
   }

   Clear-Variable PrinterIPAddress
}

Si vous souhaitez une sortie plus sympa, effectuez un export CSV de cette liste ou ajoutez "| Out-GridView" après l'accolade finale.

Voilà, le tour est joué !

The post Serveur d’impression : lister les imprimantes avec le nom et l’adresse IP first appeared on IT-Connect.

Comment exporter des données au format CSV avec PowerShell ?

8 octobre 2021 à 11:00

I. Présentation

Dans ce tutoriel, nous allons voir comment exporter des données au format CSV en PowerShell, à l'aide de la commande Export-CSV.

Après avoir vu comment importer des données à partir d'un fichier CSV avec PowerShell, ce second volet sur la gestion des fichiers CSV avec PowerShell était une évidence pour traiter le sujet entièrement.

Pour cet exemple, nous allons voir comment exporter la liste des services Windows au format CSV, en récupérant certaines propriétés (nom technique, nom d'affichage et l'état du service).

II. Exporter des données dans un CSV avec Export-CSV

Commençons par lister les services :

Get-Service

Ensuite, nous allons sélectionner les propriétés que l'on souhaite exporter : Name, DisplayName et Status. Ce qui donne :

Get-Service | Select-Object DisplayName, Name, Status

A ce stade, dans la console nous avons la sortie que nous aimerions avoir dans le CSV : une liste avec trois colonnes. Quand la sortie dans la console correspond à ce que vous souhaitez avoir dans le CSV, il ne reste plus qu'à faire l'export au format CSV.

Note : si l'on ne fait pas la sélection des propriétés avec Select-Object, l'export CSV va prendre toutes les propriétés retournées par Get-Service.

Cet export au format CSV s'effectue avec Export-CSV que l'on va venir préciser à la suite de notre commande avec le pipe "|". Nous allons spécifier deux paramètres : le chemin vers le fichier CSV de sortie (-Path) et le délimiteur que l'on souhaite (-Delimiter).

Ce qui donne :

Get-Service | Select-Object Name, DisplayName, Status | Export-CSV -Path "C:\TEMP\services.csv" -Delimiter ";"

Si vous ouvrez le fichier "services.csv", vous allez voir qu'il y a une première ligne assez surprenante :

#TYPE Selected.System.ServiceProcess.ServiceController

Cela donne des informations sur le type de données. Cependant, ce n'est pas pour nous arranger, car la première ligne doit correspondre à nos en-têtes de colonnes... Fort heureusement, il y a un paramètre qui permet de supprimer cette ligne : -NoTypeInformation.

Il suffit de l'ajouter et cette ligne sera un lointain souvenir !

Get-Service | Select-Object Name, DisplayName, Status | Export-CSV -Path "C:\TEMP\services.csv" -Delimiter ";" -NoTypeInformation

Note : cette ligne est intégrée au fichier CSV seulement lors de l'utilisation de Windows PowerShell. Si vous utilisez PowerShell Core (PowerShell 7+), cette ligne n'apparaîtra pas et l'option n'existe même pas. Par contre, il y a une option (-IncludeTypeInformation) qui permet d'ajouter l'information si besoin.

J'obtiens donc le fichier CSV suivant :

Quelques petites astuces et précisions au sujet d'Export-CSV....

Pour ajouter du contenu à un fichier CSV déjà existant, il faut spécifier l'option -Append. Sinon, le fichier est écrasé à chaque fois, même s'il existe déjà.

$ListeDesServices = Get-Service | Select-Object Name, DisplayName, Status
$ListeDesServices | Export-CSV -Path "C:\TEMP\services.csv" -Delimiter ";" -Append

Comme lors d'un import d'un fichier CSV, le paramètre -Encoding sert à spécifier l'encodage pour notre fichier de sortie.

Sur les versions plus récentes de PowerShell, notamment PowerShell Core 7, il y a une option nommée "-UseQuotes" qui permet de préciser si l'on doit encadrer les valeurs par des guillemets ou non. Utile si vous avez des chaînes de caractères avec des espaces, mais pas spécialement pour des chiffres. Ce paramètre peut prendre plusieurs valeurs : Always (toujours), AsNeeded (si besoin), Never (jamais).

Par exemple :

$ListeDesServices = Get-Service | Select-Object Name, DisplayName, Status
$ListeDesServices | Export-CSV -Path "C:\TEMP\services.csv" -Delimiter ";" -UseQuotes Always

Un peu dans le même esprit, le paramètre -QuoteFields sert à spécifier les colonnes pour lesquelles il faut encadrer les valeurs avec des guillemets. Exemple pour spécifier la colonne DisplayName :

$ListeDesServices = Get-Service | Select-Object Name, DisplayName, Status
$ListeDesServices | Export-CSV -Path "C:\TEMP\services.csv" -Delimiter ";" -QuoteFields DisplayName

Pour finir, nous allons voir comment modifier le nom des colonnes de notre fichier CSV au moment de l'export. Pour cela, il faut intervenir au sein de la commande "Select-Object".

Au lieu de préciser tout simplement "DisplayName" pour sélectionner cette propriété, nous allons créer une propriété calculée afin de changer le nom (label). On va remplacer :

DisplayName

Par :

@{ expression={$_.DisplayName}; label='NomAffichage' }

La colonne de notre CSV sera nommée "NomAffichage", ce qui est plus sympa !

Si l'on renomme nos trois colonnes avec un nom personnalisé, cela donne :

Get-Service | Select-Object @{ expression={$_.Name}; label='Nom' },@{ expression={$_.DisplayName}; label='NomAffichage' },@{ expression={$_.Status}; label='Statut' } | Export-CSV -Path "C:\TEMP\services.csv" -Delimiter ";"

Voilà, le fichier CSV sera le même précédemment, à la différence que nos en-têtes auront des noms en français.

III. Construire son propre fichier CSV

Pour finir ce tutoriel, je vous propose une autre approche : la création de son propre fichier CSV. Cela m'est déjà arrivé d'utiliser cette méthode pour générer un fichier de log formaté avec des colonnes, ou créer un rapport.

On pourrait créer un objet, venir l'alimenter au fur et à mesure et l'export au format CSV à la fin, mais on peut aussi écrire dans un fichier. Tout simplement.

Commençons par créer le fichier CSV vierge, puis à lui ajouter nos-entêtes :

New-Item -ItemType File -Path "C:\TEMP\Log.csv"

Voici la commande pour ajouter la première ligne correspondante aux en-têtes : Date, Type, Message. Ce sera la base de notre fichier de log.

Add-Content -Path "C:\TEMP\Log.csv" -Value "Date;Type;Message"

Ensuite, quand vous avez besoin d'ajouter une ligne de log dans le fichier, il suffit d'ajouter du contenu dans le fichier en respectant les trois colonnes. Dans l'exemple ci-dessous, la colonne "Date" prendra pour valeur la date et l'heure actuellement, automatiquement.

Add-Content -Path "C:\TEMP\Log.csv" -Value "$(Get-Date -Format yyyyMMdd_HHmm);Erreur;Voici le détail de l'erreur !"

Si l'on ouvre le fichier avec un éditeur de texte (ou même avec Excel, c'est l'intérêt), on obtient :

PS : ce fichier CSV peut également être importé avec Import-CSV sans aucun problème ! 😉

The post Comment exporter des données au format CSV avec PowerShell ? first appeared on IT-Connect.

Monter une image ISO sur Windows [11, 10, 8, 7]

7 octobre 2021 à 10:00
Par : Le Crabe

Une image ISO (International Standard File) est un fichier qui encapsule un certain nombre de données (fichiers et dossiers) et qui est souvent assez volumineux. Les systèmes d’exploitation tels que Windows ou Linux sont distribués sous la forme d’images ISO afin de permettre aux utilisateurs de les graver sur un CD/DVD ou de les flasher sur une clé USB pour ensuite les installer sur leur...

Source

PowerShell : manipuler les chaînes de caractères avec IndexOf et LastIndexOf

6 octobre 2021 à 10:00

I. Présentation

Dans ce tutoriel, nous allons voir comment utiliser les méthodes IndexOf et LastIndexOf de PowerShell pour extraire une sous-chaîne (substring) d'une chaîne de caractères.

Précédemment, et sur le même thème, nous avions vu comment utiliser les méthodes Split() et Substring() de PowerShell. Avec IndexOf et LastIndexOf, nous allons pouvoir aller un peu plus loin dans l'utilisation de Substring() notamment.

II. PowerShell et IndexOf

La méthode IndexOf() permet de rechercher la position d'un caractère ou d'une chaîne au sein d'une chaîne de caractères. Elle va retourner la position de la première occurrence du caractère recherché ou de la chaîne recherchée. Ni plus ni moins.

Prenons un exemple avec la variable $URL :

$URL = "www.it-connect.fr"

Recherchons la position du caractère "." :

$URL.IndexOf(".")

On peut voir que la commande retourne "3", tout simplement. Cela signifie que le point a été trouvé à la position "3" de la chaîne de caractères. Ce qui est correct puisque le premier caractère de la chaîne correspond à l'index 0.

PowerShell et IndexOf()
PowerShell et IndexOf()

Comme je le disais, on peut également rechercher une chaîne de caractères. Par exemple, on peut rechercher "it" :

$URL.IndexOf("it")

Cette commande va retourner la valeur "4" : c'est bien le "i" qui est en 4ème position, ce qui correspond au début de la chaîne recherchée.

Si l'on recherche une chaîne et qu'elle n'a pas été trouvée, la valeur retournée sera "-1". La preuve en image :

Il faudra retenir que IndexOf() recherche la première occurrence la chaîne recherchée, en partant de l'index 0, de la gauche vers la droite.

III. PowerShell et LastIndexOf

La méthode LastIndexOf() permet de rechercher la dernière position d'un caractère ou d'une chaîne au sein d'une chaîne de caractères. La différence avec IndexOf() est subtile, mais importante : LastIndexOf recherche la dernière occurrence d'un caractère, et non pas la première.

Reprenons l'exemple précédent avec la variable $URL :

$URL = "www.it-connect.fr"

Puis, cette fois-ci, utilisons LastIndexOf :

$URL.LastIndexOf(".")

On peut voir que la commande retourne le résultat "14" : ce qui correspond à la position du point de ".fr".

PowerShell et LastIndexOf()
PowerShell et LastIndexOf()

Dans le même esprit, nous pouvons rechercher une chaîne de plusieurs caractères et dans le cas où la chaîne est introuvable, le résultat "-1" sera retourné.

IV. PowerShell : exemples d'utilisation IndexOf et LastIndexOf

Maintenant que nous avons à quoi servait IndexOf() et LastIndexOf(), il est temps de voir ce que ça peut donner dans la pratique !

A. PowerShell : extraire une chaîne comprise entre deux caractères

Reprenons notre variable $URL :

$URL = "www.it-connect.fr"

L'objectif va être le suivant : récupérer la chaîne comprise entre le premier point et le tiret. Autrement dit, obtenir la valeur "it".

Commençons par récupérer la position du premier point :

$Debut = $URL.IndexOf(".")

Résultat : la variable $Debut est égale à 3.

Et celle du tiret :

$Fin = $URL.LastIndexOf("-")

Résultat : la variable $Fin est égal à 6.

Maintenant que l'on connaît le point de départ dans la chaîne et la fin, il faut que l'on récupère ce qu'il y a entre deux. Pour cela, nous allons utiliser la méthode Substring().

Pour rappel, Substring() permet d'extraire une sous-chaîne d'une chaîne de caractères en précisant : l'index de départ (StartIndex) et le nombre de caractères après cet index.

On peut considérer que :

  • Le point de départ, ce sera "$Debut+1" : il faut ajouter +1 car sinon nous allons récupérer le "." puisque $Debut contient la position du point.
  • Le nombre de caractères à conserver, ce sera "$Fin-$Debut-1" : voilà, je vous ai perdu. Explications : pour savoir combien il y a de caractères à extraire, il suffit de faire une soustraction "$Fin - $Debut" (= 3) puisque cela donne l'écart entre les deux points de référence. Enfin, on fait "-1" en complément pour éliminer le caractère de référence ("-") sur le même principe qu'avec $Debut. On obtient donc : 2, soit 2 caractères à extraire.

Si l'on traduit tout cela en PowerShell, on obtient la ligne suivante :

$URL.Substring($Debut+1,$Fin-$Debut-1)

On obtient bien la valeur "it" en retour, cela fonctionne ! Vous pouvez vous amuser à tester avec d'autres combinaisons.

Dans le cas où l'on aurait recherché la chaîne comprise entre les deux points, on aurait pu le faire avec avec Split() en récupérant le deuxième membre (index 1) du tableau obtenu :

($URL.Split("."))[1]

Ce que nous venons de voir est peut-être l'exemple le plus "puissant" avec IndexOf(), LastIndexOf() et Substring(). Si vous en connaissez d'autres, n'hésitez pas à les partager en commentaire !

B. Extraire une chaîne par la gauche

En combinant l'utilisation de Substring() et IndexOf() ou LastIndexOf(), on peut extraire une partie d'une chaîne en partant du début. L'idée est la suivante : extraire le sous-domaine de notre URL, donc tout ce qui est avant le premier point.

$URL = "www.it-connect.fr"

On récupère la position du premier point :

$Debut = $URL.IndexOf(".")

Ensuite, avec Substring() on part du premier caractère correspond à l'index 0 et on récupère le nombre de caractères définit dans $Debut. Comme on part de l'index 0, il n'est pas nécessaire de faire +1.

Ce qui donne :

$URL.Substring(0,$Debut)

Résultat, j'obtiens la valeur "www" : c'est correct !

Ce tutoriel sur IndexOf() et LastIndexOf() touche à sa fin, vous avez deux cordes supplémentaires à votre arc lorsqu'il s'agit de manipuler les chaînes de caractères en PowerShell. Je dois avouer que Split() et Substring() restent ceux que j'utilise le plus souvent.

The post PowerShell : manipuler les chaînes de caractères avec IndexOf et LastIndexOf first appeared on IT-Connect.

Comment lire le contenu d’un fichier CSV avec PowerShell ?

4 octobre 2021 à 11:30

I. Présentation

Dans ce tutoriel, nous allons voir comment manipuler le cmdlet "Import-CSV" pour lire et exploiter le contenu d'un fichier CSV à l'aide de PowerShell.

Lorsque l'on s'intéresse au scripting PowerShell, il n'est pas rare de devoir manipuler un fichier CSV pour récupérer les données qu'il contient et les exploiter dans le script.

L'un des cas les plus courants, c'est l'utilisation d'un fichier CSV qui contient des informations sur le personnel de l'entreprise et que l'on va utiliser pour créer les comptes Active Directory. J'ai déjà traité ce cas à l'occasion de mon cours sur l'administration de l'Active Directory avec PowerShell.

Nous allons apprendre un autre exemple : un fichier CSV avec deux colonnes, la première colonne nommée "DossierSource" et la seconde nommée "DossierDestination". On peut voir cela comme une matrice de correspondance, avec des données à transférer d'un dossier source vers un dossier destination.

Voici à quoi ressemble mon fichier CSV :

DossierSource;DossierDestination
C:\Data\Commercial;D:\Donnees\Commercial
C:\Data\Service-Technique;D:\Donnees\Service-Technique
C:\Data\Direction;S:\Donnees-Sensibles\Direction

Voilà le contenu du fichier, un fichier qui est enregistré au format "CSV" (C:\TEMP\data.csv) mais je fais comment maintenant pour lire et exploiter le contenu de ce fichier ? C'est ce que nous allons voir.

II. Utilisation de la commande Import-CSV

Pour importer les données du fichier CSV, PowerShell a une commande prête à l'emploi : Import-CSV. Au niveau des paramètres, il y en a 3 qui sont particulièrement intéressant (et surtout indispensable) : -Path pour préciser le chemin vers le fichier CSV, -Delimiter pour préciser le délimiteur de colonne c'est-à-dire le ";" dans notre cas, et -Encodage pour préciser l'encodage du fichier (si nécessaire).

Import-CSV -Path "C:\TEMP\data.csv" -Delimiter ";"

Le contenu du fichier CSV doit s'afficher dans la console. Voici ce que l'on obtient :

PowerShell - Exemple Import-CSV
PowerShell - Exemple Import-CSV

Si vous avez un fichier CSV avec de nombreuses colonnes et que vous souhaitez en importer uniquement quelques-unes, c'est possible ! Pour cela, il faut utiliser le paramètre -Header et spécifier le nom de la ou des colonnes à sélectionner.

Voici un exemple pour sélectionner la colonne DossierSource :

Import-CSV -Path "C:\TEMP\data.csv" -Delimiter ";" -Header DossierSource

Une autre manière de faire, même s'il faut préférer la syntaxe ci-dessus (plus performante), c'est d'utiliser Select-Object :

Import-CSV -Path "C:\TEMP\data.csv" -Delimiter ";" | Select-Object DossierSource

III. Exploiter le fichier CSV avec PowerShell

Afficher le contenu du fichier CSV dans la console, ce n'est pas très utile... Pour exploiter le contenu du fichier dans un script, il faut commencer par stocker son contenu dans une variable. Par exemple, la variable $CSV :

$CSV = Import-CSV -Path "C:\TEMP\data.csv" -Delimiter ";"

Ensuite, si vous affichez le contenu de $CSV, vous devriez voir le contenu de votre fichier CSV.

$CSV

Nous pourrions filtrer le contenu du fichier CSV pour importer seulement certaines lignes. Par exemple, seulement les lignes où le champ "DossierDestination" contient la chaîne "D:" correspondante à notre lecteur D. Pour cela, on va appliquer un filtre avec Where-Object (Where).

$CSV = Import-CSV -Path "C:\TEMP\data.csv" -Delimiter ";" | Where{ $_.DossierDestination -like "D:*" }

Cela n'était qu'un exemple, nous allons conserver notre fichier CSV en entier.

Pour parcourir notre fichier CSV ligne par ligne, rien de mieux qu'une boucle foreach. Ce qui donne :

Foreach($Ligne in $CSV){
 <code>
}

A chaque tour de boucle, la variable $Ligne prendra pour valeur la ligne complète du CSV en progressant du début jusqu'à la fin du fichier CSV, en passant par notre variable $CSV.

Ensuite, au sein de la boucle nous allons pouvoir lire la colonne que l'on souhaite. Pour lire la valeur de la colonne "DossierSource", on utilisera :

$Ligne.DossierSource

Essayez avec cette boucle (aucun risque car on écrit seulement une phrase dans la console) :

Foreach($Ligne in $CSV){
   Write-Host "Données transférées de $($Ligne.DossierSource) vers $($Ligne.DossierDestination)"
}

Elle va retourner le résultat suivant :

# Selon le modèle :
# Données transférées de $($Ligne.DossierSource) vers $($Ligne.DossierDestination)
Données transférées de C:\Data\Commercial vers D:\Donnees\Commercial
Données transférées de C:\Data\Service-Technique vers D:\Donnees\Service-Technique
Données transférées de C:\Data\Direction vers S:\Donnees-Sensibles\Direction

Vous voyez, à chaque tour de boucle les valeurs changent ! Nous parvenons à lire, ligne après ligne, le contenu de $CSV. De quoi nous permettre d'effectuer un véritable traitement : le transfert de nos données d'un dossier vers l'autre.

Pour effectuer réellement le transfert des données du dossier source vers le dossier destination, on va simplement ajouter une ligne basée sur l'utilisation de la commande Move-Item.

Voici le bout de code très basique pour parcourir le fichier CSV et transférer les données :

$CSV = Import-CSV -Path "C:\TEMP\data.csv" -Delimiter ";"

Foreach($Ligne in $CSV){

  Write-Host "Données transférées de $($Ligne.DossierSource) vers $($Ligne.DossierDestination)"
  Move-Item -Path "$($Ligne.DossierSource)\*" -Destination "$($Ligne.DossierDestination)"
}

Bien sûr, il faudrait améliorer cette boucle en vérifiant, par exemple, si les chemins source et destination existent (Test-Path), avant de chercher à transférer les données.

Dans un prochain article, nous verrons comment exporter des données au format CSV avec PowerShell.

The post Comment lire le contenu d’un fichier CSV avec PowerShell ? first appeared on IT-Connect.

PowerShell – Comment supprimer les accents et les caractères spéciaux ?

1 octobre 2021 à 10:00

I. Présentation

Dans ce tutoriel, nous allons voir comment supprimer les accents et les caractères spéciaux dans une chaîne (string) au sein d'un script PowerShell.

Quand on fait du scripting et que l'on manipule des noms et des prénoms, on se retrouve rapidement face aux caractères accentués et aux caractères spéciaux. Si l'on veut s'appuyer sur un nom et un prénom pour générer un identifiant de connexion, il est préférable d'éliminer tous les accents. Comment faire ? Je vais vous expliquer comment procéder en PowerShell.

II. PowerShell et -replace

Pour commencer, nous allons voir une méthode basique qui s'appuie sur l'utilisation de -replace. Il s'agit d'une méthode qui va permettre de remplacer une chaîne de caractères par une autre. Ainsi, on peut remplacer "é" par "e", "à" par "a", "ç" par "c", etc.

Prenons un exemple :

"Prénom" -replace "é","e"

Ce qui donne :

On peut voir que cela fonctionne bien, mais que ça permet de gérer seulement le caractère "é". Si l'on gérer d'autres caractères, il faut cumuler plusieurs -replace :

"Prénom" -replace "é","e" -replace "è","e" -replace "à","a"

C'est un peu long et on risque d'en oublier, mais ça fonctionne ! Cela fonctionne aussi pour les caractères spéciaux, pour remplacer un tiret, un underscore voire même pour supprimer un espace !

Nous pourrions créer une fonction qui permettrait de supprimer tous les caractères spéciaux d'une chaîne envoyée entrée, comme ceci :

Function Remove-StringSpecialCharacters
{

   Param([string]$String)

   $String -replace 'é', 'e' `
           -replace 'è', 'e' `
           -replace 'ç', 'c' `
           -replace 'ë', 'e' `
           -replace 'à', 'a' `
           -replace 'ö', 'o' `
           -replace 'ô', 'o' `
           -replace 'ü', 'u' `
           -replace 'ï', 'i' `
           -replace 'î', 'i' `
           -replace 'â', 'a' `
           -replace 'ê', 'e' `
           -replace 'û', 'u' `
           -replace '-', '' `
           -replace ' ', '' `
           -replace '/', '' `
           -replace '\*', '' `
           -replace "'", "" 
}

Ensuite, pour appeler cette fonction il suffit de faire :

Remove-StringSpecialCharacters -String "éèà ï-ö"

On peut voir que la valeur retournée est :

eeaio

Le résultat est propre puisque les caractères spéciaux et accentués sont éliminés. Mais, nous allons voir que l'on peut faire mieux enfin disons plus efficace et plus simple. Cette méthode est intéressant pour créer une fonction qui va remplacer ou supprimer certains types de caractères, à votre guise !

Avant d'aller plus loin, je souhaitais attirer votre attention sur cette ligne :

-replace '\*', '' `

Elle va permettre de remplacer le caractère "*" (et non "\*") par rien. On doit spécifier "\" devant "*" pour faire un échappement car sinon -replace va l'interpréter comme une expression régulière.

III. PowerShell : créer une fonction pour supprimer les caractères accentués et spéciaux

En jouant sur l'encodage de la chaîne de caractères, on peut transformer une chaîne accentuée en chaîne non accentuée, facilement. A condition de connaître la syntaxe, que j'ai pu découvrir ici.

En utilisant la ligne ci-dessous, on peut remplacer l'intégralité des caractères accentués par leur équivalent non accentués.

[Text.Encoding]::ASCII.GetString([Text.Encoding]::GetEncoding("Cyrillic").GetBytes("Prénom"))

C'est vraiment redoutable car cela fonctionne très bien ! Par contre, il faut savoir que cela n'élimine pas les espaces, ni les tirets, etc.... Sauf que ce sont des caractères courants et que l'on peut avoir envie de supprimer. Pour vous dire, j'ai déjà vu des exports CSV avec des noms et prénoms qui contiennent un "*" à la fin. Il faut s'attendre à tout et l'anticiper dans le script....

En reprenant cette ligne de base, on va pouvoir améliorer notre fonction précédente :

function Remove-StringSpecialCharacters
{
   param ([string]$String)

   Begin{}

   Process {

      $String = [Text.Encoding]::ASCII.GetString([Text.Encoding]::GetEncoding("Cyrillic").GetBytes($String))

      $String = $String -replace '-', '' `
                        -replace ' ', '' `
                        -replace '/', '' `
                        -replace '\*', '' `
                        -replace "'", "" 
   }

   End{
      return $String
      }
}

Dans l'exemple ci-dessus, nous allons supprimer certains caractères spéciaux. Libre à vous d'en ajouter ou d'en supprimer afin d'obtenir une chaîne de caractères toute propre !

Au niveau de la syntaxe, on peut faire plus court :

function Remove-StringSpecialCharacters
{
   param ([string]$String)

   [Text.Encoding]::ASCII.GetString([Text.Encoding]::GetEncoding("Cyrillic").GetBytes($String)) `
      -replace '-', '' `
      -replace ' ', '' `
      -replace '/', '' `
      -replace '\*', '' `
      -replace "'", "" 
}

Vous n'avez plus qu'à intégrer cette fonction dans votre script et à l'utiliser ! 😉

The post PowerShell – Comment supprimer les accents et les caractères spéciaux ? first appeared on IT-Connect.

Interact with Azure Cosmos DB with PowerShell

14 septembre 2021 à 16:15

Learn how to perform core administrative tasks on the Azure Cosmos DB using Azure PowerShell.

The post Interact with Azure Cosmos DB with PowerShell first appeared on 4sysops.

Comment connaître la version de PowerShell installée sur Windows

13 septembre 2021 à 13:01

Windows PowerShell existe sous de nombreuses versions 5.1, 6,0, 6.1, 7,0, 7.1, etc.
Mais comment savoir quelle version de Powershell est installée sur Windows ?

Windows PowerShell est le Shell par défaut sur Windows 10 mais qui existe depuis Windows XP.
C'est aussi un langage de programmation.
Microsoft continue de l'améliorer en apportant des nouveautés et corrections de bugs dans de nouvelle version.

Dans ce tutoriel, je vous montre comment connaître la version de PowerShell installée sur Windows.
Plusieurs méthodes sont données qui fonctionnent sur Windows 7, 8.1, Windows 10 et Windows 11.

Comment connaître la version de PowerShell installée sur Windows

Quelles sont les versions de PowerShell ?

PowerShell est installé par défaut dans toutes les versions Windows à partir de Windows 7 SP1 et Windows Server 2008 R2 SP1.

Le tableau suivant indique la liste des versions PowerShell avec l'historique :

PS VersionNote
PowerShell 1.0Peut être installé manuellement sur Windows Server 2003 SP1 et Windows XP
PowerShell 2.0Windows Server 2008 R2 et Windows 7
PowerShell 3.0Windows 8 et Windows Server 2012
PowerShell 4.0Windows 8.1 et Windows Server 2012 R2
PowerShell 5.0Préinstallé sur Windows 10 RTM et mis à jour automatiquement à 5.1 via Windows Update
PowerShell 5.1Il s'agit de la prochaine version multi-plate-forme PowerShell version (basée sur .NET CORE) pouvant être installée sur toutes les versions Windows prises en charge et sur MacOS, Centos, Rhel, Debian, Ubuntu, OpenSUSE
PowerShell Core 6.0 and 6.1It is the next cross-platform PowerShell version (based on .NET Core) that may be installed on all supported Windows versions and on MacOS, CentOS, RHEL, Debian, Ubuntu, openSUSE
PowerShell Core 7.0Il s'agit de la dernière version PowerShell publiée en mars 2020 (.NET CORE 3.1 est utilisée en elle au lieu de .NET CORE 2.X)
Les versions de PowerShell

De plus les emplacements de PowerShell diffèrent selon la version :

  • Windows PowerShell 5.1: C:\Windows\System32\WindowsPowerShell\v1.0
  • PowerShell Core 6.x: C:\ProgramFiles\PowerShell\6
  • PowerShell Core 7.x (par MSI): C:\Program Files\PowerShell\7
  • PowerShell Core 7.x (Windows Store) : C:\Program Files\WindowsApps\Microsoft.PowerShell_7.1.4.0_x64__8wekyb3d8bbwe\pwsh.exe

Comment connaître la version de PowerShell installée sur Windows

En ligne de commandes

host
  • La version s'affiche dans la seconde ligne
Comment vérifier la version de PowerShell installée sur Windows
  • Mais vous pouvez aussi utiliser cette commande qui retourne aussi la version de PowerShell
$PSVersionTable
  • Et pour obtenir que la version majeure sans la sous version, utilisez cette commande :
$PSVersionTable.PSVersion.major
Comment vérifier la version de PowerShell installée sur Windows

Notez qu'à l'ouverture de PowerShell, le message suivante vous indique qu'une nouvelle de PowerShell est disponible.

Testez le nouveau système multiplateforme PowerShell https://aka.ms/pscore6

Suivez ce tutoriel pour mettre à jour PowerShell :

Dans le registre Windows

  • Sur votre clavier, appuyez sur la touche
    + R
  • puis saisissez regedit et OK
  • Ensuite dans le volet de gauche, déroulez l'arborescence :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine
  • La version de PowerShell s'affiche dans le volet de droite dans la valeur
Comment vérifier la version de PowerShell installée sur Windows dans le registre Windows

Vérifier si Powershell 7 est installé

PowerShell 7 et PowerShell 5 peuvent cohabiter dans une même version de Windows.
De ce fait, vous pouvez ouvrir les deus versions distinctement.

De plus selon le mode d'installation PowerShell 7 peut s'installer à des emplacements différents :

  • C:\Program Files\WindowsApps\Microsoft.PowerShell_7.1.4.0_x64__8wekyb3d8bbwe\pwsh.exe - si installé par Windows Store
  • C:\Program Files\PowerShell\7\pwsh.exe - par le setup MSI

Pour vérifier si Windows 7 est installé sur Windows :

  • Faites une recherche Windows sur le mot PowerShell ou pwsh
  • En haut, cliquez sur Applications afin de filtrer la recherche sur les applications installées sur votre PC
  • La version 5 possède une icône bleu alors que la version 7 a une icône noire
  • De plus l'interface est un peu différente. N'hésitez pas à utiliser la commande host pour s'assurer de la version
Comment vérifier si Powershell 7 est installé

Comment vérifier la version de PowerShell sur des ordinateurs distants

Vous pouvez vérifier la version de PowerShell sur un ordinateur distant dans un domaine Windows.
Pour vérifier la version PowerShell sur un hôte distant, utilisez la valeur de la variable d'environnement $Psverionable ou obtenez les informations du registre directement. D'autres méthodes peuvent renvoyer des données incorrectes.

Invoke-Command -ComputerName Desktop-93FVJN -ScriptBlock {$PSVersionTable.PSVersion} -Credential $cred
Comment vérifier la version de PowerShell sur des ordinateurs distants
  • Puis saisissez les informations de connexion d'un compte administrateur du domaine ou local
Comment vérifier la version de PowerShell sur des ordinateurs distants
  • La version de PowerShell du PC distant s'affiche alors

L’article Comment connaître la version de PowerShell installée sur Windows est apparu en premier sur malekal.com.

Comment mettre à jour PowerShell sur Windows

13 septembre 2021 à 13:01

Windows PowerShell existe en de nombreuses versions comme PowerShell 5.1, 6,0, 6.1, 7,0, 7.1, etc.
Selon vos besoins, il peut être nécessaire de mettre à PowerShell.

Microsoft continue d'améliorer constamment PowerShell avec de nouvelle version.
Il existe d'ailleurs deux versions : une version classique ou stable et une version de développement.
Ainsi régulièrement, une nouvelle version de PowerShell apparaît apportant de nouvelles fonctionnalités.
Si vous n'avez pas besoin particulier, il n'est pas nécessaire de mettre à jour manuellement Powershell.
En effet, Microsoft livre les mises à jour à travers les mises à jour de fonctionnalités de Windows 10 et Windows 11.

Grâce à ce tutoriel, vous allez trouver toutes les méthodes pour mettre à jour PowerShell sur Windows.

Comment mettre à jour PowerShell sur Windows

Comment mettre à jour PowerShell sur Windows

Vérifier la version de PowerShell

Comment mettre à jour PowerShell 4 vers PowerShell 5

PowerShell 4 est la version par défaut de Windows 8.1 et Windows Server 2012 R2.

Comment mettre à jour PowerShell 4 vers PowerShell 5

Pour passer de la version 4 à la version 5 de PowerShell, vous devez d'abord installer le .Net Framework 4.5.2 ou plus récent puis ensuite installez Windows Management Framework 5.1 (WMF).

  • Installez .NET Framework 4.8 depuis ce lien
  • Redémarrez votre PC
  • Ensuite installez WMF 5.1 à partir de ce lien
  • Après le redémarrage du serveur, ouvrez la console PS et assurez-vous que la version PowerShell a été mise à jour vers 5.1

Comment installer ou mettre à jour vers PowerShell 7

PowerShell 7 s'installe à côté de PowerShell 5.
Ainsi, il est possible de faire tourner les deux versions sur un même PC.

Par le fichier MSI

La première méthode vise à installer Microsoft PowerShell 7 par l'installeur MSI.
Dans ce cas, PowerShell 7 s'installe dans C:\Program Files\PowerShell\7\pwsh.exe.

  • Puis exécutez le pour lancer l'installation
  • Cliquez sur Next pour passer à l'étape suivante
Comment mettre à jour vers PowerShell 7 par le fichier MSI
  • Puis laissez vous guider en cliquant sur Next à chaque étape
  • Par défaut l'installation s'effectue dans C:\Program Files\PowerShell, vous pouvez changer cela par le bouton Change
Comment mettre à jour vers PowerShell 7 par le fichier MSI
  • Puis les copies de fichiers s'effectue
Comment mettre à jour vers PowerShell 7 par le fichier MSI
  • Enfin PowerShell 7 s'ajoute dans la liste des applications du menu Démarrer. Vous pouvez le lancer à partir de cet emplacement
Comment mettre à jour vers PowerShell 7 par le fichier MSI

Par le Microsoft Store

Dans cette seconde méthode, on utilise Microsoft Store pour installer PowerShell 7.
PowerShell 7 s'installe alors dans C:\Program Files\WindowsApps\Microsoft.PowerShell_7.1.4.0_x64__8wekyb3d8bbwe\pwsh.exe.

  • Cliquez sur ce lien pour ouvrir la fiche PowerShell du store
  • Puis cliquez sur le bouton bleu installer ou gratuit
  • L'installation est alors automatique
Comment mettre à jour vers PowerShell 7 par Windows Store
  • Pour ouvrir Powershell 7, cliquez sur le menu Démarrer et cherchez les applications dans la lettre P
Comment mettre à jour vers PowerShell 7 par Windows Store

Par winget

Winget est un gestionnaire de paquet pour Windows.
Vous pouvez l'utiliser pour installer PowerShell 7 sur votre PC.

  • Suivez ce tutoriel pour installer winget sur votre PC
  • Pour mettre à jour PowerShell vers la dernière version avec winget :
winget install --id=Microsoft.PowerShell -e
  • Pour mettre à jour vers une version spécifique, inspirez vous de cette commande en modifiant la version :
winget install --id=Microsoft.PowerShell -v "7.1.2" -e

L’article Comment mettre à jour PowerShell sur Windows est apparu en premier sur malekal.com.

Office 365 : comment convertir un compte synchronisé en compte Cloud ?

6 septembre 2021 à 10:00

I. Présentation

Dans ce tutoriel, nous allons voir comment convertir un compte utilisateur synchronisé à partir d'un Active Directory on-premise (local) en compte Cloud sur votre tenant Office 365.

Lorsque l'on utilise Azure AD Connect, les comptes de l'Active Directory local sont synchronisés sur Office 365. Les objets synchronisés et disponibles sur le tenant Office 365 sont donc liés à ceux de l'Active Directory local. Dans certains cas, on peut avoir besoin de convertir un compte synchronisé en compte Cloud, ce qui permet de dissocier les deux comptes et de les rendre indépendants. De cette façon, on peut désactiver (voire supprimer) le compte dans l'AD local sans impacter le compte du tenant Office 365.

Vous l'aurez compris, dans cet exemple j'utilise un tenant Office 365, un domaine Active Directory et l'outil Azure AD Connect pour synchroniser mon annuaire Active Directory avec Office 365. Un grand classique !

II. Convertir un compte utilisateur synchronisé en compte Cloud

Plusieurs étapes sont nécessaires pour convertir un compte synchronisé à partir d'un Active Directory local en compte Cloud sur Office 365. L'exemple ci-dessous peut s'appliquer à un ou plusieurs utilisateurs et PowerShell sera notre allié une fois de plus pour automatiser ce processus de conversion.

A. Désynchroniser l'utilisateur d'Office 365

Le compte "[email protected]" est créé dans l'Active Directory et il est synchronisé sur le tenant Office 365. Il suffit de regarder la valeur de la colonne "État de synchronisation" pour s'en convaincre.

Dans un premier temps, nous devons désynchroniser cet utilisateur c'est-à-dire qu'il ne doit plus être dans le périmètre de la synchronisation. Deux cas de figure avec Azure AD Connect :

  • Synchronisation basée sur l'appartenance à une unité d'organisation (OU) de l'AD : vous devez déplacer l'utilisateur dans une unité d'organisation qui n'est pas synchronisée.
  • Synchronisation basée sur l'appartenance à un groupe de sécurité : vous devez retirer l'utilisateur du groupe en question, car seuls les membres sont synchronisés sur votre tenant.

Lorsque c'est fait, vous pouvez forcer une synchronisation d'Azure AD Connect ou patienter jusqu'à la prochaine synchronisation automatique.

Attention, cette action n'est pas sans conséquence ! 

Lorsqu'un utilisateur n'est plus dans le périmètre de la synchronisation, il sera supprimé du tenant Office 365 ! Autrement dit, il ira dans la corbeille en ligne de votre tenant puisqu'Azure AD Connect ne le verra plus dans l'AD local. Si le compte est en cours d'utilisation, vous devez prévenir l'utilisateur qu'il va y avoir des perturbations comme par exemple Outlook qui se déconnecte du compte.

Rassurez-vous, les données ne seront pas perdues ! Lorsqu'un compte est supprimé, il est récupérable pendant 30 jours, sans perte des données.

Une fois cette opération de désynchronisation effectuée, je ne parviens plus à trouver mon utilisateur dans les utilisateurs actifs (sur l'interface d'Office 365).

Par contre, dans les "Utilisateurs supprimés", je retrouve bien "[email protected]". Nous pouvons dire qu'il est bien désynchronisé.

Passons à la seconde étape.

B. Restaurer l'utilisateur Office 365 avec PowerShell

Nous devons restaurer l'utilisateur. Il est possible d'effectuer cette action via l'interface graphique, mais aussi en PowerShell. Via l'interface graphique, il suffit de cliquer sur l'utilisateur supprimé et de cliquer sur le bouton "Restaurer l'utilisateur".

Voyons comment faire en PowerShell, ce qui sera bien utile s'il y a de nombreux comptes concernés par l'opération. Tout d'abord, il vous faut le module MSOnline sur votre machine.

Install-Module MSOnline

Ensuite, il faut s'authentifier sur le tenant Office 365. Exécutez la commande suivante :

Connect-MsolService

Pour lister tous les utilisateurs supprimés, on utilise Get-MsolUser avec l'option -ReturnDeletedUsers et -All pour obtenir la liste complète :

Get-MsolUser -ReturnDeletedUsers -All

Pour cibler seulement "[email protected]", c'est tout simple :

Get-MsolUser -UserPrincipalName "[email protected]" -ReturnDeletedUsers

Résultat :

UserPrincipalName             DisplayName     isLicensed
-----------------             -----------     ----------
[email protected]    Utilisateur 1   True

Enfin, pour restaurer l'utilisateur il suffit de s'appuyer sur la commande prévue pour cela : Restore-MsolUser. Ce qui donne :

Restore-MsolUser -UserPrincipalName "[email protected]"

Dans le cas où l'on veut restaurer tous les utilisateurs situés dans la "Corbeille" d'Office 365 :

Get-MsolUser -ReturnDeletedUsers -All | Restore-MsolUser

On pourrait aussi faire une boucle Foreach pour restaurer une liste d'utilisateurs spécifiques, en s'appuyant sur un fichier CSV ou une liste de comptes d'une OU.

Après cette opération de restauration, l'utilisateur "utili[email protected]" est de retour dans les utilisateurs actifs du tenant ! Si l'on regarde l'état de synchronisation de ce compte, on peut voir que l'icône a changé : il s'agit désormais d'un compte Cloud ! C'est un succès ! 🙂


Ensuite, l'utilisateur peut se reconnecter à son compte, avec le même mot de passe (et c'est tant mieux). Par contre, vous ne devez pas remettre l'utilisateur dans le périmètre de la synchronisation Azure AD Connect afin qu'il reste indépendant de l'utilisateur Cloud.

Dernier conseil : pour vous roder, créez un compte de test. 😉

The post Office 365 : comment convertir un compte synchronisé en compte Cloud ? first appeared on IT-Connect.

Office 365 : attribuer des licences avec PowerShell

1 septembre 2021 à 10:00

I. Présentation

Dans ce tutoriel, nous allons voir comment attribuer des licences Office 365 / Microsoft 365 à des utilisateurs à partir de commandes PowerShell. Idéal pour automatiser cette tâche, même s'il y a d'autres façons de faire.

Pour suivre ce tutoriel, vous avez besoin d'une console PowerShell avec un accès sur votre tenant Office 36 et au minimum une licence disponible sur le tenant. En complément, vous devez avoir le module MSOnline de PowerShell sur votre machine.

Sur le sujet des licences avec Office 365 / Microsoft 365, je vous recommande la lecture de ces deux articles en complément :

II. Attribuer une licence Office 365 avec PowerShell

Comme d'habitude, la première étape consiste à se connecter à son tenant :

Connect-MsolService

Ensuite, suivez les étapes ci-dessous.

A. Lister les licences disponibles sur Office 365

il faut lister les licences enregistrées sur votre tenant. C'est important pour récupérer le nom de la licence à attribuer à nos utilisateurs. En effet, le nom d'affichage visible sur l'interface Web n'a rien à voir avec le nom en PowerShell, qui est plutôt un nom technique.

Get-MsolAccountSku

Voici un exemple de sortie :

AccountSkuId                          ActiveUnits WarningUnits ConsumedUnits
------------                          ----------- ------------ -------------
itconnect:ENTERPRISEPACKPLUS_FACULTY  160         0            151 
itconnect:STANDARDWOFFPACK_STUDENT    1000000     0            1842

Quant à la signification, voici pour les deux licences ci-dessus :

ENTERPRISEPACKPLUS_FACULTY = Office 365 Plan A3 pour les enseignants

STANDARDWOFFPACK_STUDENT = Office 365 Plan A1 pour les étudiants

Pour vous aider et avoir la correspondance entre les noms techniques et les noms commerciaux, je vous invite à consulter cette page : Microsoft Docs

Dans cet exemple, je vais attribuer la licence "itconnect:STANDARDWOFFPACK_STUDENT" à un utilisateur.

B. Affecter la licence avec Set-MsolUserLicense

Commençons par affecter le nom de la licence à une variable.

$Licences = "itconnect:STANDARDWOFFPACK_STUDENT"

Si l'on veut attribuer plusieurs licences en même temps, c'est possible. Voici un exemple :

$Licences = "itconnect:ENTERPRISEPACKPLUS_FACULTY","itconnect:STANDARDWOFFPACK_STUDENT"

Toutefois, attention si vous affectez plusieurs licences à un utilisateur, car il peut y avoir des conflits entre certaines licences. Faites un test sur un utilisateur pour valider.

Pour affecter cette licence à l'utilisateur "[email protected]", je vais m'appuyer sur le cmdlet Set-MsolUserLicense. L'option -AddLicenses va permettre de spécifier la ou les licences à attribuer.

Set-MsolUserLicense -UserPrincipalName "[email protected]" -AddLicenses $Licences

Si l'on veut associer cette licence à tous les utilisateurs du tenant qui n'ont pas de licences, on pourra s'appuyer sur Get-MsolUser et l'option -UnlicensedUsersOnly.

Get-MsolUser -UnlicensedUsersOnly -All | Set-MsolUserLicense -AddLicenses $Licences

Si un utilisateur n'a pas de licence, la propriété isLicensed retournée par Get-MsolUser sera égale à False. Après l'exécution de la commande ci-dessus, elle passera sur True puisque l'utilisateur aura une licence.

On peut être plus précis puisque l'on peut afficher la ou les licences affectées à un utilisateur :

(Get-MsolUser -UserPrincipalName "[email protected]").Licenses.AccountSkuId

C. Retirer une licence Office 365 avec PowerShell

Pour finir, un petit bonus pour effectuer l'opération inverse, à savoir retirer la licence Office 365 associée à un utilisateur. Pour cela, la commande Set-MsolUserLicense est nécessaire sauf que l'on va utiliser un paramètre différent : -RemoveLicenses.

Pour supprimer l'affectation de la licence "itconnect:STANDARDWOFFPACK_STUDENT", il suffira de faire :

$Licences = "itconnect:STANDARDWOFFPACK_STUDENT"
Set-MsolUserLicense -UserPrincipalName "[email protected]" -RemoveLicenses $Licences

Si l'on veut retirer toutes les licences attribuées à un utilisateur, peu importe le nom, on peut s'appuyer sur une petite boucle :

$UPN = "[email protected]" 

(Get-MsolUser -UserPrincipalName $UPN).Licenses.AccountSkuId | 
   foreach{
      Set-MsolUserLicense -UserPrincipalName $UPN -RemoveLicenses $_
   }

À vous de jouer !

The post Office 365 : attribuer des licences avec PowerShell first appeared on IT-Connect.

Powerline: Customize your PowerShell console

31 août 2021 à 21:37

Learn how to customize your PowerShell console to display meaningful metadata in your Windows command shell with Powerline.

The post Powerline: Customize your PowerShell console first appeared on 4sysops.

Manage Azure Policy using PowerShell

26 août 2021 à 17:17

Azure policies are becoming increasingly popular, as they provide a wide range of management capabilities over Azure resources. Not only do they allow us to enforce policy rules to control Azure resources, but they can also enable us to automatically evaluate compliance and remediate noncompliant resources. In this post, we will look at how to manage Azure Policy using PowerShell for common tasks, including creating policy definitions, managing policy assignments, and reporting compliance status.

The post Manage Azure Policy using PowerShell first appeared on 4sysops.

Microsoft Store : télécharger et installer manuellement un package APPX

25 août 2021 à 10:00

I. Présentation

Sous Windows 10 (et Windows 11), lorsque l'on installe une application à partir du Microsoft Store, l'installation s'effectue grâce à un fichier au format "appx" ou "appxbundle". Ceci est dû au fait que ce sont des applications universelles : UWP pour Universal Windows Platform.

Le Microsoft Store permet d'effectuer une installation en local, mais il ne permet pas de télécharger le fameux package d'installation pour le déployer sur une autre machine et réaliser, ce que l'on pourrait appeler, une installation hors ligne d'un package APPX. Dommage, car sur des machines isolées du réseau ou avec des configurations particulières, cela pourrait s'avérer bien pratique.

Dans ce tutoriel, nous allons voir qu'il est possible de récupérer le package APPX / APPXBundle d'une application du Microsoft Store pour réaliser une installation manuelle sur un poste Windows.

II. Télécharger un paquet APPX pour une installation hors ligne

La première étape consiste à générer un lien de téléchargement pour notre application du Microsoft Store et à récupérer le fichier d'installation. Pour cela, je vais prendre l'application Microsoft To-Do comme exemple.

Note : la méthode détaillée dans cet article ne fonctionne pas avec les applications payantes. Autrement dit, elle ne permet pas de récupérer gratuitement des applications payantes !

Commencez par vous rendre sur le Microsoft Store à partir d'un navigateur : Microsoft Store

Recherchez l'application qui vous intéresse, pour ma part Microsoft To-Do, et lorsque vous êtes sur la page de l'application, effectuer un "copier" de l'URL.

Ouvrez un deuxième onglet pour accéder au site suivant : store.rg-adguard.net

Ce site permet d'obtenir des liens de télécharger pour les paquets du Microsoft Store. Il est fiable et gratuit, en l'échange de quelques publicités.

Sélectionnez "URL (link)" et collez l'adresse de votre application. Cliquez sur le bouton pour valider.

Une liste (assez longue) de résultats est retournée ! Nous avons plusieurs paquets différents et c'est normal. Le site affiche notre application Microsoft To-Do mais également les paquets correspondants aux dépendances. Je ne vous apprends rien si je vous dis que l'application ne fonctionnera pas sans ses dépendances.

Vous devez maintenant récupérer les différents paquets, en suivant les consignes suivantes :

  • Téléchargez l'application au format "appx" ou "appxbundle", dans la version la plus récente
  • Les paquets avec l'extension "eappx" ou "eappxbundle" correspondent à des mises à jour, on peut les ignorer pour une installation initiale
  • Un paquet appxbundle intègre toutes les architectures tandis qu'un fichier appx correspond à une architecture spécifique, par exemple x64 : faites le bon choix
  • Téléchargez les paquets correspondants aux différentes dépendances (si nécessaire en fonction de la configuration de la machine cible)

Au final, vous allez télécharger plusieurs fichiers : l'application et ses dépendances. Bonne nouvelle : vous avez tout ce qui est nécessaire pour installer l'application UWP en mode hors ligne.

Pour ma part, voici le nom du paquet de l'application :

Microsoft.Todos_2.50.42141.0_neutral_~_8wekyb3d8bbwe.appxbundle

III. Installer manuellement un paquet APPX

Basculez sur une machine où l'application n'est pas présente (ou pas à jour) et transférez les paquets. Pour installer un package APPX ou APPXBUNDLE sur Windows, c'est simple il suffit de l'ouvrir.

Une fenêtre comme celle ci-dessous s'affiche pour vous proposer l'installation (ou la mise à jour).

Quelques secondes plus tard, le tour est joué ! L'application s'ouvre !

Dans un premier temps, je vous invite à tenter l'installation de l'application en elle-même, sans vous occuper des dépendances. Ensuite, si vous avez un message d'erreur, il y a des chances pour que ce soit à cause d'une dépendance qui est manquante. Dans ce cas, installez d'abord les dépendances puis, dans un second temps, l'application.

IV. Installer plusieurs paquets APPX avec PowerShell

PowerShell intègre une commande capable de réaliser l'installation d'un paquet APPX ou APPXBUNDLE alors pourquoi s'en priver ? Comme vous le savez, j'adore PowerShell alors je suis obligé de vous expliquer comment faire !

L'idée est la suivante : utiliser le cmdlet Add-AppxPackage et spécifier le chemin vers le package à installer (-Path). Voici un exemple :

Add-AppxPackage -Path "C:\Users\Florian\Desktop\Microsoft.Todos_2.50.42141.0_neutral_~_8wekyb3d8bbwe.appxbundle"

Ce qui est cool, c'est qu'avec une simple boucle nous allons pouvoir installer plusieurs paquets APPX très facilement !

Par exemple, pour installer tous les fichiers APPX (ou APPXBUNDLE) stockés dans le dossier "C:\Sources\", voici comment procéder. La commande Get-ChildItem va nous permettre de récupérer les éléments du dossier (avec un filtre sur l'extension) et grâce à une boucle, nous allons installer chaque paquet avec la commande Add-AppxPackage.

Ce qui donne :

Get-ChildItem "C:\Sources\" -Filter *.appxbundle | Foreach{ Add-AppxPackage -Path $_.FullName }

Pour inclure plusieurs extensions, car on peut rencontrer le cas, voici la syntaxe :

Get-ChildItem "C:\TEMP\APPX\*" -Include ('*.appx','*.appxbundle') | Foreach{ Add-AppxPackage -Path $_.FullName }

À vous de jouer ! 🙂

The post Microsoft Store : télécharger et installer manuellement un package APPX first appeared on IT-Connect.

PowerShell grep : rechercher des chaînes de caractères avec Select-String

23 août 2021 à 11:00

I. Présentation

Dans ce tutoriel, nous allons voir comment utiliser grep en PowerShell grâce à la commande Select-String dans le but de rechercher une chaîne de caractères dans un ensemble de fichiers.

La commande "grep" est très populaire sous Linux et elle est très appréciée des administrateurs système. En effet, elle permet de rechercher des chaînes de caractères au sein de fichiers présents sur votre machine, de manière efficace. Au quotidien, c'est très pratique pour rechercher un mot clé dans un fichier de configuration ou effectuer une recherche au sein d'un fichier de log.

Sous Windows, il existe une commande équivalente à grep par l'intermédiaire de PowerShell. Il s'agit de la commande Select-String et je vous propose d'apprendre à l'utiliser en lisant cet article. Il y a également une autre alternative sous Windows, par l'intermédiaire de l'outil natif findstr.exe.

II. Les paramètres de Select-String

La commande Select-String contient de nombreux paramètres qui vont être utiles pour affiner notre filtre de recherche. Avant de passer à la pratique, il me semblait intéressant de vous lister et de vous expliquer les paramètres principaux.

-AllMatches

Rechercher toutes les occurrences de notre chaîne de caractères / de notre filtre sur une même ligne. Par défaut, Select-String va s'arrêter dès qu'il trouvera un premier résultat sur une ligne, ce qui peut s'avérer contraignant. Avec ce paramètre, nous aurons tous les résultats, sans limites. Autrement dit, sans -AllMatches, on peut avoir seulement un résultat par ligne.

-CaseSensitive

Par défaut, la recherche n'est pas sensible à la casse. Lorsque ce paramètre est défini, la recherche va tenir compte de la casse, c'est-à-dire des minuscules et majuscules.

-Context

Paramètre très intéressant qui va permettre d'indiquer combien de lignes avant et après le match (résultat) il faut afficher, en plus de la ligne correspondante à la recherche. Je trouve cela particulièrement intéressant lorsque l'on s'intéresse à des logs.

-Encoding

Permets de spécifier l'encodage à utiliser. Par défaut "utf8NoBOM", mais il y a d'autres choix : ascii, oem, unicode, utf8, utf32, etc.

-Exclude

Exclure certains fichiers du périmètre de la recherche. Par exemple, tous les fichiers qui utilisent une extension spécifique.

-Include

Inclure uniquement les fichiers correspondants au filtre -Inclure. Par exemple, pour effectuer une recherche uniquement sur les fichiers .log.

-InputObject

Rechercher dans un objet existant (envoyé en entrée) plutôt qu'au sein des fichiers stockés dans un dossier.

-NotMatch

Afficher les résultats qui ne correspondent pas au filtre de recherche / recherche inverse.

-Pattern

C'est ici que l'on spécifie le filtre de la recherche, ce qui peut être une simple chaîne de caractères, plusieurs chaînes de caractères, mais aussi un filtre sous la forme d'une expression régulière (regex).

-Path

Ce paramètre basique sert à spécifier le répertoire dans lequel effectuer la recherche ou le fichier dans lequel rechercher.

Maintenant que le décor est planté, passons à la pratique : connaître les paramètres de Select-String c'est bien, savoir les utiliser c'est encore mieux.

III. PowerShell grep avec Select-String : exemples

Pour mieux comprendre le fonctionnement de la commande "grep" à la sauce Windows, je vous propose quelques exemples.

A. PowerShell - Rechercher une chaîne de caractères dans un fichier

Commençons par rechercher une chaîne de caractères simple dans un fichier spécifique : la chaîne "florian" dans le fichier "data.csv" qui contient une liste d'utilisateurs.

Voici le contenu du fichier :

prenom;nom;
florian;burnel;
gerard;mensoif;
vincent;tyme;
maude;zarella;

Voici la commande recherche :

Select-String -Path "C:\TEMP\GREP\Data.csv" -Pattern "florian"

Voici le résultat :

Exemple d'utilisation de Select-String (grep) en PowerShell

Le résultat est correct puisqu'il a trouvé la ligne avec la chaîne "florian". Le terme est surligné dans le résultat pour bien montrer son emplacement dans la liste. Plus précisément, voici comment se décompose la ligne :

TEMP\GREP\Data.csv:2:florian;burnel;
<fichier-où-se-situe-le-résultat>:<numéro de ligne>:<contenu de la ligne>

Il y a plusieurs propriétés associées à cette commande. Par exemple, nous pouvons récupérer le numéro de la ligne :

(Select-String -Path "C:\TEMP\GREP\Data.csv" -Pattern "florian").LineNumber

Pour visualiser toutes les propriétés et méthodes disponibles, on utilisera "Get-Member" (gm).

Select-String -Path "C:\TEMP\GREP\Data.csv" -Pattern "florian" | gm

B. PowerShell - Rechercher une chaîne de caractères dans plusieurs fichiers

Nous pouvons rechercher la chaîne "florian" dans plusieurs fichiers, et pas seulement dans le fichier "data.csv". Si l'on veut rechercher ce terme dans tous les fichiers du dossier "C:\TEMP\GREP", on utilisera cette commande :

Select-String -Path "C:\TEMP\GREP\*" -Pattern "florian"

Voici le résultat :

TEMP\GREP\Data.csv:2:florian;burnel;
TEMP\GREP\Data3.csv:4:florian;burnel;

Cette fois-ci, la commande a trouvé deux résultats différents, au sein de deux fichiers distincts.

C. PowerShell - Rechercher plusieurs chaînes de caractères

Si l'on veut rechercher plusieurs chaînes de caractères différentes, il n'est pas nécessaire d'utiliser plusieurs commandes : le paramètre -Pattern prend en charge les valeurs multiples. Il suffit de les séparer par une virgule.

Voici un exemple :

Select-String -Path "C:\TEMP\GREP\*" -Pattern "florian","tyme"

Voici le résultat :

Lorsque l'on commence à rechercher plusieurs chaînes dans plusieurs fichiers, il me semble pertinent de revoir un petit peu la mise en forme du résultat. Pour cela, nous allons nous aider du cmdlet Select-Object pour sélectionner les propriétés que l'on souhaite afficher.

Par exemple, on peut récupérer le nom du fichier, le pattern trouvé et le contenu de la ligne :

Select-String -Path "C:\TEMP\GREP\*" -Pattern "florian","tyme" | Select-Object FileName, Pattern, Line

Ce qui donne :

Note : on pourrait remplacer "Filename" par "Path" pour afficher le chemin complet vers le fichier.

Pratique, n'est-ce pas ? 🙂

Pour affiner la recherche et sélectionner uniquement les fichiers TXT, il y a deux manières de procéder.

Note : au préalable, je fais une copie du fichier data.csv en data10.txt pour que cela fonctionne.

Tout d'abord, on peut indiquer le filtre directement au niveau de -Path, comme ceci :

Select-String -Path "C:\TEMP\GREP\*.txt" -Pattern "florian","tyme"

Sinon, on peut utiliser le paramètre -Include pour filtrer sur une extension de fichiers. Ce qui donne la commande suivante pour un filtre sur .TXT :

Select-String -Path "C:\TEMP\GREP\*" -Include "*.txt" -Pattern "florian","tyme"

L'avantage de -Include, c'est que l'on peut préciser plusieurs filtres. Voici un exemple pour .TXT et .CSV :

Select-String -Path "C:\TEMP\GREP\*" -Include "*.txt","*.csv" -Pattern "florian","tyme"

D. PowerShell - Rechercher à l'aide du paramètre -Context de Select-String

Le paramètre -Context permet d'afficher la ligne où le pattern a été trouvé, ainsi que les X lignes précédentes et les X lignes suivantes. Si l'on utilise -Context 3, on va obtenir 7 lignes au total : 3 lignes avant la ligne où le pattern est présent, la ligne où le pattern est présent, et 3 lignes après la ligne où le pattern est présent.

Voici un exemple où je recherche les erreurs 404 au sein d'un fichier de log de Nginx :

Select-String -Path "C:\TEMP\GREP\access-light.log" -Pattern "404" -Context 3

On peut gérer de façon indépendante le nombre de lignes avant et après à afficher. Il suffit de préciser deux valeurs séparées par une virgule. La première valeur correspond au nombre de lignes avant et la seconde au nombre de lignes après.

Par exemple, pour afficher une ligne avant et trois lignes après, cela donne :

Select-String -Path "C:\TEMP\GREP\access-light.log" -Pattern "404" -Context 1,3
Exemple d'utilisation de Select-String (grep) en PowerShell avec le paramètre -Context

Grâce au caractère ">" on peut repérer facilement la ligne où a été trouvé le pattern.

Sur un fichier très conséquent, la sortie dans la console peut être importante. On peut exporter le résultat de la recherche vers un autre fichier, comme ceci (vers le fichier C:\TEMP\resultat-grep.txt) :

Select-String -Path "C:\TEMP\GREP\access-light.log" -Pattern "404" -Context 1,3 | Out-File -Path "C:\TEMP\resultat-grep.txt"

On pourrait aussi limiter l'affichage au premier résultat ou au X premiers résultats. Pour cela, on va coupler Select-String à l'utilisation de Select-Object :

Select-String -Path "C:\TEMP\GREP\access-light.log" -Pattern "404" -Context 0,1 | Select-Object -First 1

On peut aussi affiner avec Select-Object et exporter dans un fichier ce résultat affiné :

Select-String -Path "C:\TEMP\GREP\access-light.log" -Pattern "404" -Context 1,3 | Select-Object -First 1 | Out-File -Path "C:\TEMP\resultat-grep.txt"

E. PowerShell - Recherche récursive avec Select-String

Seule, la commande Select-String recherche uniquement dans le dossier courant, mais pas de manière récursive c'est-à-dire que les sous-dossiers ne sont pas pris en compte. Pour utiliser la récursivité, il faut s'appuyer sur la commande Get-ChildItem puisqu'elle va permettre de récupérer la liste de l'intégralité des fichiers et dossiers. Ce résultat sera envoyé à la commande Select-String via le pipe "|". À partir de là, on peut effectuer un grep récursif à l'aide de PowerShell.

On viendra positionner le répertoire -Path au niveau de Get-ChildItem donc il n'est plus nécessaire de le spécifier au sein de Select-String.

Get-ChildItem -Path "C:\Temp\GREP\" -Recurse | Select-String -Pattern "florian"

Puisque ls et dir sont des alias de Get-ChildItem, on peut les utiliser également.

ls "C:\Temp\GREP\" -Recurse | Select-String -Pattern "florian"
dir "C:\Temp\GREP\" -Recurse | Select-String -Pattern "florian"

On peut voir sur l'image ci-dessous que nous avons un nouveau résultat, au sein du sous-dossier "SOUS-DOSSIER", ce qui n'était pas le cas précédemment.

PowerShell : comment utiliser Select-String de manière récursive ?

F. PowerShell - Rechercher toutes les adresses IP dans un fichier

Pour finir, je vous propose un dernier exemple où l'on va rechercher les adresses IP dans un fichier. Nous n'allons pas rechercher une adresse IP précise, car c'est trop facile, mais l'on va rechercher toutes les adresses IP présentes dans le fichier de log "access.log".

Pour cela, on va s'appuyer sur une expression régulière. Comme je l'expliquais dans mon tutoriel sur le sujet, on peut rechercher une adresse IP avec le pattern suivant :

\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}

Bien qu'il ne soit pas ultra précis, car il autorise les adresses IP 300.300.300.300, 400.500.600.700, etc... Il devrait être suffisant pour s'attaquer à ce fichier de log. Il suffit de préciser l'expression régulière au sein du paramètre -Pattern :

Select-String -Path "C:\TEMP\GREP\access.log" -Pattern "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"

Ce qui donne :

Rechercher toutes les adresses IP présentes dans un fichier

Suite à cette recherche, on pourrait facilement obtenir la liste de toutes les adresses IP référencées dans ce fichier. Pour cela, il faut regarder au sein des différents matchs de la Regex avec une boucle sur $_.Matches et une seconde boucle pour récupérer la valeur de chaque match. Ce qui donne la commande suivante :

Select-String -Path "C:\TEMP\GREP\access.log" -Pattern "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" | Foreach{ $_.Matches } | Foreach{ $_.Value }

Ensuite, on obtient la liste des adresses IP trouvées dans le fichier access.log :

On pourrait affiner notre pattern et rechercher toutes les requêtes qui correspondent à un réseau IP spécifique, ou qui commence d'une certaine façon. Par exemple, pour rechercher toutes les requêtes (c'est-à-dire toutes les lignes) où l'on trouve une adresse IP sous la forme "211.X.X.X", on fera :

Select-String -Path "C:\TEMP\GREP\access.log" -Pattern "211.\d{1,3}.\d{1,3}\.\d{1,3}"

De la même façon, on pourrait rechercher toutes les lignes avec une adresse IP sous la forme "192.168.X.X" :

Select-String -Path "C:\TEMP\GREP\access.log" -Pattern "192.168.\d{1,3}\.\d{1,3}"

Voilà, c'est la fin du dernier exemple sur l'utilisation de Select-String. Mais ce n'est pas terminé, il nous reste un petit bonus à découvrir.

IV. Bonus : créer un alias grep pour Select-String

Vous aimeriez pouvoir saisir "grep" plutôt que "Select-String" ? Alors j'ai une solution pour vous : la création d'un alias !

Il suffit de créer un alias de cette façon :

New-Alias grep Select-String

Ensuite, on peut utiliser grep à la place de Select-String, mais les paramètres restent les mêmes, bien entendu.

grep -Path "C:\TEMP\GREP\access.log" -Pattern "127.0.\d{1,3}\.\d{1,3}"
Créer un alias grep pour la commande Select-String

Attention, cet alias sera temporaire : lorsque la console PowerShell sera fermée, il sera supprimé. Pour le rendre persistant, je vous invite à lire mon tutoriel sur les alias en PowerShell : PowerShell - Alias

N'hésitez pas à partager vos astuces avec Select-String en PowerShell en postant un commentaire sur cet article ! 😉

The post PowerShell grep : rechercher des chaînes de caractères avec Select-String first appeared on IT-Connect.

Comment changer la police par défaut dans Terminal Windows

22 août 2021 à 11:44

Windows Terminal est l'application de terminal par défaut dans Windows 11. Voici des façons faciles différentes d'ouvrir la borne Windows dans Windows 11.

Contrairement à Windows 10, le nouveau terminal Windows est l'application de terminal par défaut dans Windows 11. Vous n'avez plus besoin de l'installer manuellement. Il est inclus par défaut. Par rapport aux précédents shell de Windows, Windows Terminal est moderne, rapide et puissant. Si vous avez vu Windows Terminal, vous savez qu'il fournit une interface utilisateur unifiée pour accéder à toutes les shell de Windows dans un emplacement central avec une interface utilisateur à onglets.
Grâce à l'option Profils, vous pouvez créer plusieurs profils avec différentes configurations de shell.
Parmi les options pour personnaliser l'affichage et l'apparence, on peut modifier les police de caractères.

Dans ce tutoriel, nous allons voir comment changer la police par défaut dans Terminal Windows.

Comment changer la police par défaut dans Terminal Windows

Comment changer la police par défaut dans Terminal Windows

Par défaut, chaque profil utilise la même police de caractères Cascadia Mono.

La police d'écriture de Windows Terminal
  • Ouvrez Windows Terminal
  • Puis cliquez sur le menu déroulant sur la barre de titre
  • Sélectionnez l'option Paramètres. Notez que vous pouvez accéder directement aux paramètres par le raccourci clavier : CTRL+,
Ouvrir les paramètres de Windows Terminal
  • Ensuite cliquez sur le profil depuis le menu de gauche 1
  • Puis cliquez sur le menu Apparence en haut 2
Accéder au menu Apparence de Windows Terminal
  • Puis vous accédez aux paramètres de polices, texte. Vous pouvez modifier le type de police et en dessous la taille de la police
  • Enfin plus bas, vous pouvez définir l'épaisseur du texte
Comment changer la police par défaut dans Terminal Windows
  • Cliquez sur Enregistrer en bas à droite de l'écran pour prendre en compte les modifications
  • Ouvrez un nouvel onglet du profil pour bénéficier des changements de police de caractères
Comment changer la police par défaut dans Terminal Windows
Bravo ! vous avez réussi à changer la police sur Windows Terminal.

Modifier la police par défaut globale sur Windows Terminal

Comme nous venons de le voir, les modifications des polices se font sur les profils.
Mais comment changer la police par défaut de manière globale sur Windows Terminal ?
Cela se fait dans le fichier de configuration settings.json.

  • Cliquez en bas à gauche sur Ouvrir le fichier JSON
Ouvrez le fichier de configuration settings.json de Windows Terminal
  • Cela ouvre le fichier de configuration Windows Terminal dans l'éditeur de texte. Repérez la ligne du profil par défaut :
"defaults": {},
Modifier la police par défaut globale sur Windows Terminal
  • Puis saisissez fontFace suivi du nom de la police en respectant la syntaxe suivante
"defaults": {
		"fontFace": "Consolas"
	},
  • Enregistrez les modifications par le raccourci clavier CTRL+S
Modifier la police par défaut globale sur Windows Terminal
Bravo ! vous avez réussi à changer la police par défaut de Windows Terminal.

L’article Comment changer la police par défaut dans Terminal Windows est apparu en premier sur malekal.com.

Comment changer l’image d’arrière plan de Windows Terminal (Personnalisation)

21 août 2021 à 13:44

Pour rendre votre Windows Terminal plus esthétique et le personnaliser, il est possible de changer l'image d'arrière plan.
La possibilité de définir l'image de fond de terminal Windows est une option de personnalisation très utiles.
Ainsi, lors de l'exécution de plusieurs coquilles sous la borne Windows, régler des images d'arrière-plan pour chaque coquille le rend beaucoup plus accueillant et facile à reconnaître.

Dans ce tutoriel, je vous guide pour changer l'image d'arrière plan de Windows Terminal de Windows 11 et Windows 10.

Comment changer l'image d'arrière plan de Windows Terminal

Comment changer l'image d'arrière plan de Windows Terminal

Vous pouvez définir des images de fond séparées pour chaque shell du terminal. La bonne chose, contrairement aux versions plus anciennes où vous devez modifier le fichier JSON des paramètres, vous pouvez maintenant utiliser le panneau Paramètres pour définir ou modifier l'image d'arrière-plan.

  • Ouvrez Windows Terminal
  • Puis cliquez sur le menu déroulant sur la barre de titre
  • Sélectionnez l'option Paramètres. Notez que vous pouvez accéder directement aux paramètres par le raccourci clavier : CTRL+,
Ouvrir les paramètres du terminal de Windows
  • Ensuite cliquez sur le profil depuis le menu de gauche 1
  • Puis cliquez sur le menu Apparence en haut 2
Accéder au menu Apparence de Windows Terminal
  • Descendez pour chercher le paramètre Image d'arrière plan
  • Cliquez sur Parcourir
Comment changer l'image d'arrière plan de Windows Terminal
  • Puis naviguez dans vos dossiers pour sélectionner l'image de fond à appliquer
Comment changer l'image d'arrière plan de Windows Terminal
  • Enfin cliquez sur sur le bouton Enregistrer en bas à droite
Comment changer l'image d'arrière plan de Windows Terminal
  • La nouvelle image de fond s'applique automatiquement sur Windows Terminal
Comment changer l'image d'arrière plan de Windows Terminal

Personnaliser l'apparence de l'image de fond dans le terminal Windows

Après avoir défini l'image de fond de terminal Windows, vous pouvez modifier son apparence et vous sentir en modifiant la transparence, l'acrylique, la position et les effets d'étirement.

Toutes ces options sont disponibles sous l'onglet "Apparence" des paramètres Shell.
d".

  • Accédez au menu Apparence du profil
  • Si la position par défaut de l'image de fond n'est pas à votre goût, changez-la sous la section Alignement de l'image de fond
  • Pour rendre l'image un peu transparente, modifiez le curseur Opacité de l'image de fond
Personnaliser l'apparence de l'image de fond dans le terminal Windows

De la même manière, vous pouvez activer l'effet translucide flou en allumant l'option acrylique.

  • Descendez plus bas pour activer Acrylique
  • Puis réglez l'opacité de l'acrylique
  • Enfin cliquez sur sur le bouton Enregistrer en bas à droite
Personnaliser l'apparence de l'image de fond dans le terminal Windows
  • Automatiquement la transparence s'applique au profil
Personnaliser l'apparence de l'image de fond dans le terminal Windows

Changer et personnaliser l'image d'arrière plan de Windows Terminal par settings.json

Vous pouvez aussi personnaliser l'image d'arrière plan et transparence directement dans le fichier settings.json.
On accède à ce dernier par le bouton Ouvrir le fichier JSON en bas à gauche de la page des paramètres.

Ouvrez le fichier de configuration settings.json de Windows Terminal

Dans la partie profil, jouez sur les paramètres suivants pour changer l'image de fond et l'opacité.

"backgroundImage" : "C:/Users/MaK/Images/malekalbanner-phpbb.png",
"backgroundImageOpacity" : 0.75,
"backgroundImageStretchMode" : "fill",

backgroundImageOpacity est la valeur qui permet de jouer sur l'opacité de l'image du Windows Terminal.

Modifier l'image de fond et transparence du Windows Terminal

La transparence se règle grâce à acrylicOpacity.
Les valeurs vont de 0.75 à 0.5.
Enfin useAcrylic doit être réglé sur True.

Par exemple sur le profil Windows Powershell :

{
                "useAcrylic": true
                "acrylicOpacity": 0.31,
                "backgroundImage" : "C:/Users/MaK/Images/malekalbanner-phpbb.png",
                "backgroundImageOpacity" : 0.75,
                "backgroundImageStretchMode" : "fill",
                "commandline": "powershell.exe",
                "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
                "hidden": false,
                "name": "Windows PowerShell"             
            },

Pour appliquer la transparence à tous les profils, il faut modifier la section defaults :

  • Modifiez le fichier settings.son
  • Cherchez la sections defaults
  • Enfin modifiez la en ajoutant le code suivant
"defaults":
        {
            "acrylicOpacity" : 0.08,
            "backgroundImage" : "C:/Users/MaK/Images/malekalbanner-phpbb.png",
            "backgroundImageOpacity" : 0.75,
            "backgroundImageStretchMode" : "fill",
            "closeOnExit" : true,
            "cursorColor" : "#FFFFFF",
            "cursorShape" : "bar",
            "fontFace" : "Consolas",
            "fontSize" : 12,
            "historySize" : 9001,
            "padding" : "0, 0, 0, 0",
            "snapOnInput" : true,
            "useAcrylic" : true,
        },

L’article Comment changer l’image d’arrière plan de Windows Terminal (Personnalisation) est apparu en premier sur malekal.com.

❌