Использование sql-запроса на задании sql-сервера ssis с использованием powershell

avatar
HAH
1 июля 2021 в 15:58
120
1
3

Я хочу вызвать sql-запрос/SP для задания sql на сервере ssis с помощью сценария powershell, но не знаю, как это сделать. Я использовал powershell для запуска sql-запросов в базе данных sql, но не для заданий в ssis. Вот что у меня есть до сих пор-

$ssisServer = New-Object -TypeName  Microsoft.SQLServer.Management.Smo.Server($name_of_server) 
$IntegrationServices = New-Object "Microsoft.SqlServer.Management.IntegrationServices.IntegrationServices" $ssisServer
$catalog = $IntegrationServices.Catalogs[$catalog]
$folder = $catalog.Folders[$folder]    
$project = $folder.Projects[$project]
$sqlJob = $ssisServer.JobServer.Jobs[$existing_job_name]
query= " some sql query "
if ($sqlJob) {
$sqlJob.CurrentRunStatus()
   # here I need to run a query on the job
}

Запрос может заключаться в том, чтобы получить сведения о задании или выполнить какое-либо действие над ним. Также этого достаточно, поскольку мы просто указываем здесь имя сервера $sqlJob = $ssisServer.JobServer.Jobs[$existing_job_name], чтобы получить задание, которое находится в определенной папке->проект->задание? Я еще не мог попробовать это и не нашел много ресурсов на нем. Пожалуйста, помогите мне с работой.

Источник
Cpt.Whale
6 июля 2021 в 19:30
0

Непонятно, что вы ищете для меня. Пример в вашем вопросе уже работает для вас, и вы хотите добавить запрос к данным задания? Существует несколько способов получить объект задания, но это может зависеть от того, какой тип аутентификации вы выполняете и т. д., поэтому лучше всего начать с некоторого работающего кода. Попробуйте запустить код из своего примера и добавить дополнительную информацию о том, какие данные возвращает ваша задача.

Cpt.Whale
6 июля 2021 в 19:35
0

Для вашего второго абзаца может быть проще получить конкретную работу, используя поставщика сервера sql, например $sqlJob = Get-ChildItem SQLSERVER:\SSIS\localhost\Default\Catalogs\SSISDB\Folders\MyFolder\Projects\MyProject\Packages\ | Where Name -eq 'MyPackage.dtsx'.

Ответы (1)

avatar
Puzo
10 июля 2021 в 11:17
0

Я не работал с сервером SSIS. Но принцип выполнения SQL-запросов из SQL довольно прост.

У вас должен быть правильный модуль или вы можете использовать привязку SQL.<76355523666738>

Я продолжу со второго.

# If you have an SQL server on your server, so this is the possible path where they can be.
$PossiblePaths = 'C:\Program Files\Microsoft SQL Server','C:\Program Files (x86)\Microsoft SQL Server'

# Lets check where we have PSProvider.dll and PSSnapins.dll
$PossiblePaths | ForEach-Object {
    Test-Path -Path $_
    {
        $SQLPSProvider = (Get-ChildItem -Filter "Microsoft.SqlServer.Management.PSProvider.dll" -Path $_ -Recurse).FullName
        $SQLPSSnapIn = (Get-ChildItem -Filter "Microsoft.SqlServer.Management.PSSnapins.dll" -Path $_ -Recurse).FullName
    }
}

# Lets find Install Utility to add them with it.
$InstallUtil = (Get-ChildItem -Filter "InstallUtil.exe" -Path "$env:windir\Microsoft.NET\Framework64\v2.0*" -Recurse).FullName

if (($null -eq $SQLPSProvider) -or ($null -eq $SQLPSSnapIn))
{
    Write-Host "Sorry, SQL PowerShell SnapIn or PowerShell Provider not found." -ForegroundColor Red
}
else
{
    # Adding them to our system.
    Start-Process -FilePath $InstallUtil -ArgumentList "-i $SQLPSProvider"
    Start-Process -FilePath $InstallUtil -ArgumentList "-i $SQLPSSnapIn"
}

# Now they should be in the system and we can add them to our PowerShell session.
Add-PSSnapin -Name SqlServerCmdletSnapin100
Add-PSSnapin -Name SqlServerProviderSnapin100

# Now we should have Invoke-Sqlcmd like if we had SQLServer module.
$SQLServer = "SQL2012"
$SQLInstance = "JustForExample"
$ServerInstance = $SQLServer + '\' + $SQLInstance

# So you typing query for example like attaching DB.
$Query = "CREATE DATABASE ExamleDB ON (FILENAME = `'C:\DBs\ExamleDB.mdf`'), (FILENAME = `'C:\DBs\ExamleDB_log.ldf`') FOR ATTACH"

# And then executing it with Invoke-Sqlcmd like that.
Invoke-Sqlcmd -ServerInstance $ServerInstance -Username 'sa' -Password 'Abcde12345' -Query "Query"