:Powershell 从 XML 注册 ClusteredScheduledTask

:Powershell 从 XML 注册 ClusteredScheduledTask

我想将我的任务放在非集群服务器上,然后将它们作为集群任务导入到已构建和测试的新集群上。

以下是我尝试过的:

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

XML 可以导入 Windows 任务计划程序,但它并不是“集群”任务。

这是我运行上述代码时出现的错误:

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

考虑到它需要一个 XML 文档,我还尝试了这个:

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

我打开文件,将 UTF16 更改为 UTF8 并重新保存,关闭与第一个示例不同的文件名。

错误:

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

如果 XML 确实格式错误,那么我该如何加载它并获取 .OuterXml?

答案1

-Xml参数期望将 xml 输入作为字符串。

Get-Content默认情况下,返回一个字符串数组(每行一个),这就是引发第一个错误的原因。

为了解决这个问题,请-Raw在调用时使用参数Get-Content让其返回单个字符串:

$xmlContents = Get-Content $xmlFilename -Raw

在 PowerShell 3.0 之前,您可以通过将字符串数组传递到来实现相同的目的Out-String

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

相关内容