// Module defining this command // Optional custom code for this activity /// <summary> /// Returns a configured instance of System.Management.Automation.PowerShell, pre-populated with the command to run. /// </summary> /// <param name="context">The NativeActivityContext for the currently running activity.</param> /// <returns>A populated instance of Sytem.Management.Automation.PowerShell</returns> /// <remarks>The infrastructure takes responsibility for closing and disposing the PowerShell instance returned.</remarks> protected override ActivityImplementationContext GetPowerShell(NativeActivityContext context) { System.Management.Automation.PowerShell invoker = global::System.Management.Automation.PowerShell.Create(); System.Management.Automation.PowerShell targetCommand = invoker.AddCommand(PSCommandName); // Initialize the arguments if (ProxyAccessType.Expression != null) { targetCommand.AddParameter("ProxyAccessType", ProxyAccessType.Get(context)); } if (ProxyAuthentication.Expression != null) { targetCommand.AddParameter("ProxyAuthentication", ProxyAuthentication.Get(context)); } if (ProxyCredential.Expression != null) { targetCommand.AddParameter("ProxyCredential", ProxyCredential.Get(context)); } if (SkipCACheck.Expression != null) { targetCommand.AddParameter("SkipCACheck", SkipCACheck.Get(context)); } if (SkipCNCheck.Expression != null) { targetCommand.AddParameter("SkipCNCheck", SkipCNCheck.Get(context)); } if (SkipRevocationCheck.Expression != null) { targetCommand.AddParameter("SkipRevocationCheck", SkipRevocationCheck.Get(context)); } if (SPNPort.Expression != null) { targetCommand.AddParameter("SPNPort", SPNPort.Get(context)); } if (OperationTimeout.Expression != null) { targetCommand.AddParameter("OperationTimeout", OperationTimeout.Get(context)); } if (NoEncryption.Expression != null) { targetCommand.AddParameter("NoEncryption", NoEncryption.Get(context)); } if (UseUTF16.Expression != null) { targetCommand.AddParameter("UseUTF16", UseUTF16.Get(context)); } return(new ActivityImplementationContext() { PowerShellInstance = invoker }); }
protected override async Task <Action <NativeActivityContext> > ExecuteAsync(NativeActivityContext context, CancellationToken cancellationToken) { string path = Path.Get(context); string libraryPath = LibraryPath.Get(context); if (!path.IsNullOrEmpty() && !Directory.Exists(path)) { throw new DirectoryNotFoundException(string.Format(Resources.InvalidPathException, path)); } cancellationToken.ThrowIfCancellationRequested(); _pythonEngine = EngineProvider.Get(Version, path, libraryPath, !Isolated, TargetPlatform, ShowConsole); var workingFolder = WorkingFolder.Get(context); if (!workingFolder.IsNullOrEmpty()) { var dir = new DirectoryInfo(workingFolder); if (!dir.Exists) { throw new DirectoryNotFoundException(Resources.WorkingFolderPathInvalid); } workingFolder = dir.FullName; //we need to pass an absolute path to the python host } var operationTimeout = OperationTimeout.Get(context); if (operationTimeout == 0) { operationTimeout = 3600; //default to 1h for no values provided. } try { await _pythonEngine.Initialize(workingFolder, cancellationToken, operationTimeout); } catch (Exception e) { Trace.TraceError($"Error initializing Python engine: {e.ToString()}"); try { Cleanup(); } catch (Exception) { } if (Version != Version.Auto) { Version autodetected = Version.Auto; EngineProvider.Autodetect(path, out autodetected); if (autodetected != Version.Auto && autodetected != Version) { throw new InvalidOperationException(string.Format(Resources.InvalidVersionException, Version.ToFriendlyString(), autodetected.ToFriendlyString())); } } throw new InvalidOperationException(Resources.PythonInitializeException, e); } cancellationToken.ThrowIfCancellationRequested(); return(ctx => { ctx.ScheduleAction(Body, _pythonEngine, OnCompleted, OnFaulted); }); }