Est-il possible de créer un fichier de configuration généralisé pour l'installation des fonctionnalités Windows à l'aide de PowerShell?

8

J'essaie actuellement d'automatiser la construction d'une machine virtuelle exécutant Windows Server 2012 R2. À l'heure actuelle, le défi consiste à automatiser l'ajout de rôles et de fonctionnalités. Dans l'assistant de rôles et fonctionnalités, il existe une option pour exporter un fichier de configuration XML qui peut être exécuté dans PowerShell.

Cependant, après avoir parcouru le fichier XML, je peux voir qu'il est spécifique au serveur sur lequel il s'exécute - il contient des champs tels que "ComputerName".

Que faire si je veux exécuter un script qui installe des rôles et des fonctionnalités sur de nombreuses machines virtuelles? J'ai besoin d'un fichier de configuration généralisé, non personnalisé pour un ordinateur spécifique.

Quelqu'un a-t-il une contribution à ce sujet?

Cameron McAuley
la source

Réponses:

12

Oui, pour Linux et Windows, vous pouvez créer les fichiers de configuration d'état souhaités qui peuvent:

  • Activer ou désactiver les rôles et fonctionnalités du serveur
  • Gérer les paramètres du registre
  • Gérer les fichiers et les répertoires
  • Démarrer, arrêter et gérer les processus et services
  • Gérer les groupes et les comptes d'utilisateurs
  • Déployer de nouveaux logiciels
  • Gérer les variables d'environnement
  • Exécuter des scripts Windows PowerShell
  • Correction d'une configuration qui s'est éloignée de l'état souhaité
  • Découvrez l'état de configuration réel sur un nœud donné

Voici un exemple de fichier de configuration qui activera IIS, s'assurera que les fichiers du site Web se trouvent dans le bon dossier, et si l'une de ces choses n'est pas installée ou manquante, pour les installer ou les copier selon les besoins (notez que $ websitefilepath est présumé être prédéfini comme source pour les fichiers du site Web):

    Configuration MyWebConfig
    {
       # A Configuration block can have zero or more Node blocks
       Node "Myservername"
       {
          # Next, specify one or more resource blocks

          # WindowsFeature is one of the built-in resources you can use in a Node block
          # This example ensures the Web Server (IIS) role is installed
          WindowsFeature MyRoleExample
          {
              Ensure = "Present" # To uninstall the role, set Ensure to "Absent"
              Name = "Web-Server"
          }

          # File is a built-in resource you can use to manage files and directories
          # This example ensures files from the source directory are present in the destination directory
          File MyFileExample
          {
             Ensure = "Present"  # You can also set Ensure to "Absent"
             Type = "Directory“ # Default is “File”
             Recurse = $true
             # This is a path that has web files
             SourcePath = $WebsiteFilePath
             # The path where we want to ensure the web files are present
             DestinationPath = "C:\inetpub\wwwroot"
   # This ensures that MyRoleExample completes successfully before this block runs
            DependsOn = "[WindowsFeature]MyRoleExample"
          }
       }
    }

Pour plus de détails, consultez Vue d'ensemble de la configuration de l'état souhaité de Windows PowerShell et Prise en main de la configuration de l'état souhaité de Windows PowerShell .

Alors, pourquoi utiliseriez-vous cela au lieu de simplement l'applet de commande install-windowsfeature? La vraie puissance de l'utilisation de DSC au lieu d'un script est que je peux définir un emplacement où je peux stocker les configurations à envoyer ou à extraire (par rapport à la machine cible), voir Modes de configuration Push and Pull . La configuration ne se soucie pas si la machine est physique ou virtuelle, mais je pense qu'il faut au moins 2012 pour amorcer le serveur pour tirer DSC.

Jim B
la source
6

Vous pouvez tout faire dans PowerShell

Get-WindowsFeature | ? { $_.Installed } | Export-Clixml .\installed.xml

Copiez le xml où il doit aller, quelque part où le nouveau serveur peut y accéder.

Import-Clixml <path to xml>\installed.xml | Install-WindowsFeature
Drifter104
la source
0
Import-Module servermanager
Install-WindowsFeature Feature,
    Feature, 
    Feature, 
    etc

Ce qui précède installera une liste de fonctionnalités. Vous pouvez les coder en dur ou simplement les enregistrer dans un fichier, un par ligne, puis l'utiliser pour les installer:

Import-Module servermanager
$features = get-content C:\Features.txt
Install-WindowsFeature $features
Deadly-Bagel
la source
Pour le serveur 2012r2, il s'agit de Install-WindowsFeature
Drifter104
Ah. Nous utilisons principalement 2008, donc je n'étais pas au courant. Merci d'avoir fait remarquer cela.
Deadly-Bagel
Lorsque vous utilisez l'interface graphique pour installer des rôles, vous devez effectuer quelques configurations à l'aide des listes déroulantes - comment sont-elles configurées lorsqu'elles sont définies via PowerShell à l'aide de votre méthode? Sont-ils tous réglés sur leurs valeurs par défaut?
Cameron McAuley
Hmm. Dans ce cas, il semble que vous devez utiliser le -configurationfilepathparamètre et le pointer vers un fichier de configuration exporté que vous avez mentionné dans votre OP. Un peu étrange, il contient des informations spécifiques au PC, comme vous l'avez dit, mais toutes les preuves indiquent qu'il l'installera sur l'ordinateur local par défaut et le pointant vers l'un de ces fichiers configurera tout si nécessaire, il n'est donc probablement pas utilisé. Cela pourrait être juste une référence pour quel ordinateur vous avez obtenu la configuration ou quelque chose.
Deadly-Bagel
Mais oui, il utilisera les options par défaut sans le fichier.
Deadly-Bagel