我开发了一些自定义cmdlet,用于将不同的任务导入SharePoint系统。目前,所有这些cmdlet都是在单个PowerShell脚本中以串行类型运行的。我想更改此项,以便在单独的任务(作业)中执行每个cmdlet。
主脚本使用与包含cmdlet调用的单独脚本相关的Start-Job
启动新作业。脚本启动并执行cmdlet。我还调试了执行的cmdlet的代码。到目前为止还不错。
但在大约15-20秒后,作业被终止,并显示以下错误消息:
There is an error processing data from the background process. Error reported:
Cannot process an element with node type "Text". Only Element and EndElement
node types are supported..
+ CategoryInfo : OperationStopped: (localhost:String) [], PSRemotingTransportException
+ FullyQualifiedErrorId : JobFailure
+ PSComputerName : localhost
我找不到任何关于如何处理这样一个错误的信息。我只是不知道这里出了什么问题。
我是否必须向自定义cmdlet添加更多功能,以便在作业中处理它们?
这是剧本。
Main:
[object]$credentials = Get-Credential -UserName "domainuser" -Message "Log in"
$job = start-job -FilePath "C:ImportItems.ps1" -Name ImportItems -ArgumentList $credentials
$job | Wait-Job
进口商品:
[CmdletBinding()]
Param(
[object]$credentials
)
Import-Module C:MigrationMigrationShell.dll
Import-Items -Credential $credentials
我在用户语音上找到了一个解决方法,为我完成了
https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/14915283-job-cmdlets-fail-with-utf-8-codepage
if (
[Console]::InputEncoding -is [Text.UTF8Encoding] -and
[Console]::InputEncoding.GetPreamble().Length -ne 0
) {
[Console]::InputEncoding = New-Object Text.UTF8Encoding $false
}