/// <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; } }
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); }
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; } }
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; } }