:Powershell Register-ClusteredScheduledTask from XML

I'd like to take my tasks on a non-clustered server, and import them as clustered tasks on a new cluster that has been built and tested.

Here's what I have tried:

cls
$xmlFilename="i:\Scripts\ImportScheduledTasks\CleaupMessageLog.xml" 
$xmlContents = get-content $xmlFilename
Register-ClusteredScheduledTask -TaskName "TestXMLTask" -TaskType AnyNode -Xml $xmlContents

The XML imports okay into the Windows Task Scheduler, but then it is not a "Clustered" task.

Here is the error I get when I run the above code:

Register-ClusteredScheduledTask : Cannot process argument transformation on parameter 'Xml'. Cannot 
convert value to type System.String.
At C:\Users\nwalters\Documents\TestWebSampleCode4FromXML.ps1:4 char:80
+ Register-ClusteredScheduledTask -TaskName "TestXMLTask" -TaskType AnyNode -Xml $ ...
+                                                                                ~
    + CategoryInfo          : InvalidData: (:) [Register-ClusteredScheduledTask], ParameterBindingArgumen 
   tTransformationException
    + FullyQualifiedErrorId : ParameterArgumentTransformationError,Register-ClusteredScheduledTask

Thinking that it wants an XML Doc, I also tried this:

cls
$xmlFilename="i:\Scripts\ImportScheduledTasks\CleaupMessageLogUTF8.xml" 
$xmlContents = get-content $xmlFilename
$xmlDoc = [xml] (get-content $xmlFilename)
$test = $xmlDoc.OuterXml
#Write-Host $test
Register-ClusteredScheduledTask -TaskName "TestXMLTask" -TaskType AnyNode -Xml $xmlDoc

I open the file, changed UTF16 to UTF8 and resaved it, shut the different filename from the first example.

Error:

Register-ClusteredScheduledTask : The task XML is malformed.
(1,2)::ERROR: incorrect document syntax
At C:\Users\nwalters\Documents\TestWebSampleCode4FromXML.ps1:7 char:1
+ Register-ClusteredScheduledTask -TaskName "TestXMLTask" -TaskType AnyNode -Xml $ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (PS_ClusteredScheduledTask:Root/Microsoft/...edScheduledTask) 
    [Register-ClusteredScheduledTask], CimException
    + FullyQualifiedErrorId : HRESULT 0x8004131a,Register-ClusteredScheduledTask

If the XML is really malformed, then how was I able to load it and get to the .OuterXml?


The -Xml parameter expects the xml input as a string.

Get-Content, by default, returns an array of strings (one for each line), which is why the first error is thrown.

To get around this, use the -Raw parameter when calling Get-Content to have it return a single string:

$xmlContents = Get-Content $xmlFilename -Raw

Prior to PowerShell 3.0, you can achieve the same thing by piping the string array to Out-String:

$xmlContents = Get-Content $xmlFilename | Out-String