Featured image of post Altering a Job Step on Hundreds of SQL Servers with PowerShell

Altering a Job Step on Hundreds of SQL Servers with PowerShell

I flew to Utrecht last week to present with Chrissy LeMaire and Sander Stad for the joint Dutch SQL and PowerShell User Groups. Whilst I was sat at the airport I got a phone call from my current client.

Them - We need to change the backup path for all of the servers to a different share, how long will it take you?

Me - About 5 minutes

(PowerShell is very powerful – be careful when following these examples 😉 )

This code was run using PowerShell version 5 and will not work on Powershell version 3 or lower as it uses the where method. Lets grab all of our jobs on the estate. (You will need to fill the $Servers variable with the names of your instances, maybe from a database or CMS or a text file)$Jobs = Get-SQLAgentJob -ServerInstance $Servers Once we have the jobs we need to iterate only through the ones we need to. This step could also have been done in the line above. Lets assume we are using the Ola Hallengren Solution to backup our estateForeach($job in $Jobs.Where{$.Name -like ‘DatabaseBackup’ -and $.isenabled -eq $true}) Then because I have to target a specific job step I can iterate through those and filter in the same wayforeach ($Step in $Job.jobsteps.Where{$_.Name -like ‘DatabaseBackup’}) Now all I need to do is to replace C:\Backup with C:\MSSQL\Backup (in this example I am using my labs backup paths)$Step.Command = $Step.Command.Replace(“Directory = N’C:\Backup’”,“Directory = N’C:\MSSQL\Backup’”) And then call the Alter method$Step.Alter() And that is all there is to it. Here is the full script I used$Jobs = Get-SQLAgentJob -ServerInstance $Servers

Foreach($job in $Jobs.Where{$.Name -like ‘DatabaseBackup’ -and $.isenabled -eq $true}) { foreach ($Step in $Job.jobsteps.Where{$_.Name -like ‘DatabaseBackup’}) { $Step.Command = $Step.Command.Replace(“Directory = N’C:\Backup’”,“Directory = N’C:\MSSQL\Backup’”) $Step.Alter() } } In only a few minutes I had altered several hundred instances worth of Ola Hallengren Jobs 🙂 This is one of the many reasons I love PowerShell, it enables me to perform mass changes very quickly and easily. Of course, you need to make sure that you know that what you are changing is what you want to change. I have caused severe issues by altering the SQL alerts frequency to 1 second instead of one hour on an estate!! Although the beauty of PowerShell meant that I was able to change it very quickly once the problem was realisedYou can change a lot of settings. If you look at what is available at a job step levelHappy Automating

Built with Hugo
Theme Stack designed by Jimmy