Ce support sur les fonctionnalités avancées de PowerShell s’adresse aux administrateurs et ingénieurs système désireux d’approfondir leurs connaissances et d’aller plus loin avec ce langage de programmation. Dans un premier temps, vous découvrez les différences entre Windows PowerShell (version 5.1) et PowerShell Core (version 7.3 au moment de l’écriture). Vous procédez ensuite à l’installation sur un système Linux et sur un système Windows avant de découvrir un nouvel environnement de...
Ce support sur les fonctionnalités avancées de PowerShell s’adresse aux administrateurs et ingénieurs système désireux d’approfondir leurs connaissances et d’aller plus loin avec ce langage de programmation.
Dans un premier temps, vous découvrez les différences entre Windows PowerShell (version 5.1) et PowerShell Core (version 7.3 au moment de l’écriture). Vous procédez ensuite à l’installation sur un système Linux et sur un système Windows avant de découvrir un nouvel environnement de développement pour vos scripts et modules : Visual Studio Code.
Après un second chapitre sur les fonctions avancées et leur utilisation, vous découvrez comment donner un caractère collaboratif à votre travail avec la création de modules et leur partage à travers la solution de package NuGet. Vous mettez ensuite un pied dans le monde du développement avec la manipulation d’objets personnalisés et l’élaboration de classes d’objets, offrant ainsi de nouvelles possibilités d’écriture pour enrichir votre code. Vous étudiez également les notions de jobs, qui permettent une gestion asynchrone des tâches, et de workflows.
Ensuite, vous étudiez l’énorme potentiel de la fonctionnalité PowerShell DSC pour la gestion d’une infrastructure. Cette fonctionnalité permet de simplifier la configuration d’un nombre important de systèmes en un temps record, ainsi qu’une détection de toute dérive de cette configuration. Vous pourrez ainsi procéder de manière proactive à sa correction avant l’apparition d’incidents.
Vous verrez les fonctionnalités de la version 5.1 de Windows PowerShell en termes de gestion avancée des fichiers (gestion de l’archivage, lien symbolique, fichiers temporaires…) ainsi que les atouts des technologies COM pour la communication avec d’autres applications. Vous explorez une façon d’améliorer la sécurité des systèmes administrés à distance grâce à Just Enough Administration (JEA) et découvrez comment mettre en place PowerShell Web Access pour rendre accessible une console PowerShell depuis un navigateur web.
Pour finir, vous étudiez la création d’interfaces graphiques, la collecte des données de performances ainsi que la manipulation d’annuaires Active Directory.
Les nouveautés, dépréciation et limitations de PowerShell 7
1. Nouveautés
2. Dépréciation
3. Limitations
Développer en PowerShell avec Visual Studio Code
1. Installation de Visual Studio Code
2. L’interface de Visual Studio Code
3. Extension PowerShell
4. Complément d’extension
5. Le débogueur
6. Utilisation de Git
Scripter en fonction de l'environnement
Fonctionnalités expérimentales
Fonctions avancées
Introduction
Structure
1. Param
a. Attribut Parameter
b. Attributs
c. Attributs de validation
2. CmdletBinding()
3. Type de sortie (OutputType)
4. Begin/Process/End/Clean
Mise en situation
1. Jeux de paramètres
2. Pipeline
a. Déterminer les commandes qui acceptent lepipeline
b. Quand une commande n’accepte pas le pipeline
c. L’implémentation du pipeline
d. ValueFromPipeline
e. ValueFromPipelineByPropertyName
Paramètre Dynamique
1. Déclaration
2. Nouvelle collection d’attributs
3. Définition et publication du paramètredynamique
4. En résumé
5. Aller plus loin
a. Logique d’affichage
b. Ajout d’attribut de validation
6. Limitations et cas d’utilisation
ArgumentCompleter et Dynamic ValidateSet
1. ArgumentCompletions
2. ArgumentCompleter
a. Structure
b. Ajout de la saisie utilisateur
c. Utilisation de PSBoundParameter
d. Utiliser une fonction
3. Dynamic ValidateSet
Register-ArgumentCompleter
Splatting
Création de modules
Introduction
Module dynamique
Module binaire
Module script
1. Conversion d’un script en module
2. Convention de nommage
3. Internationalisation et partage du module
a. Structure et nommage des dossiers
b. Format des données et contenu des fichiers
c. La commande Import-LocalizedData
d. Gestion de l’erreur en cas de fichier absent
e. Section Data
Manifeste de module
1. Création du manifeste
2. Gestion des versions
3. Gestion des versions du framework .NET
4. Gestion du contenu additionnel
5. Test de conformité d’un manifeste
Exportation des membres d'un module
1. La commande Export-ModuleMember
2. Comportement particulier
Structure multifichier
Passer au Build avec Sampler
1. Création d’un module simple
2. Ajout d’une fonction
3. Build du module
4. Pour la suite
Gestion des modules et des packages
Introduction
Module PackageManagement
1. Ajout du premier fournisseur
2. Recherche d’un package
3. Installation d’un package
a. Depuis Chocolatey
b. Depuis un MSI ou en MSU
4. Listing des packages installés
5. Mise à jour d’un package
6. Suppression d’un package
Module PowerShellGet
1. Mise à jour de PowerShellGet pour le supportdu TLS
2. Recherche d’une ressource
a. Versioning
b. Contenu d’une ressource
3. Installation d’une ressource
4. Mise à jour d’une ressource
5. Suppression d’une ressource
Création d’un dépôt
1. Via un simple partage réseau
a. PackageManagement
b. PowerShellGet
c. Organisation du partage
2. Via un site web
a. Installation
b. Création utilisateur
c. Création du premier feed (dépôt)
d. Enregistrement en tant que source et publication d’unmodule
Objets personnalisés et types standards
Introduction
Objets personnalisés
1. Création d’un objet personnalisé
2. Ajout d’un membre
a. Ajout d’une propriété
b. Ajout d’une méthode
3. Création d’une collection d’objets
4. Transformation d’un objet existant en objet personnalisé
Types standards
1. Ajout de membre via un fichier .types.ps1xml
a. Fichier .types.ps1xml
b. Ajout d’une propriété
c. Ajout d’une méthode
2. Ajout de membre seulement avec Update-TypeData
a. Ajout d’une propriété
b. Ajout d’une méthode
3. Pour aller plus loin
Formatage
1. Fichiers de formatage par défaut
2. Objet personnalisé
a. Personnalisation du type
b. Application d’un fichier de formatage
3. Type standard
a. Modification du fichier de formatage par défaut
b. Application du fichier de formatage
Classes
Introduction
Création d'une classe
1. Mot-clé Class
2. Propriété
3. Méthode
4. Constructeur
5. Visibilité
Surcharge de méthode (overload)
Statique
Portée des variables
1. Propriété
2. Méthode
a. Globale
b. Script
Héritage
Création enum
1. Mot-clé enum
2. Manipulation des valeurs
Formatage
Intégration dans un module
Mot-clé Using
Utilisation des classes sur la validation de paramètre
1. ValidateSet Dynamique
2. ArgumentCompleter
Jobs et parallélisation
Introduction
Travaux en arrière-plan locaux (BackgroundJob)
1. Création d’un premier job
2. Récupération du résultatd’un job
3. Arrêt d’un job
4. Suppression d’un job
5. Erreurs et jobs
Travaux en arrière-plan basés sur les threads (ThreadJob)
1. Utilisation des ThreadJob
2. Comparatif de performance avec les BackgroundJob
Travaux en arrière-plan distants (RemoteJob)
1. Lancement d’un job distant
2. Multiples destinations
3. Attendre la fin de l’exécution des jobs
Travaux planifiés (PSScheduledJob)
1. Création d’un travail planifié
2. Mise en place d’un déclencheur (trigger)
3. Modification des options
Workflows (PSWorkflowJob)
ForEach-Object
PowerShell API
Workflows
Introduction
1. Qu’est-ce qu’un workflow ?
2. Comment fonctionne-t-il ?
Création d'un workflow
1. Mot-clé workflow
2. Gestion des paramètres
a. Paramètres communs
b. Bloc param
c. Paramètres propres aux workflows
3. Exécution à travers une sessiondistante
4. Exécution en tant que job
Restrictions
1. Restrictions de commande
2. Restrictions sur les objets
3. Restrictions de langage
4. Mot-clé InlineScript
a. Syntaxe
b. Portée des variables
Exécution en parallèle
1. Bloc parallel
2. Bloc sequence
3. Mot-clé Foreach
Points de synchronisation
Suspension d’un workflow
Relance d'un workflow (suite à une suspension ou à un crash)
Observation du contenu d'un workflow
Intégration dans un module
Workflow : pour qui ? pour quoi ?
Desired State Configuration (DSC)
Introduction
Versions et plateformes supportées par DSC
Vue d'ensemble de la solution
1. Terminologie
2. Considérations générales
3. Deux modes : PUSH et PULL
a. PUSH
b. PULL
4. Configuration
5. Présentation des ressources DSC
6. Gestionnaire de configuration local (LCM)
Ressources DSC
1. Lister des ressources présentes
2. Ressources intégrées
a. Utilisation générale d’une ressource
b. Cas particulier avec la ressource Script
3. Extension des possibilités avec la DSC Community
a. Suivi des nouveautés
b. Interrogation de la PowerShell Gallery
c. Installation depuis la PowerShell Gallery
d. Politique de nommage des ressources DSC
e. Ressources personnalisées
f. Utilisation des ressources
Création d’une première configuration
1. Création rapide avec ISE
2. Application d’une configuration
3. Utilisation de paramètres
4. Importation d’une ressource
5. Données de configuration (Configuration Data)
a. Définition d’une configuration environnementale
b. Variables spéciales $ConfigurationData, $AllNodes, $Nodes
c. Prise en compte de la configuration environnementale
d. Résumé
Configuration du LCM
1. Configuration courante
2. Configuration du LCM
3. Application d’une métaconfiguration
Fichiers MOF
1. Fichier MOF de configuration
2. Fichier MOF de métaconfiguration
Sécurité et contexte d'exécution (credentials)
Sécurisation des credentials dans une configuration
1. Prérequis
2. Étapes de réalisation
3. Données de configuration (Configuration Data)
4. Configuration
a. Écriture des configurations
b. Génération des fichiers MOF
c. Configuration du LCM
d. Application de la configuration
5. Obtenir l’empreinte d’un certificat de chiffrement
Configuration d'un PULL Server
1. Évolution du PULL Server
2. PULL Server sous partage SMB
3. PULL Server Web
a. Prérequis
b. Écriture de la configuration du PULL Server
c. Deux modes de configuration pour le LCM
d. Configuration du LCM en fonction de l’ID
e. Configuration du LCM en fonction du nom
f. Forcer une mise à jour de configuration
4. Déploiement des ressources
Test de conformité d'un nœud
Application de la dernière bonne configuration connue
Principe avancé
1. Ressource composite
2. Configuration partielle
a. Conception des configurations partielles
b. configuration du LCM
c. PUSH d’une configuration partielle
d. PULL d’une configuration partielle
e. Allier PUSH et PULL
Écriture d'une ressource personnalisée
1. Ressource personnalisée avec un fichier MOF
a. Constitution d’une ressource basée sur unschéma MOF
b. Aide à la création de ressources(xDSCResourceDesigner)
c. Génération de la structure du module
d. Écriture du fichier PSM1
e. Déploiement de la ressource
f. Vérification de la prise en compte de laressource
2. Ressource personnalisée avec les classesPowerShell
a. Constitution d’une ressource basée sur uneclasse PowerShell
b. PowerShell ISE à la rescousse
c. Rédaction du fichier PSM1
d. Génération et modification du manifeste
e. Déploiement de la ressource
3. Utilisation de la ressource personnaliséedans une configuration
DSC sous Linux
1. Prérequis
a. Installation du package OMI
b. Installation du package DSC
2. Ressources DSC pour Linux
3. Mise en place d’une session CIM
4. Création de la configuration
5. Application de la configuration
6. Récupération de la configurationdu LCM
Maintenance et dépannage
1. Forcer la réapplication d’une configuration
2. État d’une configuration DSC
3. Remise d’un système à son étatd’origine
4. Activation du mode Verbose
Gestion avancée des fichiers
Introduction
Gestion de l'archivage
1. Compress-Archive
2. Expand-Archive
3. Avant PowerShell 5.1
a. Compression d’un dossier
b. Décompression d’une archive
Lien symbolique
1. Fichiers
2. Dossiers
Fichier temporaire
Édition de fichiers distants
Copie de fichiers à travers une session PowerShell
Conversion d’un fichier plat en objet
1. Mode basique
2. Mode avancé
Communication avec d'autres applications
Introduction
Les technologies COM
Manipulation des objets COM
1. Recherche d’objets
2. Création/instanciation d’un objet
3. Utilisation d’une application COM
a. Internet Explorer
b. Microsoft Excel 2016
c. Windows Script Host (WSH)
Gestion à distance avancée
Introduction
JEA (Just Enough Administration)
1. Pourquoi JEA ?
2. Prérequis
3. Rappel
a. Une session, c’est quoi ?
b. Configuration d’une session (PowerShell 4.0et versions antérieures)
c. Ce qui change avec PowerShell 5.0
4. Capacité de rôle
a. Préparation
b. Fichier de capacité de rôle
c. Intégration dans un module
d. Fusion des capacités de rôle
5. Sessions
a. Fichier de configuration de session
b. Enregistrement d’une session
c. Modification d’une session
d. Utilisation des sessions
6. Audit
a. Conformité des configurations de session
b. Transcription
7. Configuration via DSC
PowerShell Web Access
1. Prérequis
2. Installation
3. Configuration
a. Installation de l’application web
b. Règles d’accès
4. Utilisations
5. Déconnexion d’une session
6. Cas d’usage
7. Limitations et futur de la fonctionnalité
Session distante avec SSH
1. Installation sous Windows
2. Installation sous Linux
3. Établissement de la connexion
Création d’interfaces graphiques
Introduction
1. Pourquoi une interface graphique ?
2. Vers quoi se tourner ?
Windows Forms
1. Présentation des Windows Forms
2. Réalisation d’une premièreForm
3. Ajout d’une action à une Form
a. Événements
b. Menus
4. Exemple de contrôle
5. Création de graphiques avec MS Chart Controls
Windows Presentation Foundation
1. Création d’une interface sur Visual Studio
2. Gestion des contrôles et de leurs événements
3. Création de graphiques évoluésavec LiveCharts
4. Changement de thème avec MahApps
Mise à jour d’une GUI via des runspaces
Collecte de données de performances
Pourquoi et comment collecter des données de performances??
Windows Performance Logs and Alerts (PLA)
Jeu de commandes PowerShell
1. Listing des catégories de compteurs de performances
2. Détermination du bon compteur
3. Accès aux données de compteurs
a. Contrôle du nombre de jeux de donnéeset de la fréquence
b. Collecte des données sur des ordinateursdistants
4. Utilisation des jobs pour les tâches longues
5. Sauvegarde des données de performances surdisque
a. Exportation des données de performances auformat binaire (BLG)
b. Exportation des données de performances auformat Excel (CSV)
6. Manipulation d’un fichier d’export de donnéesde performances
Collecte de données à l'échelle de l'entreprise
1. Création du fichier de configuration XML
2. Création et déploiement d’un ensemblede collecteurs de données
a. Réalisation via logman
b. Réalisation via l’objet COM PLA
3. Gestion des ensembles de collecteurs de données
a. Interrogation des ensembles de collecteurs de donnéesexistants
b. Démarrage d’un ensemble de collecteurs dedonnées
c. Arrêt d’un ensemble de collecteurs de données
d. Suppression d’un ensemble de collecteurs de données
Manipulation d’annuaires
Introduction
Module Active Directory
1. Prérequis
2. Recherche d’objets
a. Recherche basée sur l’identité
b. Filtre générique
c. Filtre LDAP
3. Gestion des unités d’organisation
a. Création d’une unité d’organisation
b. Modification d’une unité d’organisation
c. Suppression d’une unité d’organisation
4. Gestion des utilisateurs
a. Affichage de la liste des utilisateurs et de leurspropriétés
b. Création d’un utilisateur
c. Modification du mot de passe et activation d’un objetutilisateur existant
d. Modification d’un attribut
e. Suppression d’un utilisateur
5. Gestion des groupes
a. Affichage de la liste des groupes
b. Création d’un groupe
c. Gestion des membres
d. Suppression d’un groupe
6. Utilisation du provider Active Directory
a. Exploration du provider
b. Déplacement d’objets
c. Modification d’objets
d. Utilisation des commandes Active Directory
e. Création d’un PSDrive vers un autredomaine
ADSI
1. Présentation d’ADSI
2. Confusion avec Active Directory
3. Encore utile aujourd’hui ?
4. Interaction avec une base locale SAM
a. Généralités
b. Groupes locaux
c. Utilisateurs locaux
5. Active Directory Domain Services
a. Connexion à l’annuaire
b. Connexion à un domaine avec un utilisateurdifférent
c. Recherche d’objets
ADSIPS
Nicolas BAUDIN
Dès ses études en informatique, Nicolas Baudin s'est rapidement passionné pour le langage PowerShell. Aujourd'hui ingénieur Système en environnement Microsoft, il n'a cessé de monter en compétence sur le sujet. Fort de cette expérience, il propose aujourd’hui à travers son statut de freelance des prestations pour faciliter l’automatisation de tâches à travers PowerShell, telles que des interventions chez des clients ou l’animation de formations. À titre personnel, il fait également partie de la DSC Community au titre de mainteneur de ressource DSC et anime et aide la communauté française sur le serveur Discord PowerShell.