Sql Server SMO ApplyToTargetServer

I’m trying to add a server to the list of Target servers in an Agent job that already exists.

Having read MS articles, such as: https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2012/ms201633%28v%3dsql.110%2

I’ve been trying to do it like this:

$JobServer = "maintsqlserver"
$SqlServer = "targetsqlserver"
$Job = "MAINT - Archive Sent Mail & Attachments"

$srv = new-object Microsoft.SqlServer.Management.Smo.Server($JobServer)
$job = new-object Microsoft.SqlServer.Management.Smo.Agent.Job($srv.JobServer, $Job)
$job.ApplyToTargetServer($TargetServer)

But get error:

Exception calling "ApplyToTargetServer" with "1" argument(s): "Apply to target server failed for Job 'MAINT - Archive Sent Mail & Attachments'. "

 

Where am I going wrong?

$TargetServer is not a defined variable in the script you posted. Is it supposed to be $SqlServer?

$job.ApplyToTargetServer($TargetServer)

That’s typo, sorry, full correct script is below, and I forgot to add in that it does add the target to the list in the job but throws that error…

$JobServer = "maintsqlserver"
$SqlServer = "targetsqlserver"

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null

# Get List of Multiserver jobs
$srv = New-Object("Microsoft.SqlServer.Management.Smo.Server") $JobServer
$MultiServerJobs = $srv.JobServer.Jobs | ?{$_.Category -Match "Multi-Server"}
foreach($Job in $MultiServerJobs) {
$srv = new-object Microsoft.SqlServer.Management.Smo.Server($JobServer)
$SQLJob = new-object Microsoft.SqlServer.Management.Smo.Agent.Job($srv.JobServer, $Job)
$SQLJob.ApplyToTargetServer($SqlServer)
}