2016-09-26 8 views
0

Мне нужно реализовать решение, в котором мне нужно развернуть проект SSIS (xy.ispac) с одной машины на другую. До сих пор мне удалось скопировать вырезать вставить следующий материал со всего интернета:Как запустить сценарий Powershell на локальном компьютере, но с учетными данными пользователя домена

# Variables 
$ServerName = "target" 
$SSISCatalog = "SSISDB" # sort of constant 
$CatalogPwd = "catalog_password" 

$ProjectFilePath = "D:\Projects_to_depoly\Project_1.ispac" 

$ProjectName = "Project_name" 
$FolderName = "Data_collector" 

# Load the IntegrationServices Assembly 
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Management.IntegrationServices") 

# Store the IntegrationServices Assembly namespace to avoid typing it every time 
$ISNamespace = "Microsoft.SqlServer.Management.IntegrationServices" 

Write-Host "Connecting to server ..." 

# Create a connection to the server 
$sqlConnectionString = "Data Source=$ServerName;Initial Catalog=master;Integrated Security=SSPI;" 
$sqlConnection = New-Object System.Data.SqlClient.SqlConnection $sqlConnectionString 

$integrationServices = New-Object "$ISNamespace.IntegrationServices" $sqlConnection 

$catalog = $integrationServices.Catalogs[$SSISCatalog] 

# Create the Integration Services object if it does not exist 
if (!$catalog) { 
    # Provision a new SSIS Catalog 
    Write-Host "Creating SSIS Catalog ..." 
    $catalog = New-Object "$ISNamespace.Catalog" ($integrationServices, $SSISCatalog, $CatalogPwd) 
    $catalog.Create() 
} 

$folder = $catalog.Folders[$FolderName] 

if (!$folder) 
{ 
    #Create a folder in SSISDB 
    Write-Host "Creating Folder ..." 
    $folder = New-Object "$ISNamespace.CatalogFolder" ($catalog, $FolderName, $FolderName)    
    $folder.Create() 
} 

# Read the project file, and deploy it to the folder 
Write-Host "Deploying Project ..." 
[byte[]] $projectFile = [System.IO.File]::ReadAllBytes($ProjectFilePath) 
$folder.DeployProject($ProjectName, $projectFile) 

Это, казалось, работает на удивление хорошо на разработку машины - пару тест-сервера. Тем не менее, живая среда будет немного отличаться: машина, выполняющая задание развертывания (сервер развертывания или DS с этого момента) и SQL Server (короткая версия), который должен быть развернут, находится в разных доменах, и поскольку SSIS требует Windows, мне нужно будет запустить приведенный выше код локально на DS, но используя учетные данные пользователя в БД.

И это тот момент, когда я терплю неудачу. Единственное, что сработало, это запустить интерфейс командной строки Powershell с помощью runas /netonly /user:thatdomain\anuserthere powershell, ввести пароль и вставить скрипт в него без изменений. Увы, это не вариант, поскольку невозможно передать пароль runas (по крайней мере один раз с/savecred), и интерактивность пользователя в любом случае невозможна (все это должно быть автоматизировано).

Я попытался следующие:

  • Просто unning скрипт на DS, линия $sqlConnection = New-Object System.Data.SqlClient.SqlConnection $sqlConnectionString будет использовать учетные данные из DS, который не распознается БД, и New-Object не имеет -Credential arg, что я мог бы перейти к
  • Ввод всего в Invoke-Command с -Credential требует использования -Computername. Я предполагаю, что можно использовать локальный как «удаленный» (используя в качестве имени Computername), но он все еще жалуется на отказ доступа. Я просматриваю about_Remote_Troubleshooting, пока что без каких-либо успехов.

Любые намеки на то, как преодолеть эту проблему?

+0

Какой шаг не удается? Неудачно ли при подключении удаленной целевой машины ISCatalog или сбои при развертывании проекта? –

+0

Сбой при создании объекта служб интеграции из SQL-соединения: '$ integrationServices = New-Object '$ ISNamespace.IntegrationServices" $ sqlConnection'. – gemisigo

+0

С этого сервера вы можете попробовать выполнить другой экземпляр (Server) каталога SSIS? Похож на проблему с доступом ... –

ответ

0

Решение может заключаться в использовании пользователя sql (с правом доступа) вместо используемого AD. Нечто вроде this должно работать. (Проверьте также ответ, чтобы исправить строку подключения)

+0

Не совсем. Для развертывания пакетов SSIS требуется проверка подлинности Windows. Использование пользователя SQL (вход в систему) здесь невозможно. – gemisigo