Ho il seguente cmdlet scritto in C#, è fondamentalmente solo genera un errore:Come funziona ThrowTerminatingError in C#?
[Cmdlet("Use", "Dummy")]
public class UseDummyCmdlet :PSCmdlet
{
protected override void ProcessRecord()
{
var errorRecord = new ErrorRecord(new Exception("Something Happened"), "SomethingHappened", ErrorCategory.CloseError, null);
ThrowTerminatingError(errorRecord);
}
}
sto assumendo (potrei sbagliarmi), questo è l'equivalente in PowerShell)
Function Use-Dummy()
{
[CmdletBinding()]
Param()
process
{
$errorRecord = New-Object System.Management.Automation.ErrorRecord -ArgumentList (New-Object System.Exception), 'SomethingHappened', 'NotSpecified', $null
$PSCmdlet.ThrowTerminatingError($errorRecord)
}
}
la versione di PowerShell si comporta come ci si aspettava:
Use-Dummy : Exception of type 'System.Exception' was thrown.
At line:1 char:10
+ use-dummy <<<<
+ CategoryInfo : NotSpecified: (:) [Use-Dummy], Exception
+ FullyQualifiedErrorId : SomethingHappened,Use-Dummy
la versione C# tuttavia, si blocca, con le seguenti informazioni:
An exception of type 'System.Management.Automation.PipelineStoppedException' occurred in System.Management.Automation.dll but was not handled in user code
Additional information: The pipeline has been stopped.
Cosa sto sbagliando?
Cosa ti aspettavi? C# non è un linguaggio di scripting - quando si colpisce un'eccezione non gestita, il programma si arresta in modo anomalo. –
Mi aspetto un risultato identico. Il codice fa ESATTAMENTE la stessa cosa, solo in lingue diverse. Entrambi possono essere eseguiti in PowerShell, voglio solo sapere perché la pipeline viene improvvisamente chiusa quando si esegue la versione C# e non la versione di PowerShell. – Jake
Come si usa questo cmdlet? Si trova in un modulo/snap-in o è aggiunto dinamicamente? Come lo chiami? Dalla console PowerShell, ISE, un'altra applicazione? Cosa significa "arresti anomali"? –