Example #1
0
        // 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);
            });
        }