Distribuire un progetto SSIS con PowerShell

Si applica a:SQL ServerRuntime di integrazione SSIS in Azure Data Factory

Questa guida introduttiva illustra come usare uno script di PowerShell per connettersi a un server di database e distribuire un progetto SSIS nel catalogo SSIS.

Prerequisiti

Un server di Database SQL di Azure è in ascolto sulla porta 1433. Se si sta provando a connettersi a un server di database SQL di Azure dall'interno di un firewall aziendale, per stabilire correttamente la connessione questa porta deve essere aperta nel firewall aziendale.

Piattaforme supportate

È possibile usare le informazioni di questa guida introduttiva per distribuire un progetto SSIS nelle piattaforme seguenti:

Non è possibile usare le informazioni contenute in questa guida introduttiva per distribuire un pacchetto SSIS in SQL Server in Linux. Per altre informazioni sull'esecuzione di pacchetti in Linux, vedere Estrarre, trasformare e caricare i dati in Linux con SSIS.

Ottenere le informazioni di connessione per il database SQL di Azure

Per distribuire il progetto nel database SQL di Azure, ottenere le informazioni di connessione necessarie per connettersi al database del catalogo SSIS (SSISDB). Nelle procedure che seguono sono necessari il nome completo del server e le informazioni di accesso.

  1. Accedere al portale di Azure.
  2. Selezionare Database SQL nel menu a sinistra e quindi il database SSISDB nella pagina Database SQL.
  3. Nella pagina Panoramica del tuo database, verifica il nome completo del server. Passare il mouse sul nome del server per visualizzare l'opzione Fare clic per copiare.
  4. Se si dimenticano le informazioni di accesso del server di database SQL di Azure, passare alla pagina del server di database SQL per visualizzare il nome amministratore del server. Se necessario, è possibile reimpostare la password.
  5. Selezionare Mostra stringhe di connessione del database.
  6. Esaminare l'intera stringa di connessione ADO.NET.

Metodo di autenticazione supportato

Vedere i metodi di autenticazione per la distribuzione.

Script di PowerShell

Specificare i valori appropriati per le variabili nella parte superiore dello script seguente e quindi eseguire lo script per distribuire il progetto SSIS.

Nota

L'esempio seguente usa l'autenticazione di Windows per l'implementazione su un'istanza di SQL Server locale. Per usare l'autenticazione di SQL Server, sostituire l'argomento Integrated Security=SSPI; con User ID=<user name>;Password=<password>;. Se ci si connette a un server di database SQL di Azure, non è possibile usare l'autenticazione di Windows.

# ===== Param =====
$TargetSqlVersion  = '2025'   # 2017 / 2019 / 2022 / 2025
$TargetServerName  = 'localhost'
$TargetFolderName  = 'Project1Folder'
$ProjectName       = 'Integration Services Project1'
$ProjectFilePath   = 'C:\Projects\Integration Services Project1\Integration Services Project1\bin\Development\Integration Services Project1.ispac'
# ========================

$SSISNamespace  = 'Microsoft.SqlServer.Management.IntegrationServices'
$isV2025OrLater = [int]$TargetSqlVersion -ge 2025

if ($isV2025OrLater) {
    # 2025+ : need Microsoft.Data.SqlClient (shipped with SqlServer module 22.x)
    $required = '22.4.5.1'
    if (-not (Get-Module -ListAvailable -Name SqlServer |
              Where-Object { $_.Version -eq [version]$required })) {
        Install-Module -Name SqlServer -RequiredVersion $required -Scope CurrentUser -AllowClobber -Force
    }
    Import-Module SqlServer -RequiredVersion $required
    $sqlClientType = 'Microsoft.Data.SqlClient.SqlConnection'
}
else {
    # 2017 / 2019 / 2022 : in-box System.Data.SqlClient
    $sqlClientType = 'System.Data.SqlClient.SqlConnection'
}

[Reflection.Assembly]::LoadWithPartialName($SSISNamespace) | Out-Null
[Reflection.Assembly]::LoadWithPartialName(($SSISNamespace + 'Enum')) | Out-Null

$sqlConnectionString = "Data Source=$TargetServerName;Initial Catalog=master;Integrated Security=SSPI;Encrypt=True;TrustServerCertificate=True; 
$sqlConnection       = New-Object $sqlClientType $sqlConnectionString

$integrationServices = New-Object ($SSISNamespace + '.IntegrationServices') $sqlConnection
$catalog             = $integrationServices.Catalogs['SSISDB']

$folder = New-Object ($SSISNamespace + '.CatalogFolder') ($catalog, $TargetFolderName, 'Folder description')
$folder.Create()

Write-Host "Deploying $ProjectName ..."
[byte[]]$projectFile = [System.IO.File]::ReadAllBytes($ProjectFilePath)
$folder.DeployProject($ProjectName, $projectFile)
Write-Host 'Done.'