Bulk job modification

PowerShell script exchange

Bulk job modification

Veeam Logoby alex.nunley » Mon Jan 28, 2013 7:46 pm

I am trying to modify a bunch of settings, mostly related to scheduling, on all jobs in BR 6.5. I have the following code, scraped together. It fails, saying the setting either doesnt exist or is not settable. I am not sure what to do, and am tearing my hair out. Ideas? Better methodologies?

Code: Select all
Add-PSSnapin -Name VeeamPSSnapIn -ErrorAction SilentlyContinue

foreach($job in (Get-VBRJob | Sort Name)){

}

$JobName = Get-VBRJob  | where {$_.Name -eq $JobName}
$EnableJobAdd = "True" #True/False
$RetrySpecifiedAdd = "True" #True/False
$RetryTimesAdd = "3"
$RetryTimeoutAdd = "15"
$schedulemode = "Daily" #Daily/Monthly/Periodically/Continuous
$OptionsDailyAddKind = "Everyday" #Everyday/SelectedDays/WeekDays
$OptionsDailyAddDays = "Monday" , "Tuesday" , "Wednesday" , "Thursday" , "Friday"
#create a random time#
$Hours = (16,17,18,19,20,21,22,23,'00','01','02','03','04') | Get-Random | Out-String
      $Minutes = "{0:D2}" -f (Get-Random -Minimum 0 -Maximum 59) | Out-String
      $Time = ($Hours+':'+$Minutes+':00').replace("`n","")
$OptionsDailyAddTime = $Time #Attention: If you set a new time. The "Next run" column in the jobview will be updated after the next job run.

$JobnameObject = Get-VBRJob | Where {$_.Name -eq $JobName}
$JobnameObjectSchedule = $JobnameObject | Get-VBRjobscheduleoptions
If ($RetrySpecifiedAdd -eq "True"){
$JobnameObjectSchedule.RetrySpecified = $true
} ELSE {
$JobnameObjectSchedule.RetrySpecified = $false
}
$JobnameObjectSchedule.RetryTimes = $RetryTimesAdd 
$JobnameObjectSchedule.RetryTimeout = $RetryTimeoutAdd
If ($schedulemode -eq "Daily"){
$JobnameObjectSchedule.OptionsDaily.Enabled = $true
$JobnameObjectSchedule.OptionsMonthly.Enabled = $false
$JobnameObjectSchedule.OptionsPeriodically.Enabled = $false
$JobnameObjectSchedule.OptionsContinuous.Enabled = $false
} ELSE {
If ($schedulemode -eq "Monthly"){
$JobnameObjectSchedule.OptionsDaily.Enabled = $false
$JobnameObjectSchedule.OptionsMonthly.Enabled = $true
$JobnameObjectSchedule.OptionsPeriodically.Enabled = $false
$JobnameObjectSchedule.OptionsContinuous.Enabled = $false
} ELSE {
If ($schedulemode -eq "Periodically"){
$JobnameObjectSchedule.OptionsDaily.Enabled = $false
$JobnameObjectSchedule.OptionsMonthly.Enabled = $false
$JobnameObjectSchedule.OptionsPeriodically.Enabled = $true
$JobnameObjectSchedule.OptionsContinuous.Enabled = $false
} ELSE {
If ($schedulemode -eq "Continuous"){
$JobnameObjectSchedule.OptionsDaily.Enabled = $false
$JobnameObjectSchedule.OptionsMonthly.Enabled = $false
$JobnameObjectSchedule.OptionsPeriodically.Enabled = $false
$JobnameObjectSchedule.OptionsContinuous.Enabled = $true
} ELSE {
write-host "Error: Schedulemode entry not correct"
}}}}

$JobnameObjectSchedule.OptionsDaily.Kind = $OptionsDailyAddKind
$JobnameObjectSchedule.OptionsDaily.Days = $OptionsDailyAddDays
$JobnameObjectSchedule.OptionsDaily.Time = $OptionsDailyAddTime
$JobnameObjectSchedule.NextRun = $OptionsDailyAddTime
$JobnameObjectSchedule.StartDateTime = $OptionsDailyAddTime

Set-VBRJobScheduleOptions -Job $JobnameObject -Options $JobnameObjectSchedule


$JobnameObject = Get-VBRJob | Where {$_.Name -eq $JobName}

If ($EnableJobAdd -eq "True"){
$JobnameObject.options.JobOptions.RunManually = $false
$JobnameObject.EnableScheduler()
} ELSE {
$JobnameObject.options.JobOptions.RunManually = $true
$JobnameObject.DisableScheduler()
}


And here is the error i'm seeting

Code: Select all
PS C:\temp> .\scheduletest.ps1
Property 'RetrySpecified' cannot be found on this object; make sure it exists
and is settable.
At C:\temp\scheduletest.ps1:24 char:1
+ $JobnameObjectSchedule.RetrySpecified = $true
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound

Property 'RetryTimes' cannot be found on this object; make sure it exists and
is settable.
At C:\temp\scheduletest.ps1:28 char:1
+ $JobnameObjectSchedule.RetryTimes = $RetryTimesAdd
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound

Property 'RetryTimeout' cannot be found on this object; make sure it exists
and is settable.
At C:\temp\scheduletest.ps1:29 char:1
+ $JobnameObjectSchedule.RetryTimeout = $RetryTimeoutAdd
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound

Property 'Enabled' cannot be found on this object; make sure it exists and is
settable.
At C:\temp\scheduletest.ps1:43 char:1
+ $JobnameObjectSchedule.OptionsDaily.Enabled = $false
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound

Property 'Enabled' cannot be found on this object; make sure it exists and is
settable.
At C:\temp\scheduletest.ps1:44 char:1
+ $JobnameObjectSchedule.OptionsMonthly.Enabled = $false
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound

Property 'Enabled' cannot be found on this object; make sure it exists and is
settable.
At C:\temp\scheduletest.ps1:45 char:1
+ $JobnameObjectSchedule.OptionsPeriodically.Enabled = $true
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound

Property 'Enabled' cannot be found on this object; make sure it exists and is
settable.
At C:\temp\scheduletest.ps1:46 char:1
+ $JobnameObjectSchedule.OptionsContinuous.Enabled = $false
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound

Property 'Kind' cannot be found on this object; make sure it exists and is
settable.
At C:\temp\scheduletest.ps1:57 char:1
+ $JobnameObjectSchedule.OptionsDaily.Kind = $OptionsDailyAddKind
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound

Property 'Days' cannot be found on this object; make sure it exists and is
settable.
At C:\temp\scheduletest.ps1:58 char:1
+ $JobnameObjectSchedule.OptionsDaily.Days = $OptionsDailyAddDays
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound

Property 'Time' cannot be found on this object; make sure it exists and is
settable.
At C:\temp\scheduletest.ps1:59 char:1
+ $JobnameObjectSchedule.OptionsDaily.Time = $OptionsDailyAddTime
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound

Property 'NextRun' cannot be found on this object; make sure it exists and is
settable.
At C:\temp\scheduletest.ps1:60 char:1
+ $JobnameObjectSchedule.NextRun = $OptionsDailyAddTime
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound

Property 'StartDateTime' cannot be found on this object; make sure it exists
and is settable.
At C:\temp\scheduletest.ps1:61 char:1
+ $JobnameObjectSchedule.StartDateTime = $OptionsDailyAddTime
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound

Set-VBRJobScheduleOptions : Cannot validate argument on parameter 'Job'. The
argument is null or empty. Supply an argument that is not null or empty and
then try the command again.
At C:\temp\scheduletest.ps1:63 char:32
+ Set-VBRJobScheduleOptions -Job $JobnameObject -Options $JobnameObjectSchedule
+                                ~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Set-VBRJobScheduleOptions], Pa
   rameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Veeam.Backup.Po
   werShell.Command.SetVBRJobScheduleOptions

Property 'RunManually' cannot be found on this object; make sure it exists and
is settable.
At C:\temp\scheduletest.ps1:69 char:1
+ $JobnameObject.options.JobOptions.RunManually = $false
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound

You cannot call a method on a null-valued expression.
At C:\temp\scheduletest.ps1:70 char:1
+ $JobnameObject.EnableScheduler()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

PS C:\temp>
alex.nunley
Influencer
 
Posts: 19
Liked: never
Joined: Fri Jan 18, 2013 3:36 pm
Full Name: Alex Nunley

Re: Bulk job modification

Veeam Logoby alex.nunley » Mon Jan 28, 2013 8:36 pm

And to be clear, the settings are available, and settable, as they currently have content, such as .RetrySpecified.
alex.nunley
Influencer
 
Posts: 19
Liked: never
Joined: Fri Jan 18, 2013 3:36 pm
Full Name: Alex Nunley

Re: Bulk job modification

Veeam Logoby v.Eremin » Mon Jan 28, 2013 8:58 pm 1 person likes this post

Though I don’t have a console right in the moment, I’d definitely start investigating with the following line, as It doesn’t make any sense at all. :

Code: Select all
$JobName = Get-VBRJob  | where {$_.Name -eq $JobName}

According to your code, $Jobname variable hasn’t been specified up to that moment, and you’re literally trying to find a job which name coincides with an unspecified variable; there is no doubt that after this step $Jobname will have nothing as its content, or, most likely, something like zero value.

As a result you see errors regarding corresponding methods that cannot be found on this object (0/unspecified variable).

You can check it by simply putting $Jobname after the abovementioned line, and see what kind of value it has:
Code: Select all
$JobName = Get-VBRJob  | where {$_.Name -eq $JobName}
$JobName


Hope this helps.
Thanks.
v.Eremin
Veeam Software
 
Posts: 13255
Liked: 968 times
Joined: Fri Oct 26, 2012 3:28 pm
Full Name: Vladimir Eremin

Re: Bulk job modification

Veeam Logoby Sethbartlett » Mon Jan 28, 2013 9:40 pm 1 person likes this post

I agree, your $JobName just needs to be the name of the job, you already have $JobnameObject.

So Change to something like :

Code: Select all
$JobName = "MyJob"


the rest should work because $JobNameObject is referenced from $JobName
Skype: Sethbartlett88 - Make sure to label who you are and why you want to add me ;)
Twitter: @sethbartlett
If my post was helpful, please like it. Sometimes twitter is quicker to hit me up if you need me.
Sethbartlett
Expert
 
Posts: 282
Liked: 25 times
Joined: Wed Nov 10, 2010 6:51 pm
Full Name: Seth Bartlett

Re: Bulk job modification

Veeam Logoby alex.nunley » Tue Jan 29, 2013 3:10 pm

Thanks! that was definitely the bulk of it. ..

now i have to find some missing terminator...
alex.nunley
Influencer
 
Posts: 19
Liked: never
Joined: Fri Jan 18, 2013 3:36 pm
Full Name: Alex Nunley

Re: Bulk job modification

Veeam Logoby Sethbartlett » Tue Jan 29, 2013 5:02 pm 1 person likes this post

All I did was pretty up your code and fix your if/else stuff, it should have been using elseif instead. This will fix your broken terminator issue. Also your initial "Foreach" loop doesn't do anything.

Code: Select all
Add-PSSnapin -Name VeeamPSSnapIn -ErrorAction SilentlyContinue

foreach($job in (Get-VBRJob | Sort Name)){

}

$JobName = Get-VBRJob  | where {$_.Name -eq $JobName}
$EnableJobAdd = "True" #True/False
$RetrySpecifiedAdd = "True" #True/False
$RetryTimesAdd = "3"
$RetryTimeoutAdd = "15"
$schedulemode = "Daily" #Daily/Monthly/Periodically/Continuous
$OptionsDailyAddKind = "Everyday" #Everyday/SelectedDays/WeekDays
$OptionsDailyAddDays = "Monday" , "Tuesday" , "Wednesday" , "Thursday" , "Friday"
#create a random time#
$Hours = (16,17,18,19,20,21,22,23,'00','01','02','03','04') | Get-Random | Out-String
      $Minutes = "{0:D2}" -f (Get-Random -Minimum 0 -Maximum 59) | Out-String
      $Time = ($Hours+':'+$Minutes+':00').replace("`n","")
$OptionsDailyAddTime = $Time #Attention: If you set a new time. The "Next run" column in the jobview will be updated after the next job run.

$JobnameObject = Get-VBRJob | Where {$_.Name -eq $JobName}
$JobnameObjectSchedule = $JobnameObject | Get-VBRjobscheduleoptions
$JobnameObjectSchedule.RetryTimes = $RetryTimesAdd 
$JobnameObjectSchedule.RetryTimeout = $RetryTimeoutAdd

If ($RetrySpecifiedAdd -eq "True")
{
   $JobnameObjectSchedule.RetrySpecified = $true
}
Else
{
   $JobnameObjectSchedule.RetrySpecified = $false
}

If ($schedulemode -eq "Daily")
{
$JobnameObjectSchedule.OptionsDaily.Enabled = $true
$JobnameObjectSchedule.OptionsMonthly.Enabled = $false
$JobnameObjectSchedule.OptionsPeriodically.Enabled = $false
$JobnameObjectSchedule.OptionsContinuous.Enabled = $false
}
ElseIf($schedulemode -eq "Monthly")
{
   $JobnameObjectSchedule.OptionsDaily.Enabled = $false
   $JobnameObjectSchedule.OptionsMonthly.Enabled = $true
   $JobnameObjectSchedule.OptionsPeriodically.Enabled = $false
   $JobnameObjectSchedule.OptionsContinuous.Enabled = $false
}
ElseIf($schedulemode -eq "Periodically")
{
   $JobnameObjectSchedule.OptionsDaily.Enabled = $false
   $JobnameObjectSchedule.OptionsMonthly.Enabled = $false
   $JobnameObjectSchedule.OptionsPeriodically.Enabled = $true
   $JobnameObjectSchedule.OptionsContinuous.Enabled = $false
}
ElseIf($schedulemode -eq "Continuous")
{
   $JobnameObjectSchedule.OptionsDaily.Enabled = $false
   $JobnameObjectSchedule.OptionsMonthly.Enabled = $false
   $JobnameObjectSchedule.OptionsPeriodically.Enabled = $false
   $JobnameObjectSchedule.OptionsContinuous.Enabled = $true
}
Else {write-host "Error: Schedulemode entry not correct"}

$JobnameObjectSchedule.OptionsDaily.Kind = $OptionsDailyAddKind
$JobnameObjectSchedule.OptionsDaily.Days = $OptionsDailyAddDays
$JobnameObjectSchedule.OptionsDaily.Time = $OptionsDailyAddTime
$JobnameObjectSchedule.NextRun = $OptionsDailyAddTime
$JobnameObjectSchedule.StartDateTime = $OptionsDailyAddTime

Set-VBRJobScheduleOptions -Job $JobnameObject -Options $JobnameObjectSchedule


$JobnameObject = Get-VBRJob | Where {$_.Name -eq $JobName}

If ($EnableJobAdd -eq "True")
{
   $JobnameObject.options.JobOptions.RunManually = $false
   $JobnameObject.EnableScheduler()
}
Else
{
   $JobnameObject.options.JobOptions.RunManually = $true
   $JobnameObject.DisableScheduler()
}
Skype: Sethbartlett88 - Make sure to label who you are and why you want to add me ;)
Twitter: @sethbartlett
If my post was helpful, please like it. Sometimes twitter is quicker to hit me up if you need me.
Sethbartlett
Expert
 
Posts: 282
Liked: 25 times
Joined: Wed Nov 10, 2010 6:51 pm
Full Name: Seth Bartlett


Return to PowerShell



Who is online

Users browsing this forum: Exabot [Bot], Yahoo [Bot] and 8 guests