包含自定义cmdlet的Start-Job以奇怪错误终止

时间:2015-11-26 10:41:33

标签: powershell cmdlets start-job

我开发了一些自定义cmdlets,用于为SharePoint系统执行不同的导入任务。目前,所有这些cmdlet都在单个PowerShell脚本中以串行方式运行。我想更改此设置,以便每个cmdlet在单独的任务(作业)中执行。

主脚本使用Start-Job启动一个新作业,该作业与包含对cmdlet的调用的单独脚本相关。该脚本启动并执行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添加更多功能,以便在作业中处理它们?

以下是脚本。

主:

[object]$credentials = Get-Credential -UserName "domain\user" -Message "Log in"

$job = start-job -FilePath "C:\ImportItems.ps1" -Name ImportItems -ArgumentList $credentials
$job | Wait-Job

ImportItems:

[CmdletBinding()]
Param(
  [object]$credentials
)

Import-Module C:\Migration\MigrationShell.dll
Import-Items -Credential $credentials

1 个答案:

答案 0 :(得分:3)

我找到了一个关于uservoice的解决方法,为我做了诀窍

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
}