从 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:如何从 C# 代码中获取凭据?

Powershell 的 get-counters cmdlet 中返回的“熟值”是啥?

我可以使用 .NET Core 编写 PowerShell 二进制 cmdlet 吗?

同一操作的Powershell cmdlet差异

将输入变量从PowerShell表单传递到cmdlet参数会导致空白数据