Home > OM12 Powershell, User Group Meeting > MidWest Management Summit 2014 Administrative Uses of PowerShell in SCOM 2012

MidWest Management Summit 2014 Administrative Uses of PowerShell in SCOM 2012

Here is a dump of the one liners and examples from my Administrative Uses of PowerShell in SCOM 2012.


# NEED TO KNOW for writing effective PowerShell criteria based queries to the opsmgr db.
# Severity : Critical = 2,  Warning = 1, Information = 0
# Priority : High = 2, Medium = 1, Low = 0
# ResolutionState: Closed = 255, New = 0
# IsMonitorAlert: True = 1, False = 0

#Importing the SCOM PowerShell module
Import-module OperationsManager
#Connect to localhost when running on the management server
$connect = New-SCOMManagementGroupConnection –ComputerName localhost

# Or enable the two lines below and of course enter the FQDN of the management server in the first line.
#$MS = "enter.fqdn.name.here"
#$connect = New-SCOMManagementGroupConnection –ComputerName $MS

#Get New Critical Alerts Counts
(Get-SCOMAlert -ResolutionState 0 -Severity 2).count
#Get A count of all Critical alerts both open and closed
(Get-SCOMAlert -ResolutionState 0,255 -Severity 2).count
#Get New Warning Alerts Counts
(Get-SCOMAlert -ResolutionState 0 -Severity 1).count
#Get New Informational Alerts Counts
(Get-SCOMAlert -ResolutionState 0 -Severity 0).count

#get a count of rule based alerts
(Get-SCOMAlert -criteria "IsMonitorAlert=0").count
#Get a count of monitor based alerts
(Get-SCOMAlert -criteria "IsMonitorAlert=1").count

#WILL THIS WORK? NO, once IsMonitorAlert is added as a part of the criteria, have to use ""
#(Get-SCOMAlert -resolutionstate 0 -severity 2 -Criteria "IsMonitorAlert = 0").count
#the following line will work
(Get-SCOMAlert -Criteria "ResolutionState = 0 AND Severity = 1 AND IsMonitorAlert = 0").count
#the order of the critera is not that important unless your data set is large, in that case use the big filter first
(Get-SCOMAlert -Criteria "IsMonitorAlert = 0 and ResolutionState = 0 AND Severity = 1").count

#Get New Error Alerts, sort by Name
Get-SCOMAlert -ResolutionState 0 -Severity 2 | sort Name
#Get New Warning Alerts, sort by name
Get-SCOMAlert -ResolutionState 0 -Severity 1 | sort Name
#Get New Informational Alerts, sort by name
Get-SCOMAlert -ResolutionState 0 -Severity 0 | sort Name

# Get a list of open ERROR alerts created by a monitor
Get-SCOMAlert -Criteria "ResolutionState = 0 AND Severity = 2 AND IsMonitorAlert = 1"

# get a LIST of open alerts created by a monitor
Get-SCOMAlert -Criteria "ResolutionState = 0 AND IsMonitorAlert = 1"
# get a COUNT of open alerts created by a monitor
(Get-SCOMAlert -Criteria "ResolutionState = 0 AND IsMonitorAlert = 1").count

# get a LIST of open alerts created by a rule
Get-SCOMAlert -Criteria "ResolutionState = 0 AND IsMonitorAlert = 0"
# get a COUNT of open alerts created by a rule
(Get-SCOMAlert -Criteria "ResolutionState = 0 AND IsMonitorAlert = 0").Count

# get list of closed alerts created by a monitor
Get-SCOMAlert -Criteria "ResolutionState = 255 AND IsMonitorAlert = 1"

# get list of closed alerts created by a rule
Get-SCOMAlert -Criteria "ResolutionState = 255 AND IsMonitorAlert = 0"
# get a list of open alerts that are warning alerts
Get-SCOMAlert -Criteria "ResolutionState = 0 AND Severity = 1"
# open critical alerts
Get-SCOMAlert -Criteria "ResolutionState = 0 AND Severity = 2"
# Open Critical and Warning alerts
Get-SCOMAlert -ResolutionState 0 -Severity 2,1

# Becasue you would never want to close an alert generated by a monitor, with out resetting #the health of the alerts monitor. There will not be a one liner that will close alerts generated #by a monitor. There will be a script that will do that available soon.

# Get New Alerts generated by a rule, and close the alerts.
Get-SCOMAlert -Criteria "ResolutionState = 0 AND IsMonitorAlert = 0" | Resolve-SCOMAlert -Comment ‘Alerts Closed by Chuck Norris’

#SCOM 2012 backup all MPS
Get-SCManagementPack | Export-SCManagementPack -path c:\MPBackup

#Get Agents that are not healthy
Get-SCOMAgent | where {$_.HealthState -ne “Success”}

#how to enable agent proxy
Get-SCOMAgent |where {$_.ProxyingEnabled -like $false}|Enable-SCOMAgentProxy
#To verify this one-liner has the desired effect, run the following one-liner, which returns a
#list of agents along with confirmation that agent proxy has been enabled.
Get-SCOMAgent |where {$_.ProxyingEnabled -like $true} | select Name, ProxyingEna-bled

#The Get-SCOMAgentApprovalSetting cmdlet fetches the AgentApprovalSetting for the #management group to which the OpsMgr PowerShell console is currently connected. It will #show either, Pending, AutoApprove, or AutoReject.

#The cmdlet Set-SCOMAgentApprovalSetting sets the AgentApprovalSetting for the #management group to which the OpsMgr PowerShell console is currently connected. The #three parameters are AutoApprove, AutoReject, and Pending. Here is an example to set the #agent approval setting for the management group to manual:
Set-SCOMAgentApprovalSetting -Pending
#To verify the changes were applied, run the following:

#Add custom alert resolution states
Add-SCOMAlertResolutionState -Name ‘OS Support’ -ResolutionStateCode 15
Add-SCOMAlertResolutionState -Name ‘Exchange Support’ -ResolutionStateCode 20
#To verify the alert resolution state changes, run the get-scomalertresolutionstate

#remove custom alert
Get-SCOMAlertResolutionState -Name ‘OS Support’ | Remove-SCOMAlertResolutionState

#Working with resource pools
Get-SCOMResourcePool -Name "Notifications Resource Pool" | GM
#changing the resourec pool
Get-SCOMResourcePool -Name “Notifications Resource Pool”|Set-SCOMResourcePool –EnableAutomaticMembership $FALSE
#how to verify settings changes
Get-SCOMResourcePool -DisplayName “Notifications Resource Pool” |FT Name, IsDynamic

#SCOM license mini-report
Get-SCOMAccessLicense | measure-object -property LogicalProcessorCount,PhysicalProcessorCount -sum | foreach {$_.Property + " Total : " + $_.Sum}

#How to retrieve a list of all object classes present in your Operations Manager 2012 #management group:
Get-SCOMClass| format-table DisplayName, Description
#Determine the management pack in which the class is defined:
Get-SCOMClass| format-table DisplayName, Description, ManagementPack
#Use the following to send this information to a csv file for easy reading in Excel:
Get-SCOMClass | select-object DisplayName, Description | export-csv -path c:\classes.csv
#Retrieving all the classes defined in a specific management pack is also a single line affair #with the following one-liner, which retrieves all the classes in the #Microsoft.SQLServer.Library management pack:
get-scomclass | where {$_.ManagementPackName -like ‘Microsoft.SQLServer.Library’}

#Exploring Discovered Instances
Get-SCOMClassInstance| select-object DisplayName, Name, Description

Get-SCOMClass -name "Microsoft.SQLServer.2012.Database" | Get-SCOMClassInstance

Get-SCOMClass -name "Microsoft.SQLServer.2012.Database" | Get-SCOMclassInstance | Format-Table DisplayName, PathName -auto

#The Get-SCOMGroup cmdlet makes this an easy task, facilitating enumeration of group members in a single line of PowerShell, as shown in the following example.
Get-SCOMGroup -DisplayName "<DisplayName of Group>" | GetSCOMClassInstance
Get-SCOMGroup -DisplayName "<DisplayName of Group>" | GetSCOMClassInstance | export-csv D:\TEMP\groupmembers.csv -notypeinfo

#getting alerts related to a group
#found: http://sc.scomurr.com/scom-2012-getting-alerts-related-to-a-group-through-powershell/
$Group = Get-SCOMGroup -displayname ‘BLOG – My Application’
$ClassInstances = $Group.GetRelatedMonitoringObjects(‘Recursive’)
$Alerts = Get-SCOMAlert -instance $ClassInstances -ResolutionState (0..254)
$Alerts | ft Name

#Temporarily Disabling All Notification Subscriptions
Get-SCOMNotificationSubscription | where {$_.Enabled -eq $true} | Disable-SCOMNotificationSubscription

#Enable all notification subs
Get-SCOMNotificationSubscription | where {$_.Enabled -eq $false} | Enable-SCOMNotificationSubscription

#Report on Agent Primary Management Server and Failover Management Servers
Get-SCOMAgent|sort ComputerName|ft -a Computer-Name,primarymanagementservername,@{l="SecondaryManagementServers"; e={$_.getfailovermanagementservers()|foreach{$_.name}}}

#cool way of flushing a SCOM Agent Cache using powershell

#Add SCOM Subscribers the easy way

Add-SCOMNotificationSubscriber -Name ‘James Moss’ -DeviceList ‘james@contoso.com’,’sms:4048675309′,’sip:JIMMYjames’


#Connect SCOM 2007 cmdlets to 2012 OM load snapin and run startup script
Add-PSSnapIn Microsoft.EnterpriseManagement.OperationsManager.Client

# To Find out what the OperationsManager Cmdlets are
get-command -module OperationsManager

#Retrieve PowerShell Cmdlets and Parameters
Get-Command -Module OperationsManager | Select-Object -Property Name,@{Name=’Parameters’;Expression={(Get-Command $_).Parameters.Keys}} | Sort Name

#Find out more about the OperationsManager Module
$mod=get-module OperationsManager
$mod | select * | more

#Help is also a great helper when you are trying to get familiar with new cmdlets
#I want to find out what cmdlets have SCOMALERT in their name
Get-help *SCOMALERT*
#Or what cmdlets have SCOMCLASS in their name
Get-help *SCOMCLASS*

#Get-Member is your friend to show you information about the objects cmdlets are bringing back
Get-SCOMAlerts | Get-Member
Get-SCOMAlerts | GM
# you can pipe several cmdlets together and utilize GM to see the properties and methods available to the resulting objects
GET-SCOMAlerts |

#to limit what get-member brings back specify the member type to property
get-member -membertype property

#info about properties http://technet.microsoft.com/en-us/library/dd347654.aspx

#Ever wanted to know what you can pipe between cmdlets?  Say you are using the Get-#SCOMRule cmdlet to figure something about a SCOM Rule
#1) Pipe the Get-SCOMRule  Get-Member to find out the TypeName which is #Microsoft.EnterpriseManagement.Configuration.ManagementPackRule
#2) use get-command –ParameterType #Microsoft.EnterpriseManagement.Configuration.ManagementPackRule  to find out what #cmdlets will work with it.
#this piece of information came from Jeffery Snover from a MS TechEd video with Don Jones, I #think it was 2014 NA.
#But if you ever have to learn some new cmdlets from another module like Office 365 or Lync, #this could literally help you cut your learning curve in half by knowing
#what cmdlets can work together using the same types of data

get-command -ParameterType Microsoft.EnterpriseManagement.Configuration.ManagementPackRule

PS D:\> get-command -ParameterType Microsoft.EnterpriseManagement.Configuration.ManagementPackRule

CommandType     Name                                               ModuleName
———–     —-                                               ———-
Cmdlet          Disable-SCOMRule                                   OperationsManager
Cmdlet          Enable-SCOMRule                                    OperationsManager
Cmdlet          Get-SCOMEvent                                      OperationsManager
Cmdlet          Get-SCOMOverride                                   OperationsManager
Cmdlet          Get-SCOMOverrideResult                             OperationsManager

#another problem that you can run across when working with PowerShell is missing what #type of data a property is using
#an example that happened earlier this year is someone was trying to figure out how many #SCOM rules are enabled by default.
#so if you briefly look at the get-member output from get-scomrule you will notice that there #is a property called Enabled.
#going from my previous experience, and not looking at this information from Get-member, I #thought for sure it would be a Boolean value like $True or $False
Get-scomrule | GM
#enabled is actually a multiple value possibility 4 of which are True and False but it is not a #Boolean value but to get there is going to take some work…
get-scomrule | get-member -name Enabled

PS D:\> get-scomrule | get-member -name Enabled

   TypeName: Microsoft.EnterpriseManagement.Configuration.ManagementPackRule

Name    MemberType Definition
—-    ———- ———-
Enabled Property   Microsoft.EnterpriseManagement.Configuration.ManagementPackMonitoringLevel Enabled {get;set;}

#BING Microsoft.EnterpriseManagement.Configuration.ManagementPackMonitoringLevel
#Find the MPRULES properties http://msdn.microsoft.com/en-us/library/gg486202.aspx
#Then click on the link to the enumeration, which is

#Scroll down to find the possible members of the enabled value which are:

#how to remove white space
$agent = Get-SCOMAgent
$agent | Group PrimaryManagementServerName -Noelement | sort Name | select Name, Count

#white space removed
$agent = Get-SCOMAgent
$agent | Group PrimaryManagementServerName -Noelement | sort Name | Format-Table Name, Count -auto

  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: