Ist es möglich, eine allgemeine Konfigurationsdatei für die Installation von Windows-Funktionen mit PowerShell zu erstellen?

8

Ich versuche derzeit, den Build einer VM unter Windows Server 2012 R2 zu automatisieren. Derzeit besteht die Herausforderung darin, das Hinzufügen von Rollen und Funktionen zu automatisieren. Innerhalb des Assistenten für Rollen und Funktionen gibt es eine Option zum Exportieren einer XML-Konfigurationsdatei, die in PowerShell ausgeführt werden kann.

Nachdem ich die XML-Datei durchgesehen habe, kann ich feststellen, dass sie spezifisch für den Server ist, auf dem sie ausgeführt wird. Sie enthält Felder wie "Computername".

Was ist, wenn ich ein Skript ausführen möchte, das Rollen und Funktionen auf vielen VMs installiert? Ich benötige eine Konfigurationsdatei, die verallgemeinert und nicht auf einen bestimmten Computer zugeschnitten ist.

Hat jemand einen Beitrag zu diesem Thema?

Cameron McAuley
quelle

Antworten:

12

Ja, sowohl für Linux als auch für Windows können Sie die gewünschten Statuskonfigurationsdateien erstellen, die:

  • Aktivieren oder deaktivieren Sie Serverrollen und -funktionen
  • Registrierungseinstellungen verwalten
  • Verwalten Sie Dateien und Verzeichnisse
  • Prozesse, Services starten, stoppen und verwalten
  • Verwalten Sie Gruppen und Benutzerkonten
  • Stellen Sie neue Software bereit
  • Umgebungsvariablen verwalten
  • Führen Sie Windows PowerShell-Skripts aus
  • Korrigieren Sie eine Konfiguration, die vom gewünschten Status abweicht
  • Ermitteln Sie den tatsächlichen Konfigurationsstatus auf einem bestimmten Knoten

Hier ist eine Beispielkonfigurationsdatei, mit der IIS aktiviert wird. Stellen Sie sicher, dass sich die Website-Dateien im richtigen Ordner befinden. Wenn eines dieser Elemente nicht installiert ist oder fehlt, können Sie es entsprechend installieren oder kopieren (beachten Sie, dass $ websitefilepath angenommen wird als Quelle für die Website-Dateien vordefiniert):

    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"
          }
       }
    }

Weitere Informationen finden Sie unter Übersicht über die Konfiguration des gewünschten Windows PowerShell-Status und Erste Schritte mit der Konfiguration des gewünschten Windows PowerShell-Status .

Warum sollten Sie dies anstelle des Cmdlets install-windowsfeature verwenden? Die eigentliche Stärke der Verwendung von DSC anstelle eines Skripts besteht darin, dass ich einen Speicherort definieren kann, an dem Konfigurationen gespeichert werden können, zu denen (in Bezug auf den Zielcomputer) ein Push oder Pull durchgeführt werden soll ( siehe Push- und Pull-Konfigurationsmodi) . Der Konfiguration ist es egal, ob der Computer physisch oder virtuell ist, aber ich glaube, es dauert mindestens 2012, bis der Server gestartet ist, um DSC abzurufen.

Jim B.
quelle
6

Sie können alles in PowerShell erledigen

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

Kopieren Sie die XML-Datei dorthin, wo sie benötigt wird, damit der neue Server darauf zugreifen kann.

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

Oben wird eine Liste von Funktionen installiert. Sie können sie hart codieren oder einfach in einer Datei speichern, eine pro Zeile, und diese dann verwenden, um sie zu installieren:

Import-Module servermanager
$features = get-content C:\Features.txt
Install-WindowsFeature $features
Tödlicher Bagel
quelle
Für Server 2012r2 ist es Install-WindowsFeature
Drifter104
Ah. Wir verwenden hauptsächlich 2008, daher war mir das nicht bewusst. Vielen Dank für den Hinweis.
Deadly-Bagel
Wenn Sie die GUI zum Installieren von Rollen verwenden, müssen Sie einige Konfigurationen mithilfe der Dropdowns vornehmen. Wie werden diese konfiguriert, wenn sie mithilfe Ihrer Methode über Powershell festgelegt werden? Sind sie alle auf ihre Standardeinstellungen eingestellt?
Cameron McAuley
Hmm. In diesem Fall müssen Sie den -configurationfilepathParameter verwenden und auf eine exportierte Konfigurationsdatei verweisen, die Sie in Ihrem OP erwähnt haben. Ein bisschen seltsam, dass es PC-spezifische Informationen enthält, wie Sie sagten, aber alle Beweise deuten darauf hin, dass es standardmäßig auf dem lokalen Computer installiert wird. Wenn Sie auf eine dieser Dateien verweisen, wird alles nach Bedarf konfiguriert, sodass es wahrscheinlich nicht verwendet wird. Es könnte nur eine Referenz sein, für welchen Computer Sie die Konfiguration erhalten haben oder so.
Deadly-Bagel
Aber ja, es werden die Standardoptionen ohne die Datei verwendet.
Deadly-Bagel