【问题标题】:Returning an exit code from C# PowerShell cmdlet从 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)。

标签: c# powershell cmdlets


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 2017-07-13
    相关资源
    最近更新 更多