Voici le contenu du fichier de configuration que j'ai utilisé pour soutenir à la fois .NET 2.0 et .NET 4 assemblées:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- http://msdn.microsoft.com/en-us/library/w4atty68.aspx -->
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" />
<supportedRuntime version="v2.0.50727" />
</startup>
</configuration>
Aussi, voici une version simplifiée de l'PowerShell 1.0 compatible code que j'ai utilisé pour l'exécution de nos scripts de le passé dans les arguments de ligne de commande:
class Program {
static void Main( string[] args ) {
Console.WriteLine( ".NET " + Environment.Version );
string script = "& " + string.Join( " ", args );
Console.WriteLine( script );
Console.WriteLine( );
// Simple host that sends output to System.Console
PSHost host = new ConsoleHost( this );
Runspace runspace = RunspaceFactory.CreateRunspace( host );
Pipeline pipeline = runspace.CreatePipeline( );
pipeline.Commands.AddScript( script );
try {
runspace.Open( );
IEnumerable<PSObject> output = pipeline.Invoke( );
runspace.Close( );
// ...
}
catch( RuntimeException ex ) {
string psLine = ex.ErrorRecord.InvocationInfo.PositionMessage;
Console.WriteLine( "error : {0}: {1}{2}", ex.GetType( ), ex.Message, psLine );
ExitCode = -1;
}
}
}
En plus de la gestion des erreurs de base indiqué ci-dessus, nous avons également injecter une trap
énoncé dans le script pour afficher d'autres informations de diagnostic (similaire à Jeffrey snover fait de Résoudre l'Erreur de la fonction).