PowerShell Refresh Excel без открытия файла Excel (проблема запланированного выполнения пакета с агентом SQL) - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть пакет служб SSIS, который я разработал с «Задачей выполнения процесса» и «Задачей потока данных».У меня проблема с оформлением пакета.

РЕЗУЛЬТАТЫ: (Вручную или по расписанию)

Все процессы успешны при запуске, выполняемом вручную в 32-битном режиме из VS и SSISDB при входе в систему с определенным профилем пользователя 'GEORGES / BL0040EP'.

  1. 'Выполнить задачу процесса' - запустить сценарий powershell для обновлениясоединения Excel и сохраните файл Excel. (УСПЕХ)
  2. «Задача потока данных» - считывает данные Excel и вставляет их в таблицу SQL Server. (УСПЕХ)

Я пытаюсь запустить пакет с SQL Agent (используя учетную запись прокси),и у процесса есть некоторые проблемы.

  1. 'Выполнить задачу процесса' - запустить сценарий powershell для обновления соединений Excel (НЕ РАБОТАЕТ, СООБЩЕНИЙ ОБ ОШИБКАХ) .Сохраните файл Excel (УСПЕХ) .
  2. «Задача потока данных» - считывает данные Excel и вставляет их в таблицу SQL Server. (УСПЕХ)

ПРОБЛЕМА:

powershell script to refresh the Excel file, по-видимому, не выдается серверу SSAS при запускеот SQL Agent.Не «запрос успешно выполнен».Не «запрос проблем с правами доступа».Просто «запрос вообще не выполняется».Проблемы с разрешениями не регистрируются и не обнаруживаются.

Я могу сказать, потому что я запустил SQL Profiler на сервере.Когда агент вызывает пакет, запрос не выполняется.Когда VS / SSISDIB вызывает пакет, я вижу, как выполняется запрос.Оба успешно с профилем пользователя (GEORGES \ bl0040ep);и неудачно с ошибкой прав доступа с неавторизованным профилем пользователя (GEORGES \ bl0040).

ВОПРОС:

Почему агент SQL не запускает запрос?

Я даже добавил к шикарной команде $env:UserName | Out-File -filepath для вывода текстового файла, содержащего имя пользователя.И настройка учетной записи прокси-сервера, кажется, работает в ожидаемом контексте профиля пользователя.Содержимое текстового файла bl0040ep.


Создание учетной записи-посредника

Создание пользователя-посредника для запуска пакета служб SSIS в агенте SQL Server

USE master 
GO

-- Create a proxy credential for xp_cmdshell.
EXEC sp_xp_cmdshell_proxy_account 'GEORGES\bl0040ep', '!myPW!';--SELECT  * FROM [master].[sys].[credentials]

-- Grant execute permission on xp_cmdshell to the SQL Server login account. 
GRANT exec ON sys.xp_cmdshell TO [GEORGES\bl0040ep] 
GO

-- Create a credential containing the GEORGES account PowerGEORGES\PowerUser and its password
CREATE CREDENTIAL Credential_BL0040EP WITH IDENTITY = N'GEORGES\bl0040ep', SECRET = N'!myPW!'
GO

USE [msdb]
GO
-- Create a new proxy called SSISProxy and assign the PowerUser credentail to it
EXEC msdb.dbo.sp_add_proxy @proxy_name=N'Proxy_BL0040EP',@credential_name=N'Credential_BL0040EP',@enabled=1

-- Grant SSISProxy access to the "SSIS package execution" subsystem
EXEC msdb.dbo.sp_grant_proxy_to_subsystem @proxy_name=N'Proxy_BL0040EP', @subsystem_id=11

-- Grant the login testUser the permissions to use SSISProxy
EXEC msdb.dbo.sp_grant_login_to_proxy @login_name = N'GEORGES\bl0040ep', @proxy_name=N'Proxy_BL0040EP'
GO

DatabaseSSAS_UsageStats_xlsx_ExcelRefresh.ps1

enter image description here*1087*

# Refresh the excel workbook connections and save the updated file
$file = 'C:\SVN\BusinessAnalysts\ExcelTools\DatabaseSSAS_UsageStats.xlsx'
$x1 = New-Object -ComObject Excel.Application
$x1.Visible = $false
$x1.DisplayAlerts = $False
$enddate = (Get-Date).tostring("dd-MM-yy")
# $filename = 'C:\SVN\BusinessAnalysts\ExcelTools\DatabaseSSAS_Usage Stats ' + $enddate + '.xlsx'
$filename = 'C:\SVN\BusinessAnalysts\ExcelTools\DatabaseSSAS_UsageStats.xlsx' 
$env:UserName | Out-File -filepath C:\SVN\BusinessAnalysts\ExcelTools\RefreshAll_process.txt
$wb = $x1.workbooks.Open($file)
$wb.refreshall() 

# REM: Use SLEEP to eliminate the message: "This will cancel a pending data refresh. Continue?"
Start-Sleep -Second 20
$wb.SaveAs($filename)
$wb.Close()
$x1.Quit()
Remove-Variable wb,x1

SQL Profiler

Нетактивность перехватывается при запуске пакета из агента SQL.При запуске из VS и SSISDB регистрируется ошибка входа.

SQLProfiler_ (VS / SSIDB-connectionerror_user-bl0040) .png

enter image description here

SQLProfiler_ (SQLAGENT-connection_no-activity) .png

Нет изображения для прикрепления.Просто нет активности для пользователя (bl0040ep), когда пакет запускается в контексте агента SQL.


Ср 02/06/2019 14: 31: 46.96

ОБНОВЛЕНИЕ 1: папка системного рабочего стола

Я добавил папку «Рабочий стол»в System32 запустил задание из агента SQL, и проблема не исчезла.Это было рекомендовано для аналогичной проблемы, о которой сообщалось в TechNet Проблемы с простым сценарием, выполняемым через агент SQL Server ... C:\Windows\System32\config\systemprofile\Desktop и C:\Windows\SysWOW64\config\systemprofile\Desktop.Папка уже существовала в SysWOW64.

ОБНОВЛЕНИЕ 2: исполняемый файл PowerShell в 32-разрядной

Я также попытался напрямую вызвать 32-разрядную версию PowerShell: %SystemRoot%\syswow64\WindowsPowerShell\v1.0\powershell.exe.Тем не менее обновление Excel не завершается при запуске через агент SQL с учетной записью прокси.Ссылка Запуск 32-разрядного сценария Powershell на агенте сервера Sql

ОБНОВЛЕНИЕ 3: Планировщик задач Windows вместо задания агента SQL

Я пробовал другой метод планирования для выполнения пакета (Windows Task Scheduler, вместо SQL Agent).Расписание завершается, но ведет себя точно так же, как и агент SQL ... запрос не отправляется источнику данных.Справочник Дневник Нирава, Расписание пакета служб SSIS без развертывания, задача расписания 2-Windows

1 Ответ

0 голосов
/ 01 марта 2019

Я решил эту проблему, удалив Excel с картинки.Вместо источника Excel я теперь использую соединитель .Net Providers for OleDb\Microsoft OLE DB Provider for Analysis Services 2.0.В базе данных есть пара дополнительных шагов, необходимых для получения того же набора данных (используя SQL Views вместо Excel Powerquery M).

Я проиграл этот бой в Excel ... он не хотел быть автоматизированным.Я все-таки использовал те же ПОЛНОМОЧИЯ и ПРОКСИ для планирования работы.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...