Hi,
I have 2 media pool (weekly, monthly) and one backup to tape job. The job run every saturday.
I want use the media pool monthly the last saturday of the month and the media pool weekly for the other saturday.
I have try several command without success.
How can I create a script that will look if it is the last saturday of the month, select the good media pool and start the job ?
Thanks,
-
- Novice
- Posts: 3
- Liked: never
- Joined: Sep 12, 2013 4:48 am
- Full Name: Olivier VILLEGENTE
- Contact:
-
- Product Manager
- Posts: 20400
- Liked: 2298 times
- Joined: Oct 26, 2012 3:28 pm
- Full Name: Vladimir Eremin
- Contact:
Re: Change Media Pool using powershell
Hi, Olivier,
At the moment, it's not possible to change settings of tape jobs via PowerShell. Though, we're working on it.
As to your scenario, you would need to have two different media pools (weekly, monthly) and two different tape jobs pointed to them in accordance (1st -> weekly; 2nd -> monthly). Being scheduled via Windows Scheduler to run on every Saturdays, the script will check whether the given Saturday is the last Saturday of the month and execute appropriate tape job (weekly or monthly one).
You can use custom function that finds the last X day of the month. The script should be similar to the following:
Thanks.
At the moment, it's not possible to change settings of tape jobs via PowerShell. Though, we're working on it.
As to your scenario, you would need to have two different media pools (weekly, monthly) and two different tape jobs pointed to them in accordance (1st -> weekly; 2nd -> monthly). Being scheduled via Windows Scheduler to run on every Saturdays, the script will check whether the given Saturday is the last Saturday of the month and execute appropriate tape job (weekly or monthly one).
You can use custom function that finds the last X day of the month. The script should be similar to the following:
Code: Select all
Function Get-LastxOfMonth {
[CmdletBinding()]
param(
[parameter(Mandatory)]
[String]$Day,
[parameter(ParameterSetName='ByDate',Mandatory,ValueFromPipeline)]
[System.DateTime]$Date,
[parameter(ParameterSetName='ByString',Mandatory,ValueFromPipelineByPropertyName)]
[ValidateRange(1,12)]
[int]$Month,
[parameter(ParameterSetName='ByString',Mandatory,ValueFromPipelineByPropertyName)]
[ValidatePattern('^\d{4}$')]
[int]$Year,
[switch]$asDate=$false
)
Begin {
$alldays = @()
}
Process {
# Validate the Day string passed as parameter by casting it into
if (-not([System.DayOfWeek]::$Day -in 0..6)) {
Write-Warning -Message 'Invalid string submitted as Day parameter'
return
}
Switch ($PSCmdlet.ParameterSetName)
{
ByString {
# Do nothing, variables are already defined and validated
}
ByDate {
$Month = $Date.Month
$Year = $Date.Year
}
}
# There aren't 32 days in any month so we make sure we iterate through all days in a month
0..31 | ForEach-Object -Process {
$evaldate = (Get-Date -Year $Year -Month $Month -Day 1).AddDays($_)
if ($evaldate.Month -eq $Month)
{
if ($evaldate.DayOfWeek -eq $Day) {
$alldays += $evaldate.Day
}
}
}
# Output
if ($asDate) {
Get-Date -Year $Year -Month $Month -Day $alldays[-1]
} else {
$alldays[-1]
}
}
End {}
}
$Job1 = Get-VBRTapeJob -name "Name of first tape Job"
$Job2 = Get-VBRTapeJob -name "Name of second tape Job"
$Date = Get-Date
$LastSaturday = Get-LastxOfMonth -Day Saturday -Month $Date.Month -Year $Date.Year
if ($Date.Day -eq $LastSaturday)
{
Start-VBRJob -Job $Job2
}
Else {Start-VBRJob -Job $Job1
}
Who is online
Users browsing this forum: No registered users and 10 guests