0

PowerShell’de geliştirilen script’ler SQL Server Agent içerisinde execute edilebilmektedir. SQL Server Agent bir PowerShell script’ini çalıştırmak istediğinde powershell.exe yerine sqlps.exe ‘yi kullanır. SQL Server Agent, sqlps.exe ile kullanıldığında PowerShell ekranında almadığınız bazı syntax hataları karşınıza çıkabilir.

 

 

 

 

 

 

Örneğin script’iniz içerisinde Get-Date kullanımı veya $() tanımlamanız varsa SQL Server Agent script’inizi syntax hatasından dolayı çalıştırmayacaktır. Bunun için operating system level’ında script’lerin çalıştırılması tercih edilmelidir. Eğer çok uzun bir script yazdıysak bunu powershell.exe ile test edip SQL Server Agent ile denediğimizde hata alıyorsak baştan düzenlemek yerine powershell.exe üzerinden çalıştırabiliriz. Script’in powershell.exe üzerinden çalıştırılması için Job Step ekranında Type kısmından Operating system (CmdExec) ‘i seçmemiz gerekmektedir.

 

 

 

 

Command ekranında ise oluşturmuş olduğumuz script’imizi aynı Command Prompt’tan çağırır gibi çağırmamız yetecektir.

powershell "C:\PowerShellScripts\KillAllProcesses.ps1"

 

Örnek olarak T-SQL ile PowerShell code’unun PowerShell module’ü kullanılarak SQL Server Agent üzerinde oluşturulması aşağıdaki gibidir.

USE [msdb];
GO

EXEC sp_add_job
    @job_name = N'Kill Processes' ;
GO

EXEC sp_add_schedule
    @schedule_name = N'Kill Processes Schedule',
    @freq_type = 1,
    @active_start_time = 233000 ;
GO

EXEC sp_attach_schedule
   @job_name = N'Kill Processes',
   @schedule_name = N'Kill Processes Schedule' ;
GO

EXEC sp_add_jobstep
    @job_name = N'Kill Processes',
    @step_name = N'Kills all processes that use more than 1000 MB of memory',
    @subsystem = N'PowerShell',
    @command = N'Get-Process | Where-Object { $_.WS -gt 1000MB } | Stop-Process', 
    @retry_attempts = 5,
    @retry_interval = 5 ;
GO

 

Leave a Reply