Posts Tagged ‘PowerShell’

System Center TechNet related Blog Posts to note

July 22, 2015 Leave a comment

There are a few blog posts to note from TechNet. This is just a small sample of important post of the past few days.


There is a new home page for PowerShell

Check this page to give feed back on the new landing page.

System Center Operations Manager Feedback Request

The operations manager product team is looking for feed back on Alert Criticality, with a very short survey. If you use Operations Manager on any kind of basis and work with Alerts please take the survey to give the product team some real world feedback.

Direct Link to Survey:


System Center Service Manager 2012 R2 UR7

It is not released yet, they are just announcing the release date to the download center  which will be July 28th.

Security Threat Analysis – Using Operations Management Suite

This is a very nice run down on using OMS or Operations Management Suite to provide a security investigation example.


MidWest Management Summit 2014 Administrative Uses of PowerShell in SCOM 2012

November 12, 2014 Leave a comment

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 = ""
#$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
$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{$}}}

#cool way of flushing a SCOM Agent Cache using powershell

#Add SCOM Subscribers the easy way

Add-SCOMNotificationSubscriber -Name ‘James Moss’ -DeviceList ‘’,’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

#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
#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

SCOM 2012 Daily Health Check Script

August 22, 2014 Leave a comment

First off this is an updated script from Jason Rydstrand’s SCOM 2007 R2 daily check script.  If you would like to check out the original please see

Special shout out to Bob Cornelissen and Tao Yang on this script!

I’ve updated the commandlets so it can be used for SCOM 2012 and SCOM 2012 R2. This script is intended to use Gmail as the mail delivery method. It can be easily changed to use other email systems but I’ll save that for a future article.  The only part that will need to be modified is the following:

$UserName is your Gmail email account

$Password is your Gmail password

$mailmessage.from is who the email will be coming from

$mailmessage.To.Add can be any additional people you would like to send this email to.



Script is available for download at Microsoft TechNet Script Gallery:

SCOM 2012 Get-SCOMGroup list of computers

October 22, 2013 1 comment

Sometimes you just want to get a list of computers that are members of a group, and just want their names. This is pretty easy using the cmdlet Get-SCOMGroup, just use the –DisplayName switch and add the name of the group and pipe it to the cmdlet Get-SCOMClassInstance. To see what options are available at this point pipe it (GM) Get-Member and you will see a nice list of properties/methods available to the object in the pipe line. An Important Note to make at this point, what is in the pipeline right now are objects, and can still be massaged with PowerShell very easily. So you could sort by DisplayName and then just dump it out to a table (FT) just showing display name. Examples of what is described above:

#to load the opsmgr cmdlets import the module first

Import-Module OperationsManager

# To find out what options are available to your output of the list of objects in the group use Get-Member (GM) cmdlet

Get-SCOMGroup -DisplayName "UR Computer Group" | Get-SCOMClassInstance | GM

# after looking at the GM output we decide that DisplayName will work best

Get-SCOMGroup -DisplayName "UR Computer Group" | Get-SCOMClassInstance | sort DisplayName |FT DisplayName

This is an easy way to get a list of computers that are members of a group. Something that I need to do quite frequently now days. Hope this helps!

Categories: OM12, OM12 Powershell Tags:

MomUIGeneratedMonitorGUID# or MOMUIGeneratedRuleGUID#

September 12, 2013 1 comment

This is an easy one liner that will help you determine the name of the rule or monitor that was created in the Operations Manager Console that is now having some kind of problem and creating alerts about the workflow.

For UIGeneratedMonitor:

Get-SCOMMonitor | where {$ -eq "UIGeneratedMonitorGUID#"} | select DisplayName

For UIGeneratedRule:

Get-SCOMRule | where {$ -eq "MomUIGeneratedRuleGUID#"} | select DisplayName


Shamelessly borrowed from Guys old post for SCOM 2007.