从 C# PowerShell cmdlet 返回退出代码
Posted
技术标签:
【中文标题】从 C# PowerShell cmdlet 返回退出代码【英文标题】:Returning an exit code from C# PowerShell cmdlet 【发布时间】:2016-05-20 04:44:19 【问题描述】:我正在用 C# 编写一个 PowerShell cmdlet,这个 cmdlet 由我无法控制的父进程调用。如果进程的退出代码是 3010,则父进程具有处理从 cmdlet 持续重新启动的机制。这里的问题是,鉴于进入 cmdlet 的入口点,我无法弄清楚如何为退出代码提供值是:
protected override void ProcessRecord() ...
我了解到,在研究 $LASTEXITCODE
PS 变量时,cmdlet 不会生成退出代码。总的来说,我对 PowerShell 还很陌生,所以我不确定我是否以正确的方式进行此操作。有没有人可以完成我所描述的事情?
cmdlet 被类似的 PS 脚本加载和调用
Import-Module "C:\testing\test.dll"
Run-MyCmdlet
【问题讨论】:
您能否显示代码,调用您的 cmdlet 的准确程度如何? 现在进行编辑,因为我可以使用的不仅仅是手机。 什么父进程调用这个脚本?是powershell -File Script.ps1
还是别的什么?
不幸的是,我没有看到父进程如何调用运行脚本的窗口,但我想是这样的。
你可以试试这个:this.Host.SetShouldExit(3010)
(假设你的cmdlet继承自PSCmdlet
)。
【参考方案1】:
正在寻找一种方法来确定模块是否已加载或您的 cmdlet 是否指示它失败?
要确定模块是否已加载或失败,请查看$ErrorActionPreference
变量。 (https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_preference_variables?view=powershell-7.2#erroractionpreference)
如果您希望 cmdlet 报告终止错误,请查看 Cmdlet.ThrowTerminatingError(ErrorRecord)
方法。 (https://docs.microsoft.com/en-us/dotnet/api/system.management.automation.cmdlet.throwterminatingerror?view=powershellsdk-7.0.0)
【讨论】:
以上是关于从 C# PowerShell cmdlet 返回退出代码的主要内容,如果未能解决你的问题,请参考以下文章
从 C# 调用 Lync server 2010 Powershell cmdlet
Powershell 的 get-counters cmdlet 中返回的“熟值”是啥?