What is the PowerShell Monitoring MP
The PowerShell Monitoring Management pack extends Microsoft Systems Center Operations Manager (SCOM) to allow creation of PowerShell based monitors, rules, tasks, diagnostics and recoveries directly from the SCOM console using the Authoring tab. No MP authoring knowledge is required to create these - authors can leverage their existing scripts and the UI contains the samples they need to modify them to work with SCOM.
To make use of this Management pack, you will need SCOM installed and configured, monitoring your environment. From that point, all you need is enough knowledge of PowerShell scripting to accomplish whatever monitoring tasks are required.
To install the PowerShell Monitoring mp you will need:
SCOM 2012 R2 (earlier versions may be supported but are untested)
SCOM Admin rights (only administrators can import management packs)
SCOM authoring rights provided to all users who need to create PowerShell-based workflows
Install the SCOM Management Pack
Import the management pack into SCOM using the standard process.
The MP will show up as
PowerShell Monitoring - Community Management Pack.
Using the MP
The MPs add various templates to the appropriate Create... wizards in the Authoring tab of the SCOM console. For example, right-clicking on Monitors and selecting Create a Monitor -> Unit Monitor will now include a PowerShell Based folder under Scripting.
The following table displays all templates added by this management pack:
Run a PowerShell Script
Runs a script as a diagnostic, returning text
PowerShell Script Three State Monitor
Runs a script and reports Healthy, Warning, or Critical based on the script output
PowerShell Script Two State Monitor
Runs a script and reports Healthy or Warning/Critical based on the script output
Run a PowerShell Script
Runs a script as a recovery, returning text
PowerShell Script Alert Generating Rule
Raises Alerts if the output of a PowerShell script matches a specified criteria
PowerShell Script Event Collection Rule
Collects events created and submitted by a PowerShell script
Run a PowerShell Script on an event
Runs a PowerShell script if a specified event is detected
PowerShell Script Performance Collection Rule
Collects performance metrics created and submitted by a PowerShell script
Run a PowerShell Script
Runs a PowerShell script on a routine interval
Run a PowerShell script
Runs a simple script as an agent task, returning text
Each template allows you to specify a script, and dynamically insert arguments based on the workflow target. Each template includes a sample script that already has the necessary boilerplate to work with the SCOM API, so no prior knowledge is necessary. Scripts will not be checked for correctness by the template however, so ensure you have thoroughly tested them prior to using the templates.
Arguments are passed to the script as a single string, so if you need to pass multiple arguments you should use the
.Split method with an appropriate separator to convert
$Arguments into an array. Remember that you can also insert values from the Targeted class anywhere into the script (i.e. into unique variables in the script body) so the main purpose of injecting values via arguments is for overrides (since the Arguments value can be overridden in all templates).
The PowerShell MP does not define or control which version of PowerShell will execute any given script - this is determined at runtime by SCOM on each agent. This means if all of your servers have PowerShell v4 installed you can write scripts with that minimum version in mind, otherwise you will need to target the lowest version in your environment. We would suggest testing any scripts you may write against that version to ensure the widest compatibility, prior to adding them to SCOM.
As a reminder, Windows Server 2008 R2 shipped with PowerShell v2 installed and enabled by default, so that is generally a good target.
Performance and Scaling
The workflows created by this management pack support a SCOM feature called Cookdown (any guesses for where we got the idea for our company name from?) which enables scripts (or any data source) which would be run many times to instead be run once, and the output data shared. In order for this to function however, all instances of that script must be exactly the same and have exactly the same input values (including schedule, overrides, etc.).
In practice what this means is that if you need to monitor a class that appears multiple times on an agent (such as a database), and collect performance information as well, you should ensure your script supports Cookdown. To do this, rather than having your script make use of identifiers (such as the DB name, either hard-coded or via a
$Target/ reference) instead have the script locate and provide data for all instances at the same time (making sure to provide the ID of each item along with the monitoring data).
This can then safely be filtered outside the script, in the Criteria/Mapper sections of the templates, so that each instance of the monitor only examines the health state of its appropriate object.
Samples folder contains example scripts you could use in your own SCOM workflows. These are not included in the management pack, and dependencies may vary from script to script.
Help and Assistance
These management packs are community packs originally developed by Squared Up (https://www.squaredup.com) spun out Cookdown (https://cookdown.com) who now own and maintain them and inspired by Wei Lim.
For help and advice, post questions on http://community.squaredup.com/answers.
If you have found a specific bug or issue with the templates in this management pack, please submit a ticket on support.cookdown.com.
Source and Contributions
The source code for this project is available on GitHub here: https://github.com/squaredup/Community.PowerShellMonitoring.MP
If you have an awesome script that you would like to share with people, feel free to submit a pull request and add the script to the
samples folder (making sure to include some context in the script help for what/how it can be used).
Please target pull requests at the develop branch.
If your change would bring in a non-standard MP reference (i.e a management pack not imported into SCOM by default) then please create a new management pack in the solution.
Target the minimum version of a management pack reference that you can, and avoid versions that were introduced in particular cumulative updates.
Ensure that there are no outstanding Management Pack Best Practices Analyser issues reported by your change.
If you introduce a custom Probe or Write Action module, please use appropriate types for your configuration elements (i.e do not use string for values that clearly are boolean).
Do not update the version numbers of the MP in your pull request.
Template DisplayStrings should be suffixed with (Community).