Custom monitors in SCOM may, unless the Authoring Console is used or custom XML employed, only execute VBScript. PowerShell scripts can still be executed though, as long as they’re Base64-encoded and wrapped in VBScript.
-
Write a PowerShell script that places its output on the console as easily-identifiable strings, the output from which can be easily parsed by VBScript, e.g.
Success: 0
Error message: Insufficient memory.
-
Encode the PowerShell script to Base64, where
{Script}
is the script:
$Command = '{Script}'
$EncodedCommand = [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($Command))
$EncodedCommand > EncodedCommand.txt
-
Create the monitor, implementing a VBScript similar to that below, but inserting the contents of EncodedCommand.txt into the PsScript variable.
PsScript=""
Command="PowerShell.exe -EncodedCommand " & PsScript
Set Shell=CreateObject("WScript.Shell")
Set Executor=Shell.Exec(Command)
Executor.StdIn.Close
varPSResult=Executor.StdOut.ReadAll
varSuccess=Mid(varPSResult, InStr(varPSResult, "Success: ") +
Len("Success: "), 1)
varErrorMessage=Right(varPSResult, Len(varPSResult) - (InStr(varPSResult,
"Error message: ") + Len("Error message: ") - 1))
Dim oAPI, oBag
Set oAPI=CreateObject("MOM.ScriptAPI")
Set oBag=oAPI.CreatePropertyBag()
Call oBag.AddValue("Success", varSuccess)
Call oBag.AddValue("Error message", varErrorMessage)
Call oAPI.Return(oBag)
-
Configure the healthy, unhealthy and other components as appropriate.