我需要访问刚由于align-content: center
而创建的基本Powershell默认管道,我需要停止该管道,以便脚本执行必须立即停止。
我知道我可以通过调用pipe.Invoke()创建Pipeline对象并执行脚本。但是Pipeline对象没有给我Powershell实例提供的所有数据流。
Pwoershell.Create();
稍后我需要
powerShellInstance = PowerShell.Create();
powerShellInstance.Runspace = RunspaceFactory.CreateRunspace(iss)
有什么可以实现这一目标的东西吗?
修改
例如,我有以下脚本。
powerShellInstance.GetPipeline().Stop() // something like this.
编辑(异步停止) 在代码之前。
Set-LinkParameter"withError" => This commandlet will throw error
Set-LinkParameter11 "Mistyped" "error" => Powershell will throw an error of invalid commandlet
Initialiize-Access => this is invalid here and this commandlet will throw error. Here it must not allow further script to execute.
Write-Host "This is test message for host"
Write-Information "test information"
Write-Error "Access denied." --> this is can be terminating error ( depends)
Write-Warning "This is test warning."
Write-Verbose "This is verbose message"
Write-Verbose "This is verbose message" -Verbose
Write-Debug "Test Debug message" -Debug
Write-Debug "wont appear at debug pipeline"
Write-Output @(1,2,3) -NoEnumerate | measure
答案 0 :(得分:0)
不幸的是,您不能直接回答原始问题。没有公开的方法可以通过PowerShell
类或其他方式来获取当前正在运行的管道。与Pipeline
进行交互的唯一方法是通过Runspace.CreatePipeline
创建它。此外,Pipeline
API is not available in PowerShell Standard最终将被删除。
针对(“措辞”)“如何在发生错误后如何终止通过PowerShell
类调用的PowerShell脚本”的修订问题,答案是使用PowerShell.Stop()
但是,正如您所注意到的,这并不能保证终止。这样做的原因是,当事件触发并调用PowerShell.Stop()
时,PowerShell脚本可能已经移至下一个序列点。如果该下一个序列点是阻塞的方法调用,或者是未实现Cmdlet.StopProcessing
的cmdlet,则管道将不会停止直到完成。如果它从未完成,那么PowerShell.Stop
将永远不会完成。除了终止进程之外,别无他法。