Vue normale

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

Comment utiliser la méthode Trim de PowerShell pour nettoyer une chaîne de caractères ?

7 mars 2024 à 14:00

I. Présentation

Dans ce tutoriel, nous allons apprendre à utiliser la méthode de Trim() de PowerShell qui va s'avérer très utile pour nettoyer une chaine de caractères, que ce soit pour supprimer les espaces inutiles, ou un autre type de caractères.

La méthode Trim() est intégrée nativement dans PowerShell, ainsi que dans d'autres langages, et elle est généralement utilisée pour supprimer les espaces au début et à la fin d'une chaîne de caractères. Ces espaces indésirables peuvent correspondre à un espace unique, mais aussi à une tabulation.

Elle est utile dans différents scénarios, notamment quand le script demande à l'utilisateur de saisir quelque chose (via un Read-Host) ou que vous traitez des données récupérées à partir d'un fichier source.

II. Exemples d'utilisation de Trim()

A. Supprimer les espaces

Nous allons commencer par utiliser la méthode Trim() de PowerShell pour éliminer les espaces en début et en fin de chaînes de caractères.

Voici la chaine de caractères que nous allons manipuler :

$Texte = "  Tutoriel pour IT-Connect  "

Nous pouvons constater qu'il y a des espaces à trois endroits : avant le texte (2), après le texte (2), et entre chaque mot. Puisque les espaces sont en quelque sorte "invisibles", nous allons obtenir la longueur de cette chaine de caractères via la propriété "Length".

$Texte.Length
# Résultat actuel :
28

Maintenant, nous allons appliquer la méthode Trim() sur cette chaine de caractères, stocker, le résultat dans une variable et calculer la longueur de la nouvelle chaine obtenue.

$TexteTrim = $Texte.Trim()
$TexteTrim.Length

Cette fois-ci, nous obtenons une valeur différente : 24 au lieu de 28. En effet, la méthode Trim() a supprimé les espaces avant et après le texte, qui sont inutiles, tout en conservant les espaces entre les mots, qui eux sont utiles !

Testez par vous-même avec ces quelques lignes de code :

Write-Host "Sans la méthode Trim()" -ForegroundColor Green

$Texte = "  Tutoriel pour IT-Connect  "
$Texte
$Texte.Length

Write-Host "Avec la méthode Trim()" -ForegroundColor Green

$TexteTrim = $Texte.Trim()
$TexteTrim
$TexteTrim.Length

Ce qui donne :

PowerShell - Supprimer espaces inutiles avec Trim

B. Supprimer le caractère de votre choix

Par défaut, Trim() supprime les espaces inutiles (espace, tabulation). Sachez que vous pouvez l'utiliser pour supprimer un caractère spécial de votre choix. Imaginons que nous souhaitons éliminer les "#" en début et fin de chaînes de caractères. Il suffirait d'utiliser la méthode Trim() de cette façon :

$Texte.Trim("#")

Vous pouvez tester avec ce bout de code où les espaces sont remplacés par le symbole "#" pour cette démonstration.

Write-Host "Sans la méthode Trim()" -ForegroundColor Green

$Texte = "##Tutoriel pour IT-Connect##"
$Texte
$Texte.Length

Write-Host "Avec la méthode Trim()" -ForegroundColor Green

$TexteTrim = $Texte.Trim("#")
$TexteTrim
$TexteTrim.Length

Ce qui donne bien le résultat attendu :

PowerShell - Supprimer les caractères inutiles avec Trim

Il est important de préciser que dans ce cas, Trim() va supprimer les caractères "#" mais il va conserver les espaces éventuels.

C. Supprimer plusieurs types de caractères

Si vous souhaitez utiliser la méthode Trim() pour supprimer les espaces, ainsi que d'autres caractères, sachez que c'est possible. Dans ce cas, vous devez simplement ajouter dans les parenthèses cette liste de caractères.

Dans l'exemple ci-dessous, nous allons chercher à éliminer les espaces, les "#" et les "?". Voici un bout de code pour tester :

Write-Host "Sans la méthode Trim()" -ForegroundColor Green

$Texte = "## Tutoriel pour IT-Connect ?"
$Texte
$Texte.Length

Write-Host "Avec la méthode Trim()" -ForegroundColor Green

$TexteTrim = $Texte.Trim("#? ")
$TexteTrim
$TexteTrim.Length

Ce qui donne :

Voilà, nous obtenons bien le résultat attendu ! Sachez que Trim() fonctionne aussi avec les lettres et les chiffres. Cette méthode n'est pas réservée aux caractères spéciaux même si nous l'utilisons souvent dans ce but.

Remarque : la méthode Trim() peut également être utilisée pour supprimer un caractère à partir de son code Unicode. Dans ce cas, et si vous avez ce besoin particulier, il faut adopter la syntaxe suivante : $Texte.Trim([char]0x0061). Ce code correspond à la lettre "a".

D. TrimStart() et TrimEnd()

La méthode Trim() est très pratique, mais elle effectue systématiquement le nettoyage au début et à la fin de la chaîne de caractères. Si vous avez besoin de supprimer uniquement les espaces ou les caractères inutiles au début de la chaîne, ou à l'inverse, à la fin de la chaîne, sachez que vous pouvez utiliser ces deux méthodes :

  • TrimStart() pour les caractères au début de la chaîne
  • TrimEnd() pour les caractères à la fin de la chaine

La méthode TrimEnd() est utile lorsque l'on manipule des chemins pour supprimer le dernier "\" qui peut être ajouté à la suite du dernier répertoire, ce qui permettra facilement de venir ajouter le nom d'un autre répertoire en le préfixant par "\" sans risquer de se retrouver avec un double "\\". Ceci nous permet de contrôler que le chemin aura bien le format attendu : si ce chemin est fourni par une saisie utilisateurs, vous avez une chance sur deux que le "\" à la fin soit présent. Avec TrimEnd(), ce problème potentiel est éliminé.

Voici un exemple où l'on élimine le caractère "\", ce qui oblige à rajouter un caractère d'échappement :

$Chemin = "C:\TEMP\"
$Chemin.TrimEnd("/\")
# Résultat : 
C:\TEMP

Ces deux méthodes fonctionnent sur le même principe et apportent un peu plus de souplesse.

III. Conclusion

Avec PowerShell, la méthode Trim() fait partie des incontournables, au même type que d'autres méthodes que j'ai l'habitude d'utiliser fréquemment : Split(), Substring(), etc.

The post Comment utiliser la méthode Trim de PowerShell pour nettoyer une chaîne de caractères ? first appeared on IT-Connect.

Intune – Comment exécuter un script PowerShell sur Windows ?

6 mars 2024 à 18:00

I. Présentation

Dans ce tutoriel, nous allons apprendre à exécuter un script PowerShell sur des appareils Windows à l'aide de Microsoft Intune. Ainsi, un script PowerShell chargé sur Intune pourra être exécuté sur un ensemble de machines sous Windows 10 ou Windows 11.

Nous allons commencer par évoquer les prérequis et le fonctionnement de cette fonctionnalité, avant la mise en pratique qui consistera à exécuter un script PowerShell qui va configurer une image de fond d'écran et de verrouillage sur Windows 10 Pro et Windows 11 Pro (pour les éditions Enterprise et Education, il y a des paramètres natifs dans Intune).

II. Prérequis

Pour exécuter un script PowerShell sur des appareils Windows, sachez que Microsoft Intune Management Extension doit être installé sur l'appareil. Ce composant s'installe automatiquement à partir du moment où un script ou une application Win32 est attribué à un appareil.

Pour Microsoft Intune Management Extension, et donc exécuter un script PowerShell, il y a plusieurs prérequis à respecter :

  • Appareils joints dans Entra ID : Microsoft Entra Joined (Azure AD Joined) et Microsoft Entra Hybrid Joined (Azure AD Hybrid Joined)
  • Appareils inscrits dans Intune
  • Windows 10 à partir de la version 1709 ou Windows 11 (sauf les éditions Famille / Home)
  • L'horloge de l'appareil doit être correctement configurée (date et heure correctes)

En ce qui concerne les scripts PowerShell en eux-mêmes, voici ce qu'il faut savoir :

  • Le poids du script ne doit pas dépasser 200 Ko
  • L'utilisateur n'a pas besoin de se connecter à l'appareil pour que le script PowerShell soit exécuté
  • Lorsque le script est configuré dans Intune pour s'exécuter dans le contexte de l'utilisateur et que cet utilisateur dispose de droits d'administrateur, alors le script PowerShell s'exécute par défaut avec les privilèges de l'administrateur.
  • Il y a un timeout de 30 minutes sur l'exécution des scripts PowerShell
  • Au niveau de l'ordre d'exécution des tâches, sachez que les scripts PowerShell sont exécutés avant les applications Win32.
  • Sur les appareils partagés, le script PowerShell s'exécute pour chaque nouvel utilisateur qui se connecte.

Nous pouvons aussi rappeler l'importance d'éviter (autant que possible) de stocker des informations sensibles dans ces scripts, à commencer par des mots de passe.

À ce sujet, vous pouvez vous référer à la documentation officielle de Microsoft :

III. Déployer un script PowerShell avec Intune

A. Le script PowerShell

Le script PowerShell que l'on va déployer via Intune va effectuer les actions suivantes :

  • Télécharger en local deux fichiers : une image de fond d'écran et une image d'écran de verrouillage. L'objectif étant de télécharger les fichiers à partir d'une URL Internet vers un répertoire local (C:\Windows\Web\Wallpaper\).

Voici le script PowerShell complet :

Bouton - Accéder à la ressource sur GitHub
<#
.SYNOPSIS
        Définir une image de fond d'écran et une image d'écran de verrouillage via les clés de Registre Windows

.DESCRIPTION
        Sur Windows 10 Pro et Windows 11 Pro, il n'est pas possible de configurer une image de fond d'écran et/ou de verrouillage avec les paramètres natifs Intune.
        La solution de contournement consiste à utiliser des valeurs dans le Registre Windows, comme par GPO Active Directory.
        Les images sont téléchargées en local sur la machine dans "C:\Windows\Web\Wallpaper\"
        Indiquez les URL vers vos images en modifiant ces deux variables : $DesktopImageURL et $LockscreenImageURL.

.PARAMETER
.EXAMPLE  
.INPUTS
.OUTPUTS
	
.NOTES
	NAME:	Windows-Pro-Background-Lockscreen-Images.ps1
	AUTHOR:	Florian Burnel
	EMAIL:	[email protected]
	WWW:	www.it-connect.fr

	VERSION HISTORY:

	1.0 	2024.03.06
		    Initial Version

#>
# Fond ecran - URL en ligne et en local
$DesktopImageURL = "https://itconnectintunedemo.blob.core.windows.net/images/IT-Connect_Wallpaper_052020-V2.png"
$DesktopLocalImage = "C:\Windows\Web\Wallpaper\ITC_Wallpaper.png"

# Ecran verrouillage - URL en ligne et en local
$LockscreenImageURL = "https://itconnectintunedemo.blob.core.windows.net/images/IT-Connect_Wallpaper_052020-V2.png"
$LockscreenLocalImage = "C:\Windows\Web\Wallpaper\ITC_Lockscreen.png"

# Registre - Chemin vers la cle (qui doit accueillir les valeurs)
$RegKeyPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\PersonalizationCSP"

# Telecharger les images en local
if(!(Test-Path $DesktopLocalImage)){
    Start-BitsTransfer -Source $DesktopImageURL -Destination $DesktopLocalImage
}

if(!(Test-Path $LockscreenLocalImage)){
    Start-BitsTransfer -Source $LockscreenImageURL -Destination $LockscreenLocalImage
}

# Modifier les cles de Registre (seulement si l'on parvient a acceder aux images en local)
if((Test-Path $DesktopLocalImage) -and (Test-Path $LockscreenLocalImage)){

    # Creer la cle PersonalizationCSP si elle n'existe pas
    if (!(Test-Path $RegKeyPath))
    {
        New-Item -Path $RegKeyPath -Force | Out-Null
    }

    # Registre Windows - Configurer l'image de fond d'ecran (wallpaper)
    New-ItemProperty -Path $RegKeyPath -Name DesktopImageStatus -Value 0 -PropertyType DWORD -Force | Out-Null
    New-ItemProperty -Path $RegKeyPath -Name DesktopImagePath -Value $DesktopLocalImage -PropertyType String -Force | Out-Null
    New-ItemProperty -Path $RegKeyPath -Name DesktopImageUrl -Value $DesktopLocalImage -PropertyType String -Force | Out-Null

    # Registre Windows - Configurer l'image de l'ecran de verrouillage (lockscreen)
    New-ItemProperty -Path $RegKeyPath -Name LockScreenImageStatus -Value 0 -PropertyType DWORD -Force | Out-Null
    New-ItemProperty -Path $RegKeyPath -Name LockScreenImagePath -Value $LockscreenLocalImage -PropertyType String -Force | Out-Null
    New-ItemProperty -Path $RegKeyPath -Name LockScreenImageUrl -Value $LockscreenLocalImage -PropertyType String -Force | Out-Null

}

Adaptez les deux variables suivantes : $DesktopImageURL (URL vers l'image de fond d'écran) et $LockscreenImageURL (URL vers l'image de l'écran de verrouillage)

Vous pouvez réutiliser ce script et à l'adapter à vos besoins. Sachez que la procédure est identique, peu importe ce que fait votre script PowerShell.

Note : ce script reprend le principe de création de valeurs dans le Registre, comme nous pouvons le faire par GPO et comme je l'avais expliqué dans un précédent article.

B. Ajouter un script dans Intune

Connectez-vous au Centre d'administration Microsoft Intune, cliquez sur "Appareils" (1), puis sur "Scripts et corrections" (2). Ensuite, cliquez sur l'onglet "Scripts de plateforme" (3) afin de pouvoir cliquer sur le bouton "Ajouter" (4) et choisissez "Windows 10 et ultérieur" (5) puisque nous voulons exécuter un script PowerShell sur des machines Windows.

Intune - Ajouter un script PowerShell - Scripts de plateforme Windows

Donnez un nom à ce script, ou plutôt à cette tâche qui apparaîtra dans Intune. Je vous encourage également à indiquer une description. Poursuivez.

Windows Pro - Script - Configurer fond d'écran et écran verrouillage

A l'étape "Paramètres du script", vous devez commencer par charger votre script sur Intune. En fait, vous devez charger un fichier présent sur votre ordinateur pour l'envoyer sur Microsoft Intune. Ensuite, nous avons plusieurs options à notre disposition :

  • Exécuter ce script en utilisant les informations d'identification de l'utilisateur connecté : cette option doit être sur "Oui" pour que le script soit exécuté en héritant des droits de l'utilisateur qui se connecte. Choisissez "Non" pour exécuter une action qui nécessite des droits plus élevés : c'est le cas ici compte tenu de l'emplacement cible où l'image doit être téléchargée.
  • Appliquer la vérification de la signature du script : cette option doit être sur "Non" sauf si vous avez un certificat de signature de code sur vos appareils et qu'il est utilisé pour signer vos scripts (ce qui est l'idéal !).
  • Exécuter le script dans un hôte PowerShell 64 bits : cette option doit être sur "Oui" pour utiliser PowerShell 64 bits sur les machines 64 bits
Intune - Exécuter un script PowerShell sur Windows

À l'étape suivante, nommée "Affectations", vous devez affecter ce script PowerShell à des utilisateurs ou des appareils. Ici, mes machines Windows sont ciblées donc je sélectionne un groupe nommé "PC_Win_Pro" présent dans Microsoft Entra ID.

Intune - Affecter un script PowerShell à des appareils

Poursuivez... A la fin, vérifiez l'ensemble des paramètres et si tout est OK, cliquez sur "Ajouter".

Intune - Ajouter d'un script PowerShell pour Windows 11

Voilà, votre script PowerShell va être exécuté sur les appareils / les utilisateurs ciblés.

IV. Tester le déploiement

Pour tester le déploiement, il convient de synchroniser un appareil pour qu'il actualise ses paramètres et "comprenne" qu'il doit exécuter un script PowerShell.

A. Microsoft Intune Management Extension

Pour que le script soit exécuté, nous avons besoin que Microsoft Intune Management Extension soit présent sur les appareils. Par défaut, ce n'est pas le cas : ce n'est pas un composant natif à Windows. Cependant, il va être installé automatiquement sur les appareils où le script PowerShell doit être exécuté.

Sur la machine "PC-ITC-01", présente dans le groupe "PC_Win_Pro", le composant s'est installé tout seul et dans la foulée, le script PowerShell a été exécuté. Le tout sans avoir besoin de redémarrer l'ordinateur.

B. Vérifier le bon fonctionnement du script

Pour vérifier le bon fonctionnement du script, nous pouvons investiguer sur la machine Windows. Ici, c'est facile : il suffit de vérifier si le fichier est bien présent à l'emplacement souhaité. Nous pouvons aussi regarder si les valeurs de Registre sont bien créées.

Intune - Wallpaper Windows Pro - Registre

Du côté de la console Intune, si vous cliquez sur le script et que vous accédez à "État de l'appareil", vous pouvez obtenir un statut pour chaque machine impactée par la politique. C'est une façon de voir à distance s'il y a eu des soucis sur une ou plusieurs machines.

C. Les logs

S'il y a un souci avec l'exécution de votre script PowerShell, vous devez investiguer en local sur une machine. Sachez que les logs d'Intune Management Extension sont stockés dans ce répertoire :

C:\ProgramData\Microsoft\IntuneManagementExtension\Logs

Dans ce répertoire, il y a un fichier de log très intéressant au sujet de l'activité d'Intune Management Extension : IntuneManagementExtension.log.

Il s'agit d'un fichier texte que l'on peut ouvrir avec un éditeur de texte classique (Bloc-notes, etc.). Toutefois, il est préférable d'utiliser l'outil gratuit CMTrace que les administrateurs de SCCM ont l'habitude d'utiliser.

Si besoin, vous pouvez l'obtenir en téléchargeant l'exécutable ci-dessous (un peu plus de 1 Go). Ensuite, l'exécutable va décompresser son contenu sur votre PC, ce qui vous permettra d'obtenir l'exécutable "CMTrace.exe". Il est présent ici :

Intune Management Extension - CMTrace

À partir de cet utilitaire, vous pouvez charger un fichier de log. C'est l'occasion d'ouvrir le fichier "IntuneManagementExtension.log" pour analyser son contenu. Ce fichier est très verbeux. Vous pouvez effectuer une recherche pour gagner du temps, avec le mot clé "PowerShell", par exemple.

Intune - Logs - Exécution Script PowerShell

Dans l'exemple ci-dessous (correspondants à d'autres tests effectués), nous pouvons voir qu'il y a eu un problème lors de l'exécution du script : un argument a une valeur invalide. Effectivement, il y a une erreur sur le nom d'une variable, ce qui renvoie une valeur nulle et perturbe l'exécution de la commande. Grâce à ce fichier de log et CMTrace, vous pouvez identifier plus facilement (et plus rapidement) l'origine du problème.

CMTrace - Analyser log Intune - Script PowerShell

V. Conclusion

Après avoir suivi ce tutoriel, vous êtes en mesure d'exécuter des scripts PowerShell sur vos machines Windows à l'aide de Microsoft Intune ! Ce tutoriel sera également utile à toutes les personnes qui souhaitent configurer une image de fond d'écran et/ou de verrouillage sur les machines Windows 10 Pro et Windows 11 Pro.

Au sein de Microsoft Intune, PowerShell est également utile pour le déploiement d'applications et les fonctionnalités de remédiation. Nous aborderons ces points dans de futurs articles.

The post Intune – Comment exécuter un script PowerShell sur Windows ? first appeared on IT-Connect.

Under The Wire, un wargame pour apprendre PowerShell

12 février 2024 à 18:00

I. Présentation

Dans cet article, nous allons découvrir Under the Wire, une plateforme gratuite qui héberge plusieurs wargames pour apprendre PowerShell en s'amusant. Oui, je vous assure, on peut s'amuser avec PowerShell.

Les wargames sont des jeux appréciés, car ils permettent d'apprendre en jouant, c'est-à-dire qu'il y a une réelle portée éducative derrière un wargame. Celui que l'on va découvrir aujourd'hui s'appelle Under the Wire et il a pour objectif de vous faire progresser en PowerShell !

Cet article est disponible au format vidéo :

Précédemment, nous avions également vu le module PowerShell Koans pour progresser en PowerShell en répondant à différentes questions et exercices. PowerShell Koans est dans un style totalement différent, mais vous pouvez le tester gratuitement aussi :

II. Comment fonctionne Under the Wire ?

Under the Wire propose un ensemble de missions découpées en plusieurs quêtes dont l'objectif est de vous permettre d'apprendre de nouvelles commandes PowerShell. A chaque fois, vous devez la ou les commandes PowerShell permettant de récolter une ou plusieurs informations. Ainsi, vous allez pouvoir progresser en trouvant la réponse à l'énigme de chaque quête.

Actuellement, il y a 5 wargames accessibles :

  • Century
  • Cyborg
  • Groot
  • Oracle
  • Trebek

A chaque fois, il y a 15 quêtes à accomplir pour arriver à la fin d'un jeu. Pour chaque quête, on vous explique quelle information vous devez récupérer, et cette information sert de mot de passe pour accéder à la quête suivante. Ce qui signifie que vous devez traiter les quêtes dans l'ordre, et surtout, si vous n'arrivez pas à vous connecter à la quête suivante, c'est probablement que votre réponse est incorrecte.

III. Découverte du jeu Century

Pour accéder à un jeu, comme à celui nommé Century, par exemple, vous devez accéder au Slack d'Under the Wire pour récupérer le nom d'utilisateur et le mot de passe d'accès. Ceci permet d'accéder à la quête 0 pour commencer à jouer !

Pour accéder à l'environnement, vous devez établir une connexion SSH. Vous pouvez utiliser PuTTY, un outil équivalent, ou le client SSH intégré à Windows. Pour utiliser le client SSH de Windows, il suffit d'utiliser la syntaxe suivante (en indiquant le nom d'utilisateur récupéré depuis le Slack du projet :

ssh century.underthewire.tech -l utilisateur
# ou 
ssh [email protected]

Une fois connecté, vous pouvez accéder à la quête n°1, ou au niveau 1, si vous préférez. Pour vous roder un peu sur le sujet, nous allons solutionner ensemble les premiers niveaux.

A. Century 1

Pour le premier niveau, la consigne est la suivante : "The password for Century2 is the build version of the instance of PowerShell installed on this system.". Soit en français : "Le mot de passe pour Century2 est le numéro de build de la version PowerShell installée sur ce système."

Pour obtenir cette information, nous devons donc rechercher comment obtenir le numéro de version en PowerShell. Car oui, ici, tout doit être fait en ligne de commande PowerShell. Nous pouvons obtenir l'information via la variable prédéfinie $PSVersionTable.

Cette commande retourne le résultat suivant :

On nous demande le numéro de build, donc la réponse ce sera "10.0.14393.5582" (à ne pas confondre avec PSVersion). Cela signifie que cette valeur va nous servir de mot de passe pour accéder au niveau 2.

Nous pouvons quitter Century 1 :

exit

B. Century 2

Nous devons établir une connexion SSH, sur le même hôte, mais cette fois-ci avec le nom d'utilisateur "century2". Le mot de passe correspond à la réponse du niveau précédent, à savoir "10.0.14393.5582".

ssh century.underthewire.tech -l century2

Voilà qui est fait !

Prenons connaissance de l'énoncé du niveau 2 : "The password for Century3 is the name of the built-in cmdlet that performs the wget like function within PowerShell PLUS the name of the file on the desktop.". Ce qui nous donne en français : "Le mot de passe pour Century3 est le nom du cmdlet intégré qui exécute la fonction wget dans PowerShell PLUS le nom du fichier présent sur le Bureau."

Ce qui signifie que nous devons collecter 2 informations pour constituer le mot de passe.

  • Le prompt est déjà positionné sur le Bureau, donc il suffit de lister le contenu du répertoire actuel afin d'obtenir le nom du fichier : "443"
Get-ChildItem
  • En ce qui concerne le nom de la commande qui sert à effectuer l'équivalent d'un "wget" en PowerShell, il s'agit du cmdlet "Invoke-WebRequest". Nous pouvons le vérifier car il y a un alias pour wget.
Get-Alias wget

Voici en image :

Ainsi, la réponse au niveau 2 est : "invoke-webrequest443" (sans les majuscules, sinon ça ne fonctionne pas pour se connecter à Century 3).

C. Century 3

Nous allons pouvoir nous connecter à Century 3, toujours sur le même principe :

ssh century.underthewire.tech -l century3

Cette fois-ci, voici l'information à récupérer pour accéder au niveau suivant : "The password for Century4 is the number of files on the desktop.". En français : "Le mot de passe pour Century4 est le nombre de fichiers sur le bureau.".

Nous devons compter le nombre de fichiers sur le Bureau de la session. Il y en a suffisamment pour que ce soit pénible de compter manuellement. Ahah. Tant mieux, car notre objectif est d'utiliser PowerShell ! Nous pouvons obtenir l'information de plusieurs façons, dont celles-ci :

(Get-ChildItem).count
Get-ChildItem | Measure-Object

Nous avons la réponse pour accéder au niveau suivant : "123".

A vous de jouer pour la suite !

IV. Conclusion

Au total, il y a un peu plus de 70 niveaux à effectuer si vous faites tous les jeux disponibles sur Under the Wire ! C'est assez varié au niveau des informations à rechercher (il y aussi une partie Active Directory / GPO) et le joueur doit faire l'effort de tout faire en PowerShell pour atteindre l'objectif de chaque niveau.

The post Under The Wire, un wargame pour apprendre PowerShell first appeared on IT-Connect.

An example of using PowerShell to manage system and user-assigned managed identities in Azure

9 février 2024 à 15:19
Managed identities provide secure authentication for resources accessing other resources in Azure without requiring sensitive information such as secrets, credentials, and certificates to be handled. Microsoft Entra ID manages these identities, enabling applications to obtain tokens for authentication. In this post, I will provide an example that illustrates how to use system and user-assigned managed identities with PowerShell.

Comment apprendre et progresser en PowerShell à l’aide de PSKoans ?

7 février 2024 à 17:45

I. Présentation

Dans ce tutoriel, nous allons utiliser le module PowerShell Koans, appelé aussi PSKoans, afin de s'exercer au scripting PowerShell ! En effet, PowerShell Koans est un module que l'on peut utiliser soi-même pour progresser, mais qui peut être intéressant également pour les formateurs dans le but d'exercer les étudiants en phase d'apprentissage du langage PowerShell.

Le module PowerShell Koans s'appuie sur un autre module : Pester. Pour ceux qui ne connaissent pas Pester, il s'agit d'un module PowerShell permettant d'effectuer des tests unitaires pour valider le bon fonctionnement d'un script.

Ainsi, PowerShell Koans se présente comme une suite d'exercices qu'il va falloir résoudre, un peu sur le principe des textes à trou, sauf qu'ici il s'agit d'extrait de code PowerShell. Au total, PSKoans contient 682 exercices répartis dans plusieurs catégories, dont :

  • Les booléens, les chaines de caractères (string) et les nombres
  • Les tableaux et les hashtables
  • Les opérateurs de comparaison
  • Les structures conditionnelles
  • Les fonctions
  • La structure ForEach
  • Les boucles
  • Le tri des objets
  • Les objets personnalisés
  • La gestion de fichiers CSV
  • Etc...

Bien que PSKoans n'ait pas été mis à jour depuis quelques années, il fonctionne toujours très bien et il est pertinent en phase d'apprentissage du langage PowerShell.

"Chaque kōan (chaque question) est représenté par un test Pester qui échoue. Votre but est de réussir ces tests en remplissant la bonne réponse ou en écrivant le bon code. Les koans sont d'abord très simples pour vous familiariser avec les concepts de base, puis ils deviennent de plus en plus difficiles. Vous apprendrez ainsi de nombreux aspects de PowerShell pour les débutants, les intermédiaires et les avancés.", peut-on lire sur le GitHub officiel.

II. Comment installer PSKoans ?

Le module PSKoans a besoin du module Pester pour fonctionner. En principe, Pester est inclus nativement avec Windows, donc vous ne devriez pas avoir besoin de l'installer. Mais, si vous avez besoin de le faire, voici la commande à exécuter :

# Installer le module Pester :
Install-Module -Name Pester
# Vérifier la présence de ce module :
Get-Module Pester -ListAvailable

Ensuite, vous devez installer le module "PSKoans" sur votre PC. Celui-ci étant disponible via la PowerShell Gallery, nous pouvons l'installer facilement à l'aide de cette commande :

Install-Module -Name PSKoans

Une fois que c'est fait, vous pouvez lister toutes les commandes disponibles dans ce module pour avoir un aperçu :

Get-Command -Module PSKoans

III. Comment utiliser PSKoans ?

A. Compléter son premier exercice

Pour avoir un aperçu de sa progression globale et effectuer un premier exercice, nous devons exécuter l'une de ces deux commandes (la première étant un alias de la deuxième) :

Measure-Karma
# ou
Show-Karma

Nous pouvons voir une sortie avec du texte en différentes couleurs. Ce premier module sert avant tout à prendre en main PSKoans. Nous pouvons lire "Veuillez méditer sur le code suivant", et dans le troisième bloc de code en rouge, nous pouvons voir : "$____". Nous allons devoir compléter le code à cet endroit de façon à répondre à la problématique suivante : "On s'attendait à $true, mais on a obtenu $null" (Expected $true, but got $null).

À la fin, nous avons également notre progression :

  • Sur le module en cours : "AboutAssertions : 0/4"
  • Au total, tout module confondu : "Total : 0/682"
PowerShell Koans - Voir son score actuel

Pour "méditer sur le code" correspondant à ce premier exercice, nous allons exécuter cette commande :

Measure-Karma -Meditate

Cette commande va ouvrir automatiquement Visual Studio Code s'il est détecté sur votre machine. Sinon, PowerShell ISE sera sélectionné.

Ceci va nous permettre de modifier directement le fichier PS1 correspondant au module "AboutAssertions" de PSKoans.

PowerShell Koans - Effectuer un premier exercice

Pour rappel, la consigne est la suivante : "On s'attendait à $true, mais on a obtenu $null", donc nous allons tout simplement remplacer "$____" par "$true" comme ceci :

PowerShell Koans - Solution premier exercice

Une fois que c'est fait, nous pouvons sauvegarder le fichier et relancer la commande permettant de calculer le score. Nous pouvons voir que nous avons correctement complété le premier exercice :

PowerShell Koans - Suivi de la progression

Ensuite, nous devons poursuivre en complétant chaque partie "___" présente dans le fichier afin de trouver la bonne solution. Vu que les exercices sont écrits sous la forme de tests Pester, ce n'est pas toujours facile pour un novice de comprendre le résultat attendu.

Il faut vraiment se concentrer sur bloc de code compris dans l'instruction "It{ }" et se référer à l'instruction "Should -Be" pour voir le résultat attendu.

PSKoans - Exemple

Une fois que le premier module "AboutAssertions" est complété, PSKoans passe sur le module sur les booléens. Ici, l'objectif est d'indiquer "$true" ou "$false" (vrai ou faux) pour chaque exercice. Ces tests vont vous permettre de vous exercer à la lecture de comparaisons avec différents opérateurs.

PowerShell Koans - Exercice sur les booléens

À chaque fois, pensez à enregistrer et à vérifier votre score au fur et à mesure pour voir si vous avez indiqué la bonne réponse (ou pas).

B. S'exercer sur un module spécifique

Si vous maitrisez déjà certaines notions en PowerShell, vous n'avez peut-être pas envie de faire tous les modules de PSKoans dans l'ordre. Sachez que vous pouvez choisir le module de votre choix.

Tout d'abord, pour lister tous les modules, utilisez cette commande :

Get-PSKoan

Voici la liste complète :

Get-PSKoan

Si l'on souhaite s'exercer sur la notion de variables, nous allons exécuter cette commande :

Measure-Karma -Topic <nom du module>
Measure-Karma -Topic AboutVariables

Cette première commande va permettre d'afficher notre score actuel sur le module en question et de le sélectionner en quelque sorte. Ensuite, pour effectuer les exercices, il suffira d'exécuter cette commande :

Measure-Karma -Meditate

Visual Studio Code va s'ouvrir et afficher les exercices correspondants. Dans l'exemple ci-dessous, nous pouvons voir trois premières zones à compléter. Je vous encourage également à lire les commentaires (blocs en vert) car ils fournissent des explications intéressantes.

PowerShell Koans - Exercice sur les variables

Puis, sauvegardez et vérifiez votre score sur ce module :

Measure-Karma -Topic AboutVariables

Voici ce que l'on nous demande pour ces trois exercices (en vérité, les deux premières zones à compléter font partie du même exercice) :

1 - On nous dit "$Value -eq $Fifty | Should -BeTrue" : $Value doit être égale à $Fifty (-BeTrue). On sait que $Fifty = 50, donc $Valeur doit être égal à 50 aussi.

2 - On nous dit "___ | Should -Be $Greeting", donc la valeur à trouver doit être également à la valeur de la variable $Greeting. La variable $Greeting est définie via la commande Set-Variable et sa valeur est "Hello!" : c'est donc la solution à cet exercice.

3 - On nous dit "$Number | Should -BeOfType [__]", donc on doit déterminer le type de la variable $Number. On sait que cette variable est égale au nombre "10", donc en principe il doit s'agir d'une variable de type "int" pour Integer. La solution à cet exercice est "int".

Il s'agit bien des bonnes réponses :

J'espère que vous avez bien compris la logique de fonctionnement de PowerShell Koans afin de pouvoir vous exercer sur les modules de votre choix.

C. La sauvegarde de la progression

Sachez que la progression est sauvegardée au fur et à mesure dans les fichiers PS1 que vous modifiez. Pour savoir où est stockée votre progression actuelle, exécutez cette commande :

Get-PSKoanLocation

Ceci vous retournera le chemin vers les fichiers de PSKoans, soit par défaut à la racine du répertoire de la session de l'utilisateur.

IV. Conclusion

Si vous souhaitez utiliser PowerShell Koans avec des étudiants, sachez que vous pouvez créer vos propres koans (exercices/questions) ! Ceci est expliqué dans la documentation officielle, notamment à cet endroit.

En tant que Maitre PowerShell, je vous souhaite bon courage pour accomplir un maximum de kōans !

The post Comment apprendre et progresser en PowerShell à l’aide de PSKoans ? first appeared on IT-Connect.

Connect an Azure Function or Web App to a Key Vault to retrieve secrets with PowerShell

31 janvier 2024 à 09:22
Azure Functions often require access to sensitive information. It is a security risk to store credentials in code or configuration files. Thus, protecting sensitive information like connection strings, API keys, or passwords is crucial. This is where Azure Key Vault comes in, offering secure and centralized storage for all your secrets. In this article, I will explain how to retrieve secrets from the Key Vault within an Azure Function using PowerShell.

Azure REST API: Manage Azure resources with the PowerShell cmdlet Invoke-AzRestMethod

17 janvier 2024 à 11:56
Sometimes, managing certain Azure resources using PowerShell can be challenging due to the absence of specific cmdlets for those operations or services. This is where the Invoke-AzRestMethod cmdlet comes into play, which allows PowerShell scripts to communicate with Azure services by sending HTTP requests to Azure's REST API. It acts as a bridge between PowerShell and Azure services that still need to be integrated with cmdlets.

How to Rename Files With PowerShell in Windows 11

10 janvier 2024 à 13:11

The PowerShell utility on Windows 11 is an object-oriented configuration and automation tool. It includes a scripting language and a command-line shell. Of the many automation possible, you can rename files with PowerShell, and this guide focuses on all possible ways to use this functionality.

We explore all options, from renaming single files to more complex processes like using wild cats to rename files. Let us get to it.

Prerequisite: Find the File Path

Before going into renaming files using PowerShell, you should be able to find a file path. This is because you will need the path in the commands we explore in this guide. To find a file or folder path, follow the steps below.

Right-click on the file and click Copy as path from the context menu.

Alternatively, you can click the file or folder and press Ctrl + Shift + C.

1. How to Rename a Single File in PowerShell

To rename a single file, you will make use of the Rename-Item PowerShell command. Follow the steps below:

1. Press Windows + R to open the Run dialog, type powershell, and hit Ctrl + Shift + Enter.

Rename Files With PowerShell

2. Type the command below in PowerShell, substituting file_path for the file’s path and file_name.ext for the file’s new name and extension.

Rename-Item file_path -NewName file_name.ext
Rename Files With PowerShell

In the example above, we use the following command to rename a file called Test File to Test.

Rename-Item "C:\Users\afamo\Desktop\Test File.txt" -NewName Test.txt

2. Ask For Confirmation Before Renaming A File

While you may change file names without confirmation, as shown in the solution above, you may add a security measure that seeks confirmation before files are renamed.

1. Press Windows + R to open the Run dialog, type powershell, and hit Ctrl + Shift + Enter.

2. Type the command below and hit Enter, replacing file_path and file_name for the actual values.

Rename-Item file_path -NewName file_name -Confirm

3. How to Rename Multiple Files using PowerShell

When renaming multiple files, you may need to use two important commands Get-ChildItem and Rename-Item. The former gets a list of files to rename, and the latter changes the name. Let us show you how they work below.

1. Press Windows + R to open the Run dialog, type powershell, and hit Ctrl + Shift + Enter.

Rename Files With PowerShell

2. Type the command below in PowerShell to replace all spaces in text files in a specified path with hyphens.

Get-ChildItem -Path "C:\Temp" -Recurse -Include "*.txt" | Rename-Item -NewName { $_.Name -replace " ","-" }

3. Alternatively, you may enter the command below to replace all old text with new ones in the file name.

Get-ChildItem -Path "C:\Temp" | Rename-Item -NewName {$_.Name -replace "old_name", "new_name"}

4. Renaming Folder Files by Assigning an Increasing Number to File Name

You may use this naming convention if you have files with similar names in a folder and want to show some distinction. In the example below, we assign a value of 1 before the first file’s name and keep increasing the numerical value for subsequent files.

1. Press Windows + R to open the Run dialog, type powershell, and hit Ctrl + Shift + Enter.

2. Enter the script below:

Get-ChildItem PATH -Recurse -Include "*.txt" | ForEach-Object -Begin { $Counter = 1 } -Process { Rename-Item $_.FullName -NewName ("{0}{1}" -f $Counter, $.Name) ; $Counter++ }

The above script will add the numeric values to the file names in the defined path.

5. Include Timestamps to Files in a Folder

Timestamps are an important element that helps you know when a file was created. Timestamps often include the date and specific hour it was created.

1. Press Windows + R to open the Run dialog, type powershell, and hit Ctrl + Shift + Enter.

Rename Files With PowerShell

2. Tyoe the command below, replacing File_path with the folder’s file path.

Get-ChildItem File_path -Recurse -Include "." | ForEach-Object { Rename-Item -Path $_.FullName -NewName "$($_.DirectoryName)\$($_.BaseName)$(Get-Date -F yyyy-MM-dd_HH-mm)$($.Extension)"}

FAQ on Renaming Files With PowerShell

1. How can I rename files using PowerShell?

You can rename files in PowerShell using the abovementioned processes; however, you should note that the Rename-Item is essential to these operations.

2. How do I undo a renaming operation?

Unfortunately, there is no automatic undo operation in PowerShell. However, you must ensure that you take measures to backup files before altering them.

Becoming a Power User With PowerShell

While renaming files is just one of the use cases of PowerShell, it is a good step towards becoming a Power User on Windows 11. One of the more interesting parts is that you may run these PowerShell commands from a remote computer.

Let us know if you have any other cool ways of using PowerShell on Windows 11.

The post How to Rename Files With PowerShell in Windows 11 appeared first on Next of Windows.

Create an Amazon Machine Image (AMI) of an EC2 instance with a Bash and PowerShell script

3 janvier 2024 à 10:03
The provided Bash and PowerShell script helps automate the creation of Amazon Machine Images (AMIs) from existing AWS Elastic Compute Cloud (EC2) instances. This is particularly useful for creating point-in-time backups or disaster recovery. I mostly use the script to quickly clone an EC2 instance for testing or troubleshooting.

Copying files between Windows and Linux with SCP and PowerShell

Par : Thomas Joos
26 décembre 2023 à 10:06

There are various mechanisms for copying files between Windows and Linux. A proven tool for this purpose is Secure Copy (SCP), and with the porting of PowerShell to Linux, it is suitable for this task, too. The connection runs over SSH in both cases, ensuring that files are transferred encrypted.

The post Copying files between Windows and Linux with SCP and PowerShell first appeared on 4sysops.
❌
❌