dbaTools – Installation de SQL Server

L’utilisation de PowerShell est devenu un standard de l’administration, y compris pour les DBAs.

L’installation de SQL Server peut se faire via l’utilisation d’un assistant graphique, mais également via la ligne de commande setup.exe. Pour mémoire, l’assistant graphique n’est qu’un super éditeur de fichier texte car une fois que vous avez parcouru tous les écrans de l’assistant, un fichier configuration.ini est généré afin de rappeler setup.exe avec le paramètre /configurationfile. Très pratique lorsque l’on souhaite répéter un certain nombre de fois la même installation.

Pour ma part, je travaille principalement avec la ligne de commande, on va dire que c’est historique !

Voici un bout de code que j’utilise régulièrement :


$HostName = Hostname
D:\Setup.exe /ACTION=Install /FEATURES=SQLEngine,Replication,IS,Conn,FullText  `
			/INSTANCENAME=MSSQLSERVER `
			/SQLSVCACCOUNT="NT Service\MSSQLServer" `
			/AGTSVCACCOUNT="NT Service\SQLServerAgent" `
			/FTSVCACCOUNT="NT Service\MSSQLFDLauncher" `
			/ISSVCACCOUNT="NT Service\MsDtsServer150" `
			/AGTSVCSTARTUPTYPE="Automatic" `
			/TCPENABLED="1" `
			/FILESTREAMLEVEL="3" `
			/FILESTREAMSHARENAME="MSSQLSERVER" `
			/INSTALLSQLDATADIR="E:" `
			/SQLBACKUPDIR="E:\MSSQL\Backup" `
			/SQLUSERDBDIR="E:\MSSQL\Data" `
			/SQLUSERDBLOGDIR="E:\MSSQL\Log" `
			/SQLTEMPDBFILECOUNT=4  `
			/UpdateEnabled=FALSE `
			/SECURITYMODE=SQL /SAPWD="Password1!" /SQLSYSADMINACCOUNTS="$Hostname\Administrator" `
			/SQLUSERDBDIR="E:\MSSQLServer\Data" `
			/SQLUSERDBLOGDIR="E:\MSSQLServer\Log" `
			/SQLTEMPDBDIR="E:\MSSQLServer\Data" `
			/SQLTEMPDBLOGDIR="E:\MSSQLServer\Log" `
			/SQLTEMPDBFILESIZE=256 `
			/SQLTEMPDBFILEGROWTH=64 `
			/SQLTEMPDBLOGFILESIZE=256 `
			/SQLTEMPDBLOGFILEGROWTH=256 `
			/HELP="False" /INDICATEPROGRESS="False" /QUIET="True" /QUIETSIMPLE="False" `
			/X86="False" /ENU="True" /ERRORREPORTING="False" /SQMREPORTING="False" `
			/SQLSVCINSTANTFILEINIT=TRUE `
			/IACCEPTSQLSERVERLICENSETERMS 
	

D’un point de vue PowerShell strict, rien de neuf quant à l’installation de SQL Server. Mais la communauté, au travers des modules dbaTools, a créé un cmdlet pour « simplifier » le process d’installation. Lorsque ‘l’on a travaillé des années en ligne de commande, le côté « simple » n’apparait pas immédiatement, je l’avoue.


Mais la commande Install-DbaInstance offre l’avantage de pouvoir effectuer la même installation sur plusieurs serveurs simultanément, sans effort supplémentaire.

En toute honnêteté, je n’ai pas encore opté systématiquement pour cette méthode d’installation, mais lorsque je dois installer plusieurs serveurs de test de manière identique pour des formation de type haute disponibilité, par exemple un cluster Always On Availability Group X nœuds, je fais appel à Install-DbaInstance.


# Source reporsitory configuration
Set-DbatoolsConfig -Name Path.SQLServerSetup -Value '\\rebond\sources'

# my super secure sa password for demos
$Username = 'sa'
$Password = 'Password1!'
$pass = ConvertTo-SecureString -AsPlainText $Password -Force
$saCred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$pass

# the credential used to install SQL Server on the remote computers
$CurrentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
$InstallCred = Get-Credential -Message "Enter current user and password to connect remote computer" -UserName $CurrentUser

# some configuration stuffs
$config = @{
    AGTSVCSTARTUPTYPE = "Automatic"
    SQLCOLLATION = "Latin1_General_CI_AS"
    BROWSERSVCSTARTUPTYPE = "Manual"
    FILESTREAMLEVEL = 1
    INSTALLSQLDATADIR="G:" 
    SQLBACKUPDIR="G:\MSSQL15.MSSQLSERVER\Backup" 
    SQLUSERDBDIR="G:\MSSQL15.MSSQLSERVER\MSSQL\Data" 
    SQLUSERDBLOGDIR="H:\MSSQL15.MSSQLSERVER\Log" 
    SQLTEMPDBDIR="T:\MSSQL15.MSSQLSERVER\Data" 
    SQLTEMPDBLOGDIR="U:\MSSQL15.MSSQLSERVER\Log" 
}

# Perform the installation
Install-DbaInstance -SqlInstance SQL15AG1,SQL15AG2 `
                    -Credential $InstallCred `
                    -Version 2019 `
                    -Feature Engine,Replication,FullText,IntegrationServices `
                    -AuthenticationMode Mixed `
                    -AdminAccount $CurrentUser `
                    -SaCredential $saCred `
                    -PerformVolumeMaintenanceTasks `
                    -SaveConfiguration C:\InstallScripts `
                    -Configuration $config `
                    -Confirm:$false


# Connect using Windows authentication
$Servers = Connect-DbaInstance -SqlInstance SQL15AG1,SQL15AG2
$Servers | Select-Object DomainInstanceName,VersionMajor,Edition


# Connect using SQL authentication
$Servers = Connect-DbaInstance -SqlInstance SQL15AG1,SQL15AG2 -SqlCredential $saCred
$Servers | get-dbaDatabase | format-table -autosize

L’utilisation de la commande requiert de disposer d’un partage réseau hébergeant les sources de SQL Server. La commande va chercher récursivement le « bon » répertoire, correspondant à la version que vous souhaitez installer. De même, si vous disposer des Cumulative Updates, une installation SlipStream est possible.

Un certain nombre de paramètres d’installation sont accessibles directement depuis les paramètres de la commande. pour d’autres, il faut se tourner vers une variable de configuration qui reprend les items de la ligne de commande setup.exe

Je trouve cependant deux points très bien pensés pour ce module:
– La possibilité de spécifier plusieurs instance à installer (et cela fonctionne également pour des instances nommées)
– La possibilité d’enregistrer localement, sur la machine de rebond, le fichier INI correspondant à l’installation, cela peut servir …

Happy dbaTools !

A propos Christophe

Consultant SQL Server Formateur certifié Microsoft MVP SQL Server MCM/MCSM SQL Server
Cet article, publié dans PowerShell, est tagué . Ajoutez ce permalien à vos favoris.

2 commentaires pour dbaTools – Installation de SQL Server

  1. eslfhvi dit :

    Hello,
    Merci encore pour ces billets.
    J’utilisais dbatools pour installer mes instances, mais depuis SQL2019 j’ai évité de l’utiliser car j’avais constaté certains dysfonctionnements.

    Exemple:
    Je viens ce matin de reprendre l’install avec DbaTools en prenant en compte de tes paramètres, et je viens de m’apercevoir que malgré l’indication des différentes directories pour les Data, Log, et Temp, l’install s’est faite sur C:\Progam Files…….
    Et chose étrange (ou pas) c’est lorsque j’ai voulu migrer mes bases (par Dbatools) que je me suis aperçu qu’il y avait un loup, refus de recharger car pas d’accès au serveur Nas, en fait non, la subtilité est qu’il ne peut pas créer les base sur C:\Program Files….)..
    « The operating system returned the error ‘0x80070005(Access is denied.)’ while attempting ‘SvlPathDoesPathExist’ on ‘\\nasdbbackup\dbbackup\SQLSERVER’. »

    Salutations, Best Regards, Herzliche Grüsse
    ERS

    • Christophe dit :

      Salut Eric
      J’ai constaté quelques dysfonctionnements en utilisant directement les paramètres de la commande mais pas au travers de la variable de config.
      Les 2 machines que j’ai installées pour la démo sont OK niveau config.
      As tu utilisé les comptes managés locaux pour les comptes de service ? J’ai eu des pbm avec sur certains NAS (exemple le NASHA chez OVH) qui après un changement de techno de leur côté n’a fonctionné qu’avec un compte utilisateur « normal », déclaré dans la SAM du Host.
      Cdlt

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s