4

我开发了一些自定义cmdlet,它们用于向 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

进口商品:

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

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

1 回答 1

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
}
于 2017-04-11T15:28:30.690 回答