Référence
Tutorialmedium

Lister les rôles et fonctionnalités installés à l'aide de PowerShell sur Windows Server

Emanuel DE ALMEIDA
3/13/202603:08 AM 15 min read 0 views
Lister les rôles et fonctionnalités installés à l'aide de PowerShell sur Windows Server

Quels cmdlets PowerShell sont disponibles pour lister les rôles et fonctionnalités de Windows Server ?

Le cmdlet PowerShell principal pour lister les rôles et fonctionnalités installés sur Windows Server est Get-WindowsFeature du module ServerManager. Ce cmdlet reste inchangé depuis Windows Server 2025 et prend en charge les requêtes locales et distantes avec des options de filtrage complètes.

Commençons par vérifier que votre environnement PowerShell est prêt. Ouvrez PowerShell en tant qu'administrateur et vérifiez la disponibilité du module ServerManager.

Get-Module -ListAvailable ServerManager

Cela affiche la version du module ServerManager. Sur Windows Server 2025, vous verrez la version 2.0.0.0 ou ultérieure. Importez le module explicitement s'il n'est pas chargé automatiquement :

Import-Module ServerManager

Vérification : Exécutez Get-Command Get-WindowsFeature pour confirmer que le cmdlet est disponible.

Comment lister tous les rôles et fonctionnalités disponibles de Windows Server à l'aide de PowerShell ?

Commencez par examiner tous les rôles et fonctionnalités sur votre serveur local. Cela vous donne l'inventaire complet avant d'appliquer des filtres.

Get-WindowsFeature

Cette commande affiche trois colonnes clés : Name (identifiant court), DisplayName (nom descriptif) et InstallState (Available, Installed ou Removed). La sortie montre des centaines de fonctionnalités disponibles sur votre installation de Windows Server.

Astuce pro : Utilisez Format-Table -AutoSize pour un meilleur alignement des colonnes sur les écrans larges, surtout lorsque vous travaillez avec des noms de fonctionnalités longs.

Vérification : Comptez le nombre total de fonctionnalités avec (Get-WindowsFeature).Count - attendez-vous à plus de 400 éléments sur une installation complète de Windows Server.

Comment filtrer les résultats PowerShell pour n'afficher que les fonctionnalités installées de Windows Server ?

Le cas d'utilisation le plus courant pour l'audit de serveur est de n'afficher que les rôles et fonctionnalités installés. Filtrez les résultats en utilisant la propriété InstallState :

Get-WindowsFeature | Where-Object InstallState -eq "Installed"

Syntaxe alternative utilisant l'abréviation de PowerShell et l'évaluation automatique des propriétés booléennes :

Get-WindowsFeature | ? Installed

Les deux commandes produisent des résultats identiques. La seconde utilise la capacité de PowerShell à évaluer automatiquement les propriétés booléennes.

Avertissement : Utilisez la casse exacte pour les valeurs InstallState. PowerShell peut être sensible à la casse pour les comparaisons de chaînes dans certains contextes, donc "Installed" est plus sûr que "installed".

Vérification : Comparez le nombre de fonctionnalités installées par rapport au nombre total de fonctionnalités : (Get-WindowsFeature | ? Installed).Count devrait être beaucoup plus petit que le nombre total.

Quelle est la syntaxe correcte pour interroger les rôles de Windows Server sur des machines distantes ?

Étendez vos requêtes aux serveurs distants en utilisant le paramètre ComputerName. Cela nécessite une configuration correcte de WinRM sur les serveurs cibles.

Get-WindowsFeature -ComputerName "DC01" | Where-Object Installed

Pour les serveurs nécessitant des informations d'identification spécifiques, utilisez le paramètre Credential :

$cred = Get-Credential
Get-WindowsFeature -ComputerName "SRV02" -Credential $cred | Where-Object Installed

Le cmdlet Get-Credential demande un nom d'utilisateur et un mot de passe de manière sécurisée, les stockant dans un objet PSCredential.

Astuce pro : Testez d'abord la connectivité avec Test-WSMan ServerName avant d'exécuter des requêtes de fonctionnalités. Cela permet de gagner du temps en identifiant les problèmes de connexion tôt.

Vérification : La sortie inclut les mêmes colonnes mais interroge le serveur distant. Lors de l'utilisation d'alternatives Invoke-Command, vérifiez que la propriété PSComputerName affiche le nom du serveur cible.

Comment utiliser les caractères génériques pour trouver des fonctionnalités spécifiques de Windows Server avec PowerShell ?

Utilisez des motifs de caractères génériques pour trouver des technologies ou des groupes de fonctionnalités spécifiques. Cette approche est essentielle pour des audits de serveur ciblés et des vérifications de conformité.

Recherchez tous les composants liés à Hyper-V :

Get-WindowsFeature *Hyper-V* | Where-Object Installed

Trouvez des fonctionnalités liées au web en utilisant plusieurs caractères génériques :

Get-WindowsFeature *IIS*, *Web* | Where-Object Installed

Localisez tous les composants Active Directory :

Get-WindowsFeature *AD*, *Domain* | Where-Object Installed

Vérification : Chaque requête retourne uniquement les fonctionnalités correspondant au motif de caractères génériques. Utilisez Get-WindowsFeature *Hyper-V* sans le filtre Installed pour voir toutes les fonctionnalités Hyper-V (installées et disponibles).

Quelle est la différence entre les rôles et les fonctionnalités de Windows Server dans les requêtes PowerShell ?

Windows Server catégorise les composants en tant que Rôles (fonctions principales du serveur) ou Fonctionnalités (outils et utilitaires de support). Vous pouvez filtrer par FeatureType pour les séparer pour différents besoins de rapport.

Afficher uniquement les rôles installés :

Get-WindowsFeature | Where-Object { $_.Installed -and $_.FeatureType -eq "Role" }

Afficher uniquement les fonctionnalités installées (pas les rôles) :

Get-WindowsFeature | Where-Object { $_.Installed -and $_.FeatureType -eq "Feature" }

Formatez la sortie pour une meilleure lisibilité dans les rapports :

Get-WindowsFeature | Where-Object { $_.Installed -and $_.FeatureType -eq "Role" } | Format-Table Name, DisplayName, FeatureType -AutoSize

Vérification : Les rôles incluent généralement des services majeurs comme "Web Server (IIS)", "DNS Server", "Active Directory Domain Services", tandis que les fonctionnalités incluent des outils de support comme "PowerShell ISE", "Telnet Client", "Windows PowerShell Web Access".

Comment interroger plusieurs serveurs Windows simultanément à l'aide de PowerShell ?

Utilisez Invoke-Command pour interroger plusieurs serveurs simultanément, ce qui est nettement plus rapide que les requêtes séquentielles lors de la gestion de grands environnements de serveurs.

$servers = @('SRV01', 'SRV02', 'DC01')
$results = Invoke-Command -ComputerName $servers -ScriptBlock {
    Get-WindowsFeature | Where-Object Installed
}

Affichez les résultats avec identification du serveur pour un rapport clair :

$results | Select-Object PSComputerName, Name, DisplayName, InstallState | Format-Table -AutoSize

Pour les environnements nécessitant une authentification, incluez les informations d'identification :

$cred = Get-Credential
$results = Invoke-Command -ComputerName $servers -Credential $cred -ScriptBlock {
    Get-WindowsFeature | Where-Object { $_.Installed -and $_.FeatureType -eq "Role" }
}
Astuce pro : Utilisez le paramètre -AsJob avec Invoke-Command pour des listes de serveurs très grandes (50+ serveurs) pour exécuter des requêtes en arrière-plan et éviter les expirations de session.

Vérification : Chaque résultat inclut PSComputerName montrant quel serveur a fourni les données. Comptez les serveurs uniques avec : ($results | Select-Object PSComputerName -Unique).Count

Quelles sont les meilleures pratiques pour exporter des listes de fonctionnalités de Windows Server vers des fichiers CSV ?

Exportez vos résultats vers des fichiers CSV pour la documentation, les rapports de conformité ou une analyse plus approfondie dans Excel et d'autres outils.

Exportation de base pour un seul serveur :

Get-WindowsFeature | Where-Object Installed | Export-Csv -Path "C:\InstalledFeatures.csv" -NoTypeInformation

Pour les environnements multi-serveurs avec un formatage approprié :

$servers = @('SRV01', 'SRV02', 'DC01')
$allFeatures = Invoke-Command -ComputerName $servers -ScriptBlock {
    Get-WindowsFeature | Where-Object Installed | Select-Object Name, DisplayName, InstallState, FeatureType
}
$allFeatures | Select-Object PSComputerName, Name, DisplayName, InstallState, FeatureType | Export-Csv -Path "C:\MultiServerFeatures.csv" -NoTypeInformation

Créez des fichiers séparés pour les rôles et les fonctionnalités pour améliorer l'organisation des rapports :

$installed = Get-WindowsFeature | Where-Object Installed
$installed | Where-Object { $_.FeatureType -eq "Role" } | Export-Csv -Path "C:\InstalledRoles.csv" -NoTypeInformation
$installed | Where-Object { $_.FeatureType -eq "Feature" } | Export-Csv -Path "C:\InstalledFeatures.csv" -NoTypeInformation

Vérification : Ouvrez les fichiers CSV dans Excel ou utilisez Import-Csv "C:\InstalledFeatures.csv" | Measure-Object pour compter les enregistrements exportés et confirmer l'intégrité des données.

Comment dépanner les problèmes courants de PowerShell lors de la liste des fonctionnalités de Windows Server ?

Plusieurs problèmes courants peuvent survenir lors de l'utilisation de Get-WindowsFeature, en particulier dans les environnements d'entreprise avec des configurations de serveur mixtes.

Erreur "Get-WindowsFeature: The term is not recognized" :

Cela se produit lorsque le module ServerManager n'est pas chargé ou que vous exécutez sur un OS client. Importez le module explicitement :

Import-Module ServerManager

Sur les clients Windows 10/11, installez les outils RSAT :

Add-WindowsCapability -Online -Name Rsat.ServerManager.Tools~~~~0.0.1.0

Problèmes d'accès à distance refusé :

Configurez WinRM sur les serveurs cibles si les requêtes distantes échouent :

winrm quickconfig

Testez la connectivité avant d'exécuter des requêtes de fonctionnalités :

Test-WSMan ServerName

Problèmes de performance avec de grandes listes de serveurs :

Utilisez l'exécution basée sur les tâches pour de meilleures performances :

$job = Invoke-Command -ComputerName $servers -AsJob -ScriptBlock { Get-WindowsFeature | ? Installed }
Receive-Job $job -Wait
Avertissement : Testez toujours vos scripts PowerShell sur un petit sous-ensemble de serveurs avant de les exécuter sur l'ensemble de votre infrastructure. Les délais d'attente réseau et les problèmes d'authentification peuvent entraîner des résultats incomplets.

Vérification : Utilisez Get-Job pour surveiller l'état des tâches en arrière-plan et Remove-Job pour nettoyer les tâches terminées.

ProblèmeCauseSolution
Cmdlet non reconnuModule ServerManager non chargéImport-Module ServerManager
Accès à distance refuséWinRM non configuréEnable-PSRemoting sur la cible
Résultats incompletsPermissions insuffisantesExécuter en tant qu'administrateur
Performance lenteRequêtes séquentiellesUtiliser Invoke-Command avec -AsJob

Cette approche complète pour lister les rôles et fonctionnalités de Windows Server à l'aide de PowerShell vous fournit les outils nécessaires pour une gestion efficace des serveurs, des rapports de conformité et une documentation de l'infrastructure. Les techniques couvertes fonctionnent sur Windows Server 2016 à 2025, garantissant la compatibilité avec les environnements actuels et hérités.

Execution Steps

1

Vérifier le module PowerShell et ServerManager

Tout d'abord, confirmez que votre environnement PowerShell est prêt. Ouvrez PowerShell en tant qu'administrateur et vérifiez la disponibilité du module ServerManager.

Get-Module -ListAvailable ServerManager

Cela affiche la version du module ServerManager. Sur Windows Server 2025, vous verrez la version 2.0.0.0 ou ultérieure.

Import-Module ServerManager

Importez le module explicitement s'il n'est pas chargé automatiquement. Vérification : Exécutez Get-Command Get-WindowsFeature pour confirmer que le cmdlet est disponible.

2

Lister tous les rôles et fonctionnalités disponibles

Commencez par examiner tous les rôles et fonctionnalités sur votre serveur local. Cela vous donne l'inventaire complet avant le filtrage.

Get-WindowsFeature

Cette commande affiche trois colonnes clés : Name (identifiant court), DisplayName (nom descriptif) et InstallState (Available, Installed, ou Removed). La sortie montre des centaines de fonctionnalités.

Astuce pro : Redirigez vers Format-Table -AutoSize pour un meilleur alignement des colonnes sur les écrans larges.

Vérification : Comptez le nombre total de fonctionnalités avec (Get-WindowsFeature).Count - attendez-vous à plus de 400 éléments sur une installation complète de Windows Server.

3

Filtrer pour afficher uniquement les fonctionnalités installées

Maintenant, filtrez les résultats pour afficher uniquement les rôles et fonctionnalités installés. C'est le cas d'utilisation le plus courant pour l'audit de serveur.

Get-WindowsFeature | Where-Object InstallState -eq "Installed"

Syntaxe alternative utilisant la forme abrégée :

Get-WindowsFeature | ? Installed

Les deux commandes produisent des résultats identiques. La seconde utilise l'évaluation automatique des propriétés booléennes de PowerShell.

Avertissement : Utilisez la casse exacte pour les valeurs d'InstallState. PowerShell est sensible à la casse pour les comparaisons de chaînes dans certains contextes.

Vérification : Comparez le nombre de fonctionnalités installées par rapport au total : (Get-WindowsFeature | ? Installed).Count devrait être beaucoup plus petit que le total.

4

Interroger les serveurs distants pour les fonctionnalités installées

Étendez vos requêtes aux serveurs distants en utilisant le paramètre ComputerName. Cela nécessite une configuration correcte de WinRM.

Get-WindowsFeature -ComputerName "DC01" | Where-Object Installed

Pour les serveurs nécessitant des identifiants spécifiques :

$cred = Get-Credential
Get-WindowsFeature -ComputerName "SRV02" -Credential $cred | Where-Object Installed

Le cmdlet Get-Credential demande le nom d'utilisateur et le mot de passe de manière sécurisée.

Astuce pro : Testez d'abord la connectivité avec Test-WSMan ServerName avant d'exécuter des requêtes de fonctionnalités.

Vérification : La sortie inclut les mêmes colonnes mais interroge le serveur distant. Vérifiez que la propriété PSComputerName affiche le nom du serveur cible lors de l'utilisation des alternatives Invoke-Command.

5

Filtrer des rôles et fonctionnalités spécifiques avec des jokers

Utilisez des modèles de caractères génériques pour trouver des technologies spécifiques ou des groupes de fonctionnalités. Ceci est essentiel pour des audits de serveur ciblés.

Get-WindowsFeature *Hyper-V* | Where-Object Installed

Recherchez des fonctionnalités liées au web :

Get-WindowsFeature *IIS*, *Web* | Where-Object Installed

Trouvez tous les composants Active Directory :

Get-WindowsFeature *AD*, *Domain* | Where-Object Installed

Vérification : Chaque requête ne retourne que les fonctionnalités correspondant au modèle de caractères génériques. Utilisez Get-WindowsFeature *Hyper-V* sans le filtre pour voir toutes les fonctionnalités Hyper-V (installées et disponibles).

6

Distinguer entre rôles et fonctionnalités

Windows Server catégorise les composants comme étant soit des Rôles (fonctions serveur) soit des Fonctionnalités (outils de support). Filtrez par FeatureType pour les séparer.

Get-WindowsFeature | Where-Object { $_.Installed -and $_.FeatureType -eq "Role" }

Afficher uniquement les Fonctionnalités installées (pas les Rôles) :

Get-WindowsFeature | Where-Object { $_.Installed -and $_.FeatureType -eq "Feature" }

Formater la sortie pour une meilleure lisibilité :

Get-WindowsFeature | Where-Object { $_.Installed -and $_.FeatureType -eq "Role" } | Format-Table Name, DisplayName, FeatureType -AutoSize

Vérification : Les Rôles incluent généralement des services comme "Web Server (IIS)", "DNS Server", tandis que les Fonctionnalités incluent des outils comme "PowerShell ISE", "Telnet Client".

7

Interroger plusieurs serveurs simultanément

Utilisez Invoke-Command pour interroger plusieurs serveurs simultanément, ce qui est beaucoup plus rapide que les requêtes séquentielles.

$servers = @('SRV01', 'SRV02', 'DC01')
$results = Invoke-Command -ComputerName $servers -ScriptBlock {
    Get-WindowsFeature | Where-Object Installed
}

Voir les résultats avec identification du serveur :

$results | Select-Object PSComputerName, Name, DisplayName, InstallState | Format-Table -AutoSize

Pour les serveurs nécessitant des identifiants :

$cred = Get-Credential
$results = Invoke-Command -ComputerName $servers -Credential $cred -ScriptBlock {
    Get-WindowsFeature | Where-Object { $_.Installed -and $_.FeatureType -eq "Role" }
}
Astuce pro : Utilisez le paramètre -AsJob avec Invoke-Command pour des listes de serveurs très grandes afin d'exécuter les requêtes en arrière-plan.

Vérification : Chaque résultat inclut PSComputerName montrant quel serveur a fourni les données. Comptez les serveurs uniques : ($results | Select-Object PSComputerName -Unique).Count

8

Exporter les résultats en CSV pour la documentation

Exportez vos résultats vers des fichiers CSV pour la documentation, la conformité ou une analyse plus approfondie dans Excel.

Get-WindowsFeature | Where-Object Installed | Export-Csv -Path "C:\InstalledFeatures.csv" -NoTypeInformation

Pour des exports multi-serveurs avec un meilleur formatage :

$servers = @('SRV01', 'SRV02')
$allFeatures = Invoke-Command -ComputerName $servers -ScriptBlock {
    Get-WindowsFeature | Where-Object Installed | Select-Object Name, DisplayName, InstallState, FeatureType
}
$allFeatures | Select-Object PSComputerName, Name, DisplayName, InstallState, FeatureType | Export-Csv -Path "C:\MultiServerFeatures.csv" -NoTypeInformation

Créez des fichiers séparés pour les rôles et les fonctionnalités :

$installed = Get-WindowsFeature | Where-Object Installed
$installed | Where-Object { $_.FeatureType -eq "Role" } | Export-Csv -Path "C:\InstalledRoles.csv" -NoTypeInformation
$installed | Where-Object { $_.FeatureType -eq "Feature" } | Export-Csv -Path "C:\InstalledFeatures.csv" -NoTypeInformation

Vérification : Ouvrez les fichiers CSV dans Excel ou utilisez Import-Csv "C:\InstalledFeatures.csv" | Measure-Object pour compter les enregistrements exportés.

Discussion

Partagez vos réflexions et analyses

Vous devez être connecté pour commenter.

Chargement des commentaires...