Background

When you need to create some console tasks that would run a Powershell script to do the stuff you want.

It is no problem for a script a line of two long, but any more than that and it is a real pain to pass it as the parameter in the console task.

The other way is you can point the path to your script in the parameters if you have it locally saved on your management servers (each and every one of them, at the exact same path). This didn’t really serve my purpose as we wanted to embed in a re-usable XML so we decided to do something on my own.

Key attention points

After a bit of researching the Internet and a lot of trial-and-error, I finally got it working. The key points to remember here are:

  1.  CDATA to parse it through xml
  2. -command “cmd1;cmd2” to pass the block as a single input
  3. Using “;” to break the cmdlets
  4. Use the escape character “\” before every double quote (“) to skip the character otherwise the compiler misunderstands it for -command syntax and throws errors.

XML

Here’s an example of the XML, with a simple Powershell code that creates an event in the custom event source:

 

< ManagementPackFragment SchemaVersion = "2.0" xmlns:xsd = "http://www.w3.org/2001/XMLSchema" >
 <Categories>
 <Category ID ="Cat.CustomTasks.CreateEvent" Target ="CustomTasks.CreateEvent" Value ="System!System.Internal.ManagementPack.ConsoleTasks.MonitoringObject"/>
 </Categories>
 <Presentation>
 
  < ConsoleTasks >
 
 <ConsoleTask ID="CustomTasks.CreateEvent" Accessibility="Internal" Enabled="true" Target="Windows!Microsoft.Windows.Computer" RequireOutput="true">
 <Assembly>CustomTasks.CTCreateEventAssembly</Assembly>
 <Handler>ShellHandler</Handler>
 
 <Parameters>
 <Argument Name ="WorkingDirectory"/>
 <Argument Name ="Application">%windir%\system32\windowsPowershell\v1.0\powershell.exe</Argument>
 <Argument>
<![CDATA[ -command
  "#Create a custom source; New-EventLog -Source 'Task Source Name' -LogName 'Operations Manager';  #Write the event; Write-EventLog -LogName 'Operations Manager' -Source 'Task Source Name' -EntryType Warning -EventId 1010 -Message 'This is a test event created by task' "

]]>

 </Argument>
 </Parameters>
 
 </ConsoleTask>
 </ConsoleTasks>
 </Presentation>
 
 <LanguagePacks>
 <LanguagePack ID ="ENU" IsDefault ="true">
 <DisplayStrings>
 <DisplayString ElementID ="CustomTasks.CreateEvent">
 <Name>CT - Create Test Event</Name>
 <Description>Creates a Warning test event</Description>
 </DisplayString>
 </DisplayStrings>
 </LanguagePack>
 </LanguagePacks>
 <Resources>
 <Assembly ID ="CustomTasks.CTCreateEventAssembly" Accessibility ="Public" FileName ="Res.CustomTasks.CTCreateEventAssembly" HasNullStream ="true" QualifiedName ="Res.CustomTasks.CTCreateEventAssembly" />
 </Resources>
</ManagementPackFragment>

Output

createeventoutput