Ah là, je dois dire que ça m'a fait me creuser les méninges quelques heures.
Je n'étais pas du tout familier de SQL Server (encore moins en Powershell)... je ne suis pas déçu :-D
Le script déploie le CMS DNN 9.13.6 (anciennement DotNetNuke) sur Windows Server 2022, avec IIS, SQL Server Express 2019 et SSMS (mais ça c'est juste pour vous, pour la gestion à venir via l'interface graphique, puisque tout est fait en PowerShell durant l'installation).
Le script fonctionne sur Windows Serveur 2022 et 2025
Il vous restera à vous connecter à http://127.0.0.1 ou http://IP-SERVEUR pour initialiser DNN.
Regardez bien les images plus bas pour savoir comment initialiser avec la base SQLExpress où vous allez vous arracher les cheveux...
Clear-Host
Write-Host "|----------------------------------------------|"
Write-Host " INSTALLATION DE DNN"
Write-Host "|----------------------------------------------|"
Write-Host
#####################################################
# INSTALLER IIS AVEC LES MODULES NECESSAIRES :
# Installe IIS
Add-WindowsFeature Web-Server -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
# Installe les outils de gestion, y compris la console de gestion IIS
Add-WindowsFeature Web-Mgmt-Tools -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
Add-WindowsFeature Web-Mgmt-Console -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
Add-WindowsFeature Web-Mgmt-Compat -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
Add-WindowsFeature Web-Metabase -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
# Installe les fonctionnalités HTTP communes
Add-WindowsFeature Web-Default-Doc -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
Add-WindowsFeature Web-Dir-Browsing -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
Add-WindowsFeature Web-Http-Errors -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
Add-WindowsFeature Web-Static-Content -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
# Installe les fonctionnalités d'intégrité et de diagnostic
Add-WindowsFeature Web-Http-Logging -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
# Installe les fonctionnalités de performance
Add-WindowsFeature Web-Stat-Compression -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
# Installe les fonctionnalités de sécurité
Add-WindowsFeature Web-Request-Monitor -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
# Installer les outils de Développement
Add-WindowsFeature Web-Net-Ext -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
Add-WindowsFeature Web-Net-Ext45 -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
Add-WindowsFeature Web-ASP-Net45 -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
Add-WindowsFeature Web-ISAPI-Ext -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
Add-WindowsFeature Web-ISAPI-Filter -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
Add-WindowsFeature Web-WebSockets -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
# Installe les fonctionnalités HTTP communes
Add-WindowsFeature Web-Default-Doc -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
Add-WindowsFeature Web-Static-Content -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
# Installe les fonctionnalités de Santé et Diagnostics
Add-WindowsFeature Web-Custom-Logging -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
# Installe les fonctionnalités de Performances
Add-WindowsFeature Web-Dyn-Compression -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
Add-WindowsFeature Web-Stat-Compression -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
# Installe les fonctionnalités de sécurité
Add-WindowsFeature Web-Basic-Auth -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
Add-WindowsFeature Web-Filtering -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
Add-WindowsFeature Web-Windows-Auth -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
# Installe l'Authentification de base
Add-WindowsFeature Web-Basic-Auth -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
# Installer FastCGI
Add-WindowsFeature Web-CGI -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
# Redémarrer le service IIS
Restart-Service w3svc -ErrorAction SilentlyContinue
Start-Sleep -Seconds 30
# Pratiquer un second tour, il y a souvent des ratés au premier
# Installe IIS
Add-WindowsFeature Web-Server -ErrorAction SilentlyContinue
# Installe les outils de gestion, y compris la console de gestion IIS
Add-WindowsFeature Web-Mgmt-Tools -ErrorAction SilentlyContinue
Add-WindowsFeature Web-Mgmt-Console -ErrorAction SilentlyContinue
Add-WindowsFeature Web-Mgmt-Compat -ErrorAction SilentlyContinue
Add-WindowsFeature Web-Metabase -ErrorAction SilentlyContinue
# Installe les fonctionnalités HTTP communes
Add-WindowsFeature Web-Default-Doc -ErrorAction SilentlyContinue
Add-WindowsFeature Web-Dir-Browsing -ErrorAction SilentlyContinue
Add-WindowsFeature Web-Http-Errors -ErrorAction SilentlyContinue
Add-WindowsFeature Web-Static-Content -ErrorAction SilentlyContinue
# Installe les fonctionnalités d'intégrité et de diagnostic
Add-WindowsFeature Web-Http-Logging -ErrorAction SilentlyContinue
# Installe les fonctionnalités de performance
Add-WindowsFeature Web-Stat-Compression -ErrorAction SilentlyContinue
# Installe les fonctionnalités de sécurité
Add-WindowsFeature Web-Request-Monitor -ErrorAction SilentlyContinue
# Installer les outils de Développement
Add-WindowsFeature Web-Net-Ext -ErrorAction SilentlyContinue
Add-WindowsFeature Web-Net-Ext45 -ErrorAction SilentlyContinue
Add-WindowsFeature Web-ASP-Net45 -ErrorAction SilentlyContinue
Add-WindowsFeature Web-ISAPI-Ext -ErrorAction SilentlyContinue
Add-WindowsFeature Web-ISAPI-Filter -ErrorAction SilentlyContinue
Add-WindowsFeature Web-WebSockets -ErrorAction SilentlyContinue
# Installe les fonctionnalités HTTP communes
Add-WindowsFeature Web-Default-Doc -ErrorAction SilentlyContinue
Add-WindowsFeature Web-Static-Content -ErrorAction SilentlyContinue
# Installe les fonctionnalités de Santé et Diagnostics
Add-WindowsFeature Web-Custom-Logging -ErrorAction SilentlyContinue
# Installe les fonctionnalités de Performances
Add-WindowsFeature Web-Dyn-Compression -ErrorAction SilentlyContinue
Add-WindowsFeature Web-Stat-Compression -ErrorAction SilentlyContinue
# Installe les fonctionnalités de sécurité
Add-WindowsFeature Web-Basic-Auth -ErrorAction SilentlyContinue
Add-WindowsFeature Web-Filtering -ErrorAction SilentlyContinue
Add-WindowsFeature Web-Windows-Auth -ErrorAction SilentlyContinue
# Installe l'Authentification de base
Add-WindowsFeature Web-Basic-Auth -ErrorAction SilentlyContinue
# Installer FastCGI
Add-WindowsFeature Web-CGI -ErrorAction SilentlyContinue
# Redémarrer le service IIS
Restart-Service w3svc -ErrorAction SilentlyContinue
Start-Sleep -Seconds 10
######################################################
# SAUVEGARDER LE CONTENU DE C:\inetpub\wwwroot
# Spécifiez le répertoire source et le fichier ZIP de destination pour la sauvegarde
$sourceDir = "C:\inetpub\wwwroot"
$backupZip = "C:\inetpub\wwwroot_backup.zip"
# Crée une archive ZIP de wwwroot
Compress-Archive -Path $sourceDir -DestinationPath $backupZip
######################################################
# DESACTIVER PUIS SUPPRIMER LE SITE PAR DEFAUT :
# Importe le module WebAdministration pour gérer IIS
Import-Module WebAdministration
# Arrêter le site web par défaut (Généralement appelé "Default Web Site")
Write-Host "ARRET DU SITE WEB PAR DEFAUT..."
Stop-Website -Name "Default Web Site"
# Supprimer le site web par défaut
Write-Host "SUPPRESION DU SITE WEB PAR DEFAUT..."
Remove-WebSite -Name "Default Web Site"
# Supprime tous les fichiers et sous-dossiers dans C:\inetpub\wwwroot
Remove-Item -Path "C:\inetpub\wwwroot\iisstart.htm" -Force
Remove-Item -Path "C:\inetpub\wwwroot\iisstart.png" -Force
######################################################
# TELECHARGER DNN ET L'INSTALLER DANS C:\inetpub\wwwroot
# Créer le dossier temporaire C:\Temp
New-Item -Path C:\Temp -ItemType directory
# URL de téléchargement
$url = "https://github.com/dnnsoftware/Dnn.Platform/releases/download/v9.13.6/DNN_Platform_9.13.6_Install.zip"
# Chemin temporaire où le fichier sera téléchargé
$tempPath = "C:\Temp\DNN_Platform_9.13.6_Install.zip"
# Chemin vers le répertoire wwwroot
$wwwroot = "C:\inetpub\wwwroot"
# télécharger le fichier
Invoke-WebRequest -Uri "$url" -OutFile "$tempPath"
# Décompresser le fichier gzip pour obtenir un fichier tar
New-Item -Path "C:\inetpub\wwwroot\DNN" -ItemType directory
Expand-Archive -Path "$tempPath" -DestinationPath "$wwwroot\DNN"
######################################################
# CREER LE NOUVEAU SITE POUR DNN :
# Nom du nouveau site web
$websiteName = "DNN"
# Chemin du dossier racine de DNN
$websitePath = "C:\inetpub\wwwroot\DNN"
# Port sur lequel le site sera accessible
$websitePort = 80
# Supprimer le site si il existe déjà
if (Test-Path "IIS:\Sites\$websiteName") {
Write-Host "Suppression du site existant..."
Remove-WebSite -Name $websiteName
}
# Créer le nouveau site web
Write-Host "Création du nouveau site web..."
New-Website -Name $websiteName -Port $websitePort -PhysicalPath $websitePath
# démarrer le site web
Write-Host "démarrage du site web..."
Start-Website -Name $websiteName
# Afficher les informations du nouveau site web
$siteInfo = Get-Website | Where-Object { $_.Name -eq $websiteName }
Write-Host "Site Name : $($siteInfo.Name)"
Write-Host "Site ID : $($siteInfo.ID)"
Write-Host "Site State : $($siteInfo.State)"
# définir le nom du pool d'applications
$applicationPool = $websiteName
# Créer le pool d'applications
New-WebAppPool -Name $applicationPool
# Associer le pool d'applications au site
Set-ItemProperty "IIS:\Sites\$websiteName" -Name applicationPool -Value $applicationPool
# Obtenir l'état du pool d'applications
Get-WebAppPoolState -Name $applicationPool | Select-Object Name, Status
######################################################
# ATTRIBUTION DES DROITS AU POOL D'APPLICATION CREE
$folders = @(
"$websitePath"
)
# Notez que nous utilisons la valeur `$websiteName` pour former le nom complet de l'utilisateur "IIS APPPOOL\..."
$users = @("IIS APPPOOL\$websiteName")
foreach ($folder in $folders) {
foreach ($user in $users) {
# (OI)(CI)M est utilisé pour les droits de modification
Start-Process cmd.exe -ArgumentList "/c icacls `"$folder`" /grant `"$($user):(OI)(CI)M`"" -NoNewWindow -Wait
}
}
#####################################################
# TELECHARGER ET INSTALLER SQL SERVER EXPRESS 2019
# téléchargeR SQL SERVER EXPRESS 2019
Invoke-WebRequest -Uri https://download.microsoft.com/download/7/f/8/7f8a9c43-8c8a-4f7c-9f92-83c18d96b681/SQL2019-SSEI-Expr.exe -OutFile C:\Temp\SQL2019-SSEI-Expr.exe
# INSTALLER SQL SERVER EXPRESS 2019 EN MODE SILENCIEUX
Start-Process -Wait -FilePath "C:\Temp\SQL2019-SSEI-Expr.exe" -ArgumentList "/ACTION=Install /Q /IACCEPTSQLSERVERLICENSETERMS"
#####################################################
# TELECHARGER ET INSTALLER SSMS
Invoke-WebRequest -Uri https://aka.ms/ssmsfullsetup -OutFile C:\Temp\SSMS-Setup-ENU.exe
# Installer SSMS silencieusement
Start-Process -Wait -FilePath "C:\Temp\SSMS-Setup-ENU.exe" -ArgumentList "/install /quiet"
# Ajouter au PATH et recharger les variables
# Chemin d'accès à sqlcmd
$sqlcmdPath = "C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn"
# Ajouter de manière permanente le chemin au Path
Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH -Value "$($env:Path);$sqlcmdPath"
# Recharger les variables d'environnement :
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
#####################################################
# CREATE SQL BASE FOR DNN
$dbName = Read-Host "ENTRER LE NOM POUR LA BASE DNN"
$dbUser = Read-Host "ENTRER UN NOM POUR L'UTILISATEUR ADMINISTRATEUR DE LA BASE DNN"
$dbPassword = Read-Host "ENTRER UN MOT DE PASSE POUR L'UTILISATEUR ADMINISTRATEUR"
# Créer la base de données
$sqlCreateDB = "CREATE DATABASE [$dbName];"
sqlcmd -S localhost\SQLEXPRESS -E -Q $sqlCreateDB
# Créer l'utilisateur SQL
$sqlCreateUser = @"
USE master;
CREATE LOGIN [$dbUser] WITH PASSWORD = N'$dbPassword', DEFAULT_DATABASE=[dnndb], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF;
"@
sqlcmd -S localhost\SQLEXPRESS -E -Q $sqlCreateUser
# Rendre l'utilisateur propriétaire de la base de données
$sqlSetOwner = @"
USE [$dbName];
ALTER AUTHORIZATION ON DATABASE::[$dbName] TO [$dbUser];
"@
sqlcmd -S localhost\SQLEXPRESS -E -Q $sqlSetOwner
# Mettre le mode d'authentification pour le serveur SQL en mode mixte
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQLServer" -Name "LoginMode" -Value 2
# Redémarrer le service SQL Server pour que le changement prenne effet
Restart-Service -Name 'MSSQL$SQLEXPRESS'
######################################################
# FIN DE L'INSTALLATION
# Afficher une MessageBox
Write-Host
Write-Host "L'INSTALLATION EST TERMINEE."
Write-Host "DNN EST ACCESSIBLE SUR http://IP-SERVEUR"
Write-Host
On peut mettre un certain temps avant de trouver comment initialiser cette fichue base SQLExpress avec DNN lors du wizard sur le navigateur.
Voici comment faire si vous aviez entré :
- un nom de base SQL : dnndb
- un nom d'utilisateur : admindnn