SQL Server mit PowerShell Desired State Configuration installieren

Haben Sie jemals die SQL Server-Installationsschnittstelle verwendet, indem Sie einfach die gleichen Schaltflächen ausgewählt, dieselben Informationen eingegeben haben und nicht darüber nachgedacht haben? Die Installation wurde abgeschlossen, aber Sie haben vergessen, die DBA-Gruppe in der Sysadmin-Rolle anzugeben. Dann mussten Sie diese Dinge tun:

  • Wechseln Sie in den Einzelbenutzermodus.
  • Fügen Sie die entsprechenden Benutzer oder Gruppen hinzu.
  • Bringen Sie SQL Server im Mehrbenutzermodus wieder her.
  • Test.

Was noch schlimmer ist, ist, dass das Vertrauen in die gesamte Installation erschüttert ist. "Was habe ich sonst vergessen?" fragen Sie sich vielleicht.

Informationen zur PowerShell Desired State Configuration (DSC). Mithilfe von DSC erstellen Sie eine Konfigurationsvorlage, die Sie über Hunderte und Tausende von Servern wiederverwenden können. Je nach Build müssen Sie möglicherweise einige der Setupparameter optimieren. Das ist aber kein wichtiges Problem, da Sie alle Standardeinstellungen beibehalten können. Es beseitigt die Möglichkeit, dass Sie vergessen werden, einen wichtigen Parameter einzugeben.

In diesem Artikel wird die anfängliche Einrichtung einer eigenständigen Instanz von SQL Server 2017 unter Windows Server 2016 mithilfe der SqlServerDsc DSC-Ressource beschrieben. Einige frühere Kenntnisse von DSC sind hilfreich, da wir nicht untersuchen, wie DSC funktioniert.

Hinweis

Dieser Artikel bezieht sich auf PowerShell 5.1, bei dem es sich um die Standardversion von PowerShell handelt, die mit Windows Server 2016, 2019 und 2022 installiert ist.

Für diese Anleitung werden die folgenden Gegenstände benötigt:

  • Ein Computer, auf dem Windows Server 2016 ausgeführt wird.
  • SQL Server 2017-Installationsmedien.
  • Die SqlServerDsc-DSC-Ressource .

Voraussetzungen

In den meisten Fällen wird DSC verwendet, um die erforderlichen Anforderungen zu erfüllen. Aber für die Zwecke dieser Demo behandeln wir die Voraussetzungen manuell.

Installieren Sie die SqlServerDsc-DSC-Ressource

Laden Sie die SqlServerDsc DSC-Ressource aus dem PowerShell-Katalog mithilfe des Cmdlets "Install-Module " herunter.

Hinweis

Stellen Sie sicher, dass PowerShell als Administrator ausgeführt wird, um das Modul zu installieren.

Install-Module -Name SqlServerDsc

Abrufen des SQL Server 2017-Installationsmediums

Laden Sie die SQL Server 2017-Installationsmedien auf den Server herunter. Wir haben SQL Server 2017 Enterprise aus einem Visual Studio-Abonnement heruntergeladen und die ISO in C:\en_sql_server_2017_enterprise_x64_dvd_11293666.isokopiert.

Jetzt muss die ISO in ein Verzeichnis extrahiert werden:

New-Item -Path C:\SQL2017 -ItemType Directory
$mountResult = Mount-DiskImage -ImagePath 'C:\en_sql_server_2017_enterprise_x64_dvd_11293666.iso' -PassThru
$volumeInfo = $mountResult | Get-Volume
$driveInfo = Get-PSDrive -Name $volumeInfo.DriveLetter
Copy-Item -Path ( Join-Path -Path $driveInfo.Root -ChildPath '*' ) -Destination C:\SQL2017\ -Recurse
Dismount-DiskImage -ImagePath 'C:\en_sql_server_2017_enterprise_x64_dvd_11293666.iso'

Erstellen der Konfiguration

Konfiguration

Erstellen Sie die Konfigurationsfunktion, die aufgerufen wird, um die MOF-Dokumente (Managed Object Format) zu generieren:

Configuration SQLInstall
{...}

Module

Importieren Sie die Module in die aktuelle Sitzung. Diese Module teilen dem Konfigurationsdokument mit, wie die MOF-Dokumente erstellt werden. Außerdem teilen sie dem DSC-Modul mit, wie die MOF-Dokumente auf den Server angewendet werden:

Import-DscResource -ModuleName SqlServerDsc

Ressourcen

.NET Framework

SQL Server basiert auf .NET Framework. Daher müssen wir sicherstellen, dass sie vor der Installation von SQL Server installiert ist. Die WindowsFeature-Ressource wird zum Installieren des Net-Framework-45-Core-Windows-Features verwendet:

WindowsFeature 'NetFramework45'
{
     Name = 'Net-Framework-45-Core'
     Ensure = 'Present'
}

SqlSetup

Die SqlSetup-Ressource wird verwendet, um DSC mitzuteilen, wie SQL Server installiert wird. Die für eine Basisinstallation erforderlichen Parameter sind wie folgt:

  • InstanceName. Der Name der Instanz. Verwenden Sie MSSQLSERVER für eine Standardinstanz.
  • Features. Die zu installierenden Features. In diesem Beispiel wird nur das SQLEngine-Feature installiert.
  • SourcePath. Der Pfad zum SQL-Installationsmedium. In diesem Beispiel haben wir die SQL-Installationsmedien in C:\SQL2017 gespeichert. Eine Netzwerkfreigabe kann den auf dem Server verwendeten Speicherplatz minimieren.
  • SQLSysAdminAccounts. Die Benutzer oder Gruppen, die Mitglied der Sysadmin-Rolle sein sollen. In diesem Beispiel gewähren wir der lokalen Administratorgruppe sysadmin Zugriff.

Hinweis

Wir empfehlen diese Konfiguration nicht in einer Hochsicherheitsumgebung.

Eine vollständige Liste und Beschreibung der auf SqlSetup verfügbaren Parameter sind im GitHub-Repository sqlServerDsc verfügbar.

Die SqlSetup-Ressource installiert nur SQL Server und verwaltet nicht die angewendeten Einstellungen. Ein Beispiel wäre, wenn die SQLSysAdminAccounts zum Installationszeitpunkt angegeben werden. Ein Administrator kann Anmeldungen zu oder aus der Sysadmin-Rolle hinzufügen oder entfernen. Die SqlSetup-Ressource wird jedoch nicht betroffen sein. Wenn DSC die Mitgliedschaft der Sysadmin-Rolle erzwingen soll, verwenden Sie die SqlServerRole-Ressource .

Konfiguration abschließen

Configuration SQLInstall
{
     Import-DscResource -ModuleName SqlServerDsc

     node localhost
     {
          WindowsFeature 'NetFramework45'
          {
               Name   = 'NET-Framework-45-Core'
               Ensure = 'Present'
          }

          SqlSetup 'InstallDefaultInstance'
          {
               InstanceName        = 'MSSQLSERVER'
               Features            = 'SQLENGINE'
               SourcePath          = 'C:\SQL2017'
               SQLSysAdminAccounts = @('Administrators')
               DependsOn           = '[WindowsFeature]NetFramework45'
          }
     }
}

Erstellen und Bereitstellen

Kompilieren der Konfiguration

Dot-Quelle der Konfigurationsdatei ausführen:

. .\SQLInstallConfiguration.ps1

Führen Sie die Konfigurationsfunktion aus:

SQLInstall

Ein Verzeichnis namens SQLInstall wird im Arbeitsverzeichnis erstellt. Sie enthält eine Datei namens "localhost.mof". Überprüfen Sie den Inhalt des MOF, der die kompilierte DSC-Konfiguration anzeigt.

Bereitstellen der Konfiguration

Rufen Sie zum Starten der DSC-Bereitstellung von SQL Server das Cmdlet Start-DscConfiguration auf . Die folgenden Parameter werden für das Cmdlet bereitgestellt:

  • Pfad. Der Pfad zum Ordner, der die zu bereitstellenden MOF-Dokumente enthält. Beispiel ist C:\SQLInstall.
  • Warten Sie. Warten Sie, bis der Konfigurationsauftrag abgeschlossen ist.
  • Kraft. Überschreiben Sie alle vorhandenen DSC-Konfigurationen.
  • Ausführlich. Ausführliche Ausgabe anzeigen. Es ist nützlich, wenn Sie eine Konfiguration zum ersten Mal zur Problembehandlung übertragen.
Start-DscConfiguration -Path C:\SQLInstall -Wait -Force -Verbose

Wenn die Konfiguration angewendet wird, zeigt die ausführliche Ausgabe, was passiert. Solange keine Fehler (roter Text) ausgelöst werden, sollte SQL Server installiert werden, wenn der Vorgang "Invoke CimMethod" vollständig auf dem Bildschirm angezeigt wird.

Überprüfen der Installation

DSC

Die Cmdlets "Test-DscConfiguration " können ermitteln, ob der aktuelle Zustand des Servers den gewünschten Zustand erfüllt. In diesem Fall handelt es sich um die SQL Server-Installation. Das Ergebnis von Test-DscConfiguration sollte "True" sein:

PS C:\> Test-DscConfiguration
True

Dienste

Die Dienstliste gibt jetzt SQL Server-Dienste zurück:

PS C:\> Get-Service -Name *SQL*
Status  Name           DisplayName
------  ----           -----------
Running MSSQLSERVER    SQL Server (MSSQLSERVER)
Stopped SQLBrowser     SQL Server Browser
Running SQLSERVERAGENT SQL Server Agent (MSSQLSERVER)
Running SQLTELEMETRY   SQL Server CEIP service (MSSQLSERVER)
Running SQLWriter      SQL Server VSS Writer

SQL Server

PS C:\> & sqlcmd -S $env:COMPUTERNAME
1> SELECT @@SERVERNAME
2> GO
1> quit