Ejemplo n.º 1
0
        /// <summary>
        /// Invokes a PowerShell script block.
        /// </summary>
        /// <param name="script">A script to be invoked.</param>
        /// <param name="powerShell">PowerShell instance.</param>
        /// <param name="errorAction">Error callback function.</param>
        /// <returns></returns>
        internal static ICollection <PSObject> CallPowerShellScript(
            string script,
            System.Management.Automation.PowerShell powerShell,
            EventHandler <DataAddedEventArgs> errorAction)
        {
            try
            {
                powerShell.Clear();

                var input = new PSDataCollection <PSObject>();
                input.Complete();

                var output = new PSDataCollection <PSObject>();
                output.DataAdded += output_DataAdded;

                if (errorAction != null)
                {
                    powerShell.Streams.Error.DataAdded += errorAction;
                }

                powerShell.AddScript(script);
                powerShell.Invoke(null, output, new PSInvocationSettings());

                return(output.Count == 0 ? null : output);
            }
            finally
            {
                powerShell.Streams.Error.DataAdded -= errorAction;
            }
        }
Ejemplo n.º 2
0
        internal static PSModuleInfo ImportModule(this System.Management.Automation.PowerShell powershell, string name, bool force = false)
        {
            if (powershell != null)
            {
                powershell.Clear().AddCommand("Import-Module");
                powershell.AddParameter("Name", name);
                powershell.AddParameter("PassThru");

                if (force)
                {
                    powershell.AddParameter("Force");
                }
                return(powershell.Invoke <PSModuleInfo>().ToArray().FirstOrDefault());
            }
            return(null);
        }
Ejemplo n.º 3
0
        internal static ICollection <object> CallPowerShellScript(
            SHiPSBase node,
            System.Management.Automation.PowerShell powerShell,
            SHiPSParameters parameters,
            string script,
            EventHandler <DataAddedEventArgs> outputAction,
            EventHandler <DataAddedEventArgs> errorAction,
            params string[] args)
        {
            if (node == null)
            {
                throw new ArgumentNullException("node");
            }

            try
            {
                powerShell.Clear();

                var input = new PSDataCollection <object>();
                input.Complete();

                var output = new PSDataCollection <object>();

                if (outputAction != null)
                {
                    output.DataAdded += outputAction;
                }

                //register events
                if (errorAction != null)
                {
                    powerShell.Streams.Error.DataAdded += errorAction;
                }

                // Calling the following throws 'Unable to cast object of type 'System.Management.Automation.Language.FunctionMemberAst' to
                // type 'System.Management.Automation.Language.FunctionDefinitionAst'.
                //output = node.GetChildItem();

                //make script block
                powerShell.AddScript(script);
                powerShell.AddParameter("object", node);

                if (args != null && args.Any())
                {
                    for (int i = 0; i < args.Length; i++)
                    {
                        powerShell.AddParameter(("p" + i), args[i]);
                    }
                }

                if (parameters != null)
                {
                    if (parameters.Debug)
                    {
                        powerShell.AddParameter("debug");
                    }
                    if (parameters.Verbose)
                    {
                        powerShell.AddParameter("verbose");
                    }

                    node.SHiPSProviderContext.BoundParameters = parameters.BoundParameters;
                }

                powerShell.Invoke(null, output, new PSInvocationSettings());

                return(output.Count == 0 ? null : output);
            }
            finally
            {
                powerShell.Streams.Error.DataAdded -= errorAction;
            }
        }
Ejemplo n.º 4
0
        internal static ICollection <object> CallPowerShellScript(
            SHiPSDirectory node,
            IProviderContext context,
            System.Management.Automation.PowerShell powerShell,
            SHiPSParameters parameters,
            string methodName,
            EventHandler <DataAddedEventArgs> outputAction,
            EventHandler <DataAddedEventArgs> errorAction)
        {
            if (node == null)
            {
                throw new ArgumentNullException("node");
            }

            try
            {
                powerShell.Clear();

                var input = new PSDataCollection <object>();
                input.Complete();

                var output = new PSDataCollection <object>();

                if (outputAction != null)
                {
                    output.DataAdded += outputAction;
                }

                //register events
                if (errorAction != null)
                {
                    powerShell.Streams.Error.DataAdded += errorAction;
                }

                // Calling the following throws 'Unable to cast object of type 'System.Management.Automation.Language.FunctionMemberAst' to
                // type 'System.Management.Automation.Language.FunctionDefinitionAst'.
                //output = node.GetChildItem();

                //make script block
                powerShell.AddScript("[CmdletBinding()] param([object]$object)  $object.{0}()".StringFormat(methodName));
                powerShell.AddParameter("object", node);


                if (parameters != null)
                {
                    if (parameters.Debug)
                    {
                        powerShell.AddParameter("debug");
                    }
                    if (parameters.Verbose)
                    {
                        powerShell.AddParameter("verbose");
                    }
                }

                powerShell.Invoke(null, output, new PSInvocationSettings());

                return(output.Count == 0 ? null : output);
            }
            finally
            {
                powerShell.Streams.Error.DataAdded -= errorAction;
            }
        }