Использование Windows PowerShell в шагах агента SQL Server

Область применения: SQL Server Not supported. База данных SQL Azure Azure Synapse Analytics Analytics Platform System (PDW)

Агент SQL Server применяется для запуска скриптов SQL Server PowerShell в запланированное время.

Примечание.

Существует два модуля SQL Server PowerShell — SqlServer и SQLPS.

Самым актуальным модулем PowerShell является модуль SqlServer.

Модуль SQLPS входит в состав установки SQL Server (для обеспечения обратной совместимости), но больше не обновляется.

Модуль SqlServer содержит обновленные версии командлетов в SQLPS и новые командлеты для поддержки последних функций SQL.

Установите модуль SqlServer из коллекции PowerShell.

Подробные сведения см. в статье SQL Server PowerShell.

Начиная с версии SQL Server 2019, вы можете отключить SQLPS. Для этого в первой строке шага задания типа PowerShell можно добавить #NOSQLPS, чтобы Агент SQL не запускал автоматическую загрузку модуля SQLPS. После этого задание Агента SQL запустит установленную на компьютере версию PowerShell, и вы можете использовать любой другой модуль PowerShell.

Если вы хотите использовать модуль SqlServer в шаге задания Агента SQL, можно поместить этот код в первые две строки скрипта.

#NOSQLPS
Import-Module -Name SqlServer

Запуск PowerShell из агента SQL Server

Есть несколько типов шагов заданий агента SQL Server. Каждый тип связан с некоторой подсистемой, в которой реализуется определенная среда, например агент репликации или среда командной строки. Можно создавать скрипты Windows PowerShell, а затем использовать агент SQL Server, чтобы включить скрипты в задания, которые выполняются в запланированное время или в ответ на события агента SQL Server. Скрипты Windows PowerShell можно запускать либо с помощью шагов задания командной строки, либо с помощью шагов задания PowerShell.

  • Используйте шаги задания PowerShell для запуска подсистемой агента SQL Server служебной программы sqlps, запускающей PowerShell и импортирующей модуль sqlps. Если вы используете SQL Server 2019 или более поздней версии, мы рекомендуем использовать модуль SqlServer в шаге задания Агента SQL.

  • Используйте шаг задания командной строки для запуска PowerShell.exe и укажите скрипт, импортирующий модуль sqlps .

Осторожность по поводу потребления памяти

Каждый шаг задания агента SQL Server, запускающий PowerShell с модулем sqlps, запускает процесс, которому требуется приблизительно 20 МБ памяти. Одновременный запуск большого числа шагов задания Windows PowerShell может иметь негативное влияние на производительность.

Создание шага задания PowerShell

Создание шага задания PowerShell

  1. Разверните раздел Агент SQL Server, создайте задание или щелкните правой кнопкой мыши существующее задание и выберите Свойства. Дополнительные сведения о создании заданий см. в разделе Создание заданий.

  2. В диалоговом окне Свойства задания выберите страницу Шаги и щелкните Создать.

  3. В диалоговом окне Новый шаг задания введите имя шагазадания.

  4. В раскрывающемся списке Тип выберите PowerShell.

  5. В списке Выполнять как выберите учетную запись-посредник с учетными данными, используемыми в задании.

  6. В поле Команда введите синтаксис скрипта PowerShell, который будет выполняться в данном шаге. Или щелкните Открыть и выберите файл, содержащий скрипт.

  7. Выберите страницу Дополнительно, чтобы задать следующие параметры шага задания: какие действия будут предприняты в случае успешного или неуспешного выполнения шага задания, сколько раз агенту SQL Server пытаться его выполнить и как нужно часто повторять эти попытки.

Создание шага задания командной строки

Создание шага задания CmdExec

  1. Разверните раздел Агент SQL Server, создайте задание или щелкните правой кнопкой мыши существующее задание и выберите Свойства. Дополнительные сведения о создании заданий см. в разделе Создание заданий.

  2. В диалоговом окне Свойства задания выберите страницу Шаги и щелкните Создать.

  3. В диалоговом окне Новый шаг задания введите имя шагазадания.

  4. В списке Тип выберите Операционная система (CmdExec).

  5. В списке Выполнять как выберите учетную запись-посредник с учетными данными, используемыми в задании. По умолчанию шаги задания CmdExec выполняются под учетной записью службы агента SQL Server.

  6. В поле Код завершения процесса успешной команды введите значение от 0 до 999999.

  7. В поле Команда введите команды, которые начинаются с PowerShell.exe с параметрами, указывающими скрипт PowerShell для запуска. Эти примеры аналогичны синтаксису для выполнения команд PowerShell из командной строки Windows. Все возможные варианты синтаксиса см. можно просмотреть, введя PowerShell.exe -?.

    • Пример 1. Запуск простого командлета.
         PowerShell.exe -Command "Get-Date"
      
    • Пример 2. Выполнение запроса с помощью SQLCmd.exe к текущему серверу (в примере используется замена токена Агента SQL).
         PowerShell.exe -Command "sqlcmd.exe -S $(ESCAPE_NONE(SRVR)) -Q 'SELECT @@VERSION'"
      
    • Пример 3. Запуск скрипта PowerShell (с использованием pwsh.exe, имени исполняемого файла в PowerShell 7.0, который должен быть установлен на сервере). Обратите внимание, что путь к скрипту является локальным для сервера, на котором работает Агент SQL.
         PWSH.exe -ExecutionPolicy RemoteSigned -File X:\MyScripts\script001.ps1 
      
  8. Откройте страницу Дополнительно, чтобы задать следующие параметры шага задания: какие действия будут предприняты в случае успешного или неуспешного выполнения шага задания, сколько раз агенту SQL Server пытаться его выполнить и в какой файл агент SQL Server может записывать результат выполнения шага задания. Только члены предопределенной роли сервера sysadmin могут записывать выходные данные шага задания в файл операционной системы.

См. также