Выполнение пакетов в SSIS при помощи T-SQL

Начиная с SQL Server 2012 структура проектов SSIS претерпела существенные изменения, путем перехода от модели управления единичными пакетами (package deployment model) к модели управления проектами (project deployment model). Последний подход упрощает и унифицирует разработку, позволяя группировать логически связанные пакеты в проекты и управлять ими как общей единицей. При развертывании проекта на сервер, все его компоненты размещаются в общей базе данных SSISDB.

Сегодняшняя статья будет посвящена процессу выполнения пакетов, развернутых в SSIS при помощи project deployment model.

В SSIS, начиная с 2012 версии обновился компонент Execute package task. Для запуска пакета, находящихся в одном проекте можно воспользоваться данным компонентом с опцией Project Reference. В выпадающем списке PackageNameFromProjectReference отобразятся все пакеты текущего проекта. Перейдя на вкладку Parameter Bindings можно задать значения переменных запускаемого пакета. Особых комментариев по работе данного компонента не требуется, за исключением одного. Данные компонент не позволяет выполнить пакет из другого проекта.

Добавление пользователей в группы Sharepoint

$siteUrl = "http://siteUrl"
$siteCollUrl = "http://siteUrl/Reports"
$web = Get-SpWeb -site $siteUrl | Where-Object {$_.Url -eq $siteCollUrl}

$users = Invoke-SQL -sqlCommand  "exec dbo.GetUserRightsForSP"
foreach ($user in $users.Rows)
{
    
    $userSp = Get-SpUser -Identity $user["SpUser"] -Web $web
    Set-SPUser -Identity $userSp -Web $web -Group $user["Group"]
}

Добавление пользователей в локальные группы при помощи PowerShell

В данной статье будет рассмотрен способ добавления пользователей в определенные для них группы, информация по которым будет браться из базы данных.
Следующий командлет PowerShell добавляет пользователя AD в заданную локальную группу пользователей:

function Add-LocalUser{
     Param(
        $computer   = $env:computername,
        $group      = "GroupName",
        $userdomain = $env:userdomain,
        $username   = $env:username
    )
        ([ADSI]"WinNT://$computer/$group,group").psbase.Invoke("Add",([ADSI]"WinNT://$userdomain/$username").path)
}
Следующий командлет выполняет SQL-запрос на заданной базе данных MS SQL Server и возвращает табличный результат.

function Invoke-SQL {
    param(
        [string] $dataSource = "ServerName",
        [string] $database   = "DbName",
        [string] $sqlCommand = "select [User], [Domain], [Group] from dbo.vUserRights"
      )

    $connectionString = "Data Source=$dataSource; " +
            "Integrated Security=SSPI; " +
            "Initial Catalog=$database"

    $connection = new-object system.data.SqlClient.SQLConnection($connectionString)
    $command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$connection)
    $connection.Open()

    $adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
    $dataset = New-Object System.Data.DataSet
    $adapter.Fill($dataSet) | Out-Null

    $connection.Close()
    $dataSet.Tables
}
Получаем из базы данных таблицу принадлежности пользователей к группам и добавляем каждого пользователя в определенную для него локальную группу на данной машине.

$users = Invoke-SQL -sqlCommand  "select [User], [Domain], [Group] from dbo.vUserRights";
foreach ($user in $users.Rows)
{
    Add-LocalUser -group $user["Group"] -username $user["User"] -userdomain $user["Domain"] 
}