I needed to schedule a group of URLs into Maintenance Mode.  I already created a script to schedule one URL but setting up 30 would be a pain to manage.  So I created a new script to schedule a group of URLs.


URLGroupMM.zip

Usage: 
C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe C:\URLGroupMM.ps1 -rootMS scomrms1 -group ‘AU 3AM Website Reboot Group’ -minutes 120 -comment ‘3AM AU Websites Reboot’ -reason ‘PlannedOther’


param($rootMS,$groupName,$minutes,$comment,$reason)

 

Add-PSSnapin “Microsoft.EnterpriseManagement.OperationsManager.Client” -ErrorVariable errSnapin;

Set-Location “OperationsManagerMonitoring::” -ErrorVariable errSnapin;

new-managementGroupConnection -ConnectionString:$rootMS -ErrorVariable errSnapin;

set-location $rootMS -ErrorVariable errSnapin;

 

$groupObject = get-monitoringobject | where {$_.DisplayName -eq $groupName};

$groupagents = $groupObject.getrelatedmonitoringobjects()

 

foreach ($agent in $groupAgents)

 

{

 

$URLStuff = $agent.displayname

 

$URLStuff

 

 

$URLWatcher = (Get-MonitoringClass -name Microsoft.SystemCenter.WebApplication.Perspective) | Get-MonitoringObject | where {$_.DisplayName -eq $URLStuff}

$startTime = [System.DateTime]::Now

$endTime = $startTime.AddMinutes($minutes)

 

 

“Putting URL into maintenance mode”

New-MaintenanceWindow -startTime:$startTime -endTime:$endTime -monitoringObject:$URLWatcher -comment:$comment -Reason:$reason

 

}

Categories:

Tags:

9 Responses

  1. Hi Tim,
    thank you for sharing this.
    There is a mistake at the code:
    $groupObject = get-monitoringobject | where {$_.DisplayName -eq “AU 3AM Website Reboot Group”};
    The group name should be replaced with the variable “$groupName”

    Regards

    Matthias

  2. MatthiasR

    Good eyes. I put that in there to test it and forgot to change it back. I have fixed the zip and the post.

    Thanks,

    Tim

  3. I tried this URL group maintenance mode powershell script and it doesn’t appear to work.
    I am getting the following error:

    You cannot call a method on a null-valued expression.
    At D:\Temp\URLGroupMM.ps1:9 char:56
    + $groupagents = $groupObject.getrelatedmonitoringobjects( <<<< )
    Putting URL into maintenance mode
    New-MaintenanceWindow : Cannot bind argument to parameter 'MonitoringObject' be
    cause it is null.
    At D:\Temp\URLGroupMM.ps1:26 char:81
    + New-MaintenanceWindow -startTime:$startTime -endTime:$endTime -monitoringObje
    ct:$ <<<Powershell D:\Temp\URLGroupMM.ps1 -rootMS rtprms01.americas.ppdi.local -group ‘DMART Web Application Monitor Group’ -minutes 30 -reason ‘Daily maintenance mode’

    Thanks,
    Sven

  4. Please Assist not sure what is wrong

    I am doing the following steps….

    Using Web Application Transaction Monitoring
    Add monitoring Wizard
    Web Application Transaction Monitoring
    Give A name and Select a custom mgmt pack
    Type the URL http://www.hotmail.com and Click Test
    Select a Watch node.

    I add another URL using the above method
    Url: http://www.google.com

    So now i have 2 URL for monitoring

    Next i create a custom group called “URL monitoring”
    using “Objects of type Web Application Perspective”, i add both the names.

    Then i run the powershell command

    C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe c:\URLGroupMM.ps1 -rootMS: ‘FhGscomprod’ -GroupName: ‘URL Monitoring’ -minutes:5 -comment: ‘My Comment’ -reason: ‘PlannedOther’

    I still get an error….

    You cannot call a method on a null-valued expression.
    At C:\URLGroupMM.ps1:10 char:56
    + $groupagents = $groupObject.getrelatedmonitoringobjects <<<< ()
    + CategoryInfo : InvalidOperation: (getrelatedmonitoringobjects:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

    Putting URL into maintenance mode
    New-MaintenanceWindow : Cannot bind argument to parameter 'MonitoringObject' because it is null.
    At C:\URLGroupMM.ps1:27 char:81
    + New-MaintenanceWindow -startTime:$startTime -endTime:$endTime -monitoringObject: <<<< $URLWatcher -comment:$comment –
    Reason:$reason
    + CategoryInfo : InvalidData: (:) [New-MaintenanceWindow], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.EnterpriseManagement.Operations
    Manager.ClientShell.NewMaintenanceWindowCmdlet

  5. If you have multiple watcher node for the same URL then script fill fail because multiple objects are being enumerated for that just add another foreach loop. Here is the working one;

    param($rootMS,$groupName,$minutes,$comment,$reason)

    Add-PSSnapin “Microsoft.EnterpriseManagement.OperationsManager.Client” -ErrorVariable errSnapin;
    Set-Location “OperationsManagerMonitoring::” -ErrorVariable errSnapin;
    new-managementGroupConnection -ConnectionString:$rootMS -ErrorVariable errSnapin;
    set-location $rootMS -ErrorVariable errSnapin;

    $groupObject = get-monitoringobject | where {$_.DisplayName -eq $groupName};
    $groupagents = $groupObject.getrelatedmonitoringobjects()

    foreach ($agent in $groupAgents)
    {
    $URLStuff = $agent.displayname

    $URLStuff

    $URLWatcher = (Get-MonitoringClass -name Microsoft.SystemCenter.WebApplication.Perspective) | Get-MonitoringObject | where {$_.DisplayName -eq $URLStuff}

    foreach ($eachurl in $URLWatcher)
    {

    $startTime = [System.DateTime]::Now
    $endTime = $startTime.AddMinutes($minutes)

    “Putting URL into maintenance mode”

    New-MaintenanceWindow -startTime:$startTime -endTime:$endTime -monitoringObject:$eachurl -comment:$comment -Reason:$reason
    }
    }

Leave a Reply

Your email address will not be published. Required fields are marked *