Мне нужно реализовать решение, в котором мне нужно развернуть проект 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, пока что без каких-либо успехов.
Любые намеки на то, как преодолеть эту проблему?
Какой шаг не удается? Неудачно ли при подключении удаленной целевой машины ISCatalog или сбои при развертывании проекта? –
Сбой при создании объекта служб интеграции из SQL-соединения: '$ integrationServices = New-Object '$ ISNamespace.IntegrationServices" $ sqlConnection'. – gemisigo
С этого сервера вы можете попробовать выполнить другой экземпляр (Server) каталога SSIS? Похож на проблему с доступом ... –