处理自定义cmdlet代码中的powershell事件

时间:2017-11-19 03:39:32

标签: powershell events

我试图通过使用事件来优雅地停止远程PowerShell作业。使用PowerShell cmdlet(例如this one)有一些很好的示例。

但我不知道如何使用C#代码中的自定义cmdlet执行相同的操作。

我的解决方案如下:

  1. 在远程计算机中调用CustomCmdlet作为作业:

    Invoke-Command -Session $ sess -AsJob -ScriptBlock {CustomCmdlet}

  2. 在我的CustomCmdlet C#代码

    protected override void ProcessRecord()
    {
        // Question: How to write the C# code for following cmdlet? How to set my CancelJob function in the Action parameter?
        // Register-EngineEvent -SourceIdentifier MyEventSource -Action { CancelJob() }
    
        // Start a new task thread to run the real task
    }
    
    private void CancelJob()
    {
       // Get the event to cancel the job. 
       // Notify the task thread to clean up server resource and exit
    }
    
  3. 需要取消作业时,将事件发送到远程机器:

    Invoke-Command -Session $ sess -AsJob -ScriptBlock {New-Event -SourceIdentifier MyEventSource -MessageData" CancelTheJob" }

  4. 非常感谢!

0 个答案:

没有答案