我试图通过使用事件来优雅地停止远程PowerShell作业。使用PowerShell cmdlet(例如this one)有一些很好的示例。
但我不知道如何使用C#代码中的自定义cmdlet执行相同的操作。
我的解决方案如下:
在远程计算机中调用CustomCmdlet作为作业:
Invoke-Command -Session $ sess -AsJob -ScriptBlock {CustomCmdlet}
在我的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
}
需要取消作业时,将事件发送到远程机器:
Invoke-Command -Session $ sess -AsJob -ScriptBlock {New-Event -SourceIdentifier MyEventSource -MessageData" CancelTheJob" }
非常感谢!