在PowerShell 3.0 中执行SCOM 中的Get-SCOMManagementPack 命令时,遇到异常The pipeline has been stopped.
PS C:\Users\asttest> Get-SCOMManagementPack | select -First 1 Sealed Name DisplayName ------ ---- ----------- True Microsoft.SystemCenter.ApplicationMo 360 Application Monitoring nitoring.360.Template.Dashboards Dashboards Get-SCOMManagementPack : The pipeline has been stopped. At line:1 char:1 + Get-SCOMManagementPack | select -First 1 + ~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (Microsoft.Syste...mentPackCommand:GetSCManagementPackCommand) [Get-SCMana gementPack], PipelineStoppedException + FullyQualifiedErrorId : ExecutionError,Microsoft.SystemCenter.Core.Commands.GetSCManagementPackCommand
引发该异常的根本原因是PowerShell 3.0 中的Select-Object 命令优化引起的,为了提高效率如果管道中流过的对象到达Select 命令指定的个数时,管道就会终止。
这里给出三种解决方案:
- 使用Select-Object 中的-Wait参数
Get-SCOMManagementPack | select -First 1 -Wait
- 给Select的上一条命令加括号
(Get-SCOMManagementPack) | select -First 1
- 给Select 的上一条命令指定ErrorAction
Get-SCOMManagementPack -ErrorAction SilentlyContinue | select -First 1
前两个原理一样都是将管道从流模式转换成顺序模式,推荐使用第三种方案,因为它保留了Select-Object命令的优化逻辑,效率高。
本文链接: https://www.pstips.net/the-pipeline-has-been-stopped.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
广播: 解决PowerShell 3.0 中Select-Object 引发的The pipeline has been stopped的问题 - SystemCenter 中文社区