Published on

November 10, 2020

Запуск PowerShell из SQL Agent

В одной из моих предыдущих статей я рассказывал о том, как вызывать сценарии PowerShell с параметрами из заданий SQL Agent. Однако я не исследовал много возможностей вызова PowerShell из самого задания SQL Agent. В этой статье мы рассмотрим среду PoSh внутри SQL Agent и изучим лучшие практики запуска кода PowerShell с параметрами.

Понимание среды

При работе с SQL Agent и PowerShell важно понимать настройку среды. При создании задания и добавлении шага у вас есть возможность выбрать тип задания. В данном случае мы начнем с PowerShell. Однако стоит отметить, что в этой среде есть ограничения. Чтобы определить версию PowerShell и доступные модули, вы можете настроить шаг задания с помощью следующего кода:

$PSVersionTable | Out-File 'c:\sqlagent\psver.txt'
Get-InstalledModule | Out-File 'c:\sqlagent\modules.txt'

Выполнение этого кода предоставит вам версию PowerShell и установленные модули. Эта информация будет полезна для дальнейшей разработки.

Выполнение сценария

По умолчанию выполнение сценария ограничено при запуске PowerShell на компьютере. Чтобы проверить, применяются ли те же ограничения к SQL Agent, вы можете добавить шаг в свою задачу с помощью следующего кода:

Get-ExecutionPolicy | Out-File 'c:\SQLAgent\policy.txt'

Этот код вернет политику выполнения, которая даст вам представление о том, что вы можете делать в среде SQL Agent.

При выполнении сценария рекомендуется явно вызывать исполняемый файл PowerShell. Это гарантирует, что будет загружен правильный профиль, и вы сможете предсказать поведение сценария. Если вам нужно изменить или установить профиль, вы можете обратиться к статье, опубликованной на SimpleTalk, для получения дополнительной информации.

Добавление параметров

Есть несколько способов управления параметрами для вашего сценария. Один из вариантов – хранить параметры в SQL Server и запрашивать значения для использования в сценарии. Например, вы можете создать таблицу в SQL Server для хранения значений параметров, а затем запросить эту таблицу внутри вашего сценария. Вот пример того, как вы можете настроить это:

CREATE DATABASE AdminDB
GO
USE AdminDB
GO
CREATE TABLE agentparameters (
    ValueID INT IDENTITY(1,1),
    AgentJob VARCHAR(100),
    VarName VARCHAR(20),
    VarValue VARCHAR(100)
)
GO
INSERT dbo.agentparameters (AgentJob, VarName, VarValue)
VALUES ('getproductdetails', 'productid', '729'),
       ('getproductdetails', 'checkdate', '2010-05-26')
SELECT a.VarName, a.VarValue 
FROM dbo.agentparameters AS a 
WHERE a.AgentJob = 'getproductdetails'

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

$Server = "localhost"
$Database = "AdminDB"
$productid = Invoke-Sqlcmd -ServerInstance $Server -Database $Database -Query "SELECT a.VarName, a.VarValue FROM dbo.agentparameters AS a WHERE a.AgentJob = 'getproductdetails' and varname='productid'"
$checkdate = Invoke-Sqlcmd -ServerInstance $Server -Database $Database -Query "SELECT a.VarName, a.VarValue FROM dbo.agentparameters AS a WHERE a.AgentJob = 'getproductdetails' and varname='checkdate'"

Получая значения параметров из SQL Server, вы можете легко управлять и обновлять их без изменения самого сценария.

Другой вариант – использовать текстовый файл для хранения параметров на сервере. Это позволяет легко редактировать и управлять администраторам. Вот пример того, как вы можете реализовать это:

$file = 'E:\Documents\poshvars.txt'
Get-Content $file | ForEach-Object {
    $var = $_.Split('=')
    New-Variable -Name $var[0] -Value $var[1]
}

В этом примере значения параметров хранятся в текстовом файле. Сценарий читает файл, разделяет строки на переменные и создает новые переменные на основе значений. Этот подход обеспечивает гибкость и удобство управления.

Итог

В этой статье мы рассмотрели, как запускать сценарии PowerShell из SQL Agent и понимать среду, в которой будут выполняться сценарии. Используя команду powershell.exe и понимая доступные модули и политики выполнения, вы можете обеспечить успешное выполнение ваших сценариев. Кроме того, мы обсудили различные подходы к управлению параметрами, включая их хранение в SQL Server или использование текстового файла. Эти техники обеспечивают гибкость и удобство обслуживания ваших сценариев PowerShell в заданиях SQL Agent.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.