Manipuler SQL Server via PowerShell (opérations de base)


Renseigner les informations pour la création et l'administration d'une base SQL

$dbName = Read-Host "ENTRER LE NOM POUR LA BASE SQL"
$dbUser = Read-Host "ENTRER UN NOM POUR L'UTILISATEUR ADMINISTRATEUR DE LA BASE"
$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=[$dbName], 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'

Télécharger installer DacFramework.msi, nécessaire pour utiliser SqlPackage.exe

mkdir C:\TEMP
iwr -uri https://go.microsoft.com/fwlink/?linkid=2329732 -outfile C:\TEMP\DacFramework.msi
msiexec /i C:\TEMP\DacFramework.msi /qn /norestart

Exporter la base SQL en bacpac sur un premier serveur (A)

$dbName = "masuperbase" # nom de la base source sur le serveur (A)
$outputBac = "C:\Users\Administrateur\Desktop\dnndb_export.bacpac"
$sqlPackagePath = "C:\Program Files\Microsoft SQL Server\170\DAC\bin\SqlPackage.exe"
$TargetServerName = "$env:COMPUTERNAME\SQLEXPRESS"
& $sqlPackagePath /Action:Export /SourceServerName:"$TargetServerName" /SourceDatabaseName:"$dbName" /TargetFile:"$outputBac" /SourceTrustServerCertificate:True

Import d'une base SQL à partir d'un .bacpac depuis un second serveur (B)

$dbName = "masuperbase" # nom de base sur le serveur (B) (qui ne doit pas encore exister car elle sera créée automatiquement par l'opération d'import).
$inputBac = "C:\Users\Administrateur\Desktop\dnndb_export.bacpac"
$sqlPackagePath = "C:\Program Files\Microsoft SQL Server\170\DAC\bin\SqlPackage.exe"
$TargetServerName = "$env:COMPUTERNAME\SQLEXPRESS"
& $sqlPackagePath /Action:Import /SourceFile:"$inputBac" /TargetServerName:"$TargetServerName" /TargetDatabaseName:"$dbName" /TargetTrustServerCertificate:True

⬆️ Retour en haut de la page