public void StubMethod_can_add_methods_to_a_psobject_implementation() { var webApplication = new PSObject(); var iisSettings = new PSObject(); var path = @"C:\MyWeb\wss\mywebapp"; iisSettings.StubProperty("Path", path); webApplication.StubMethod("GetIisSettingsWithFallback", objects => objects[0].ToString() == "Default" ? iisSettings : null); var actual = PsFactory.Create(HostState.Core) .FailOnNonTerminatingError() .Load(@"TestModule\Modules\TestModule.psm1") .Execute ( "Get-VirtualDirectoryForWebApp", new Dictionary <string, object> { { "WebApplication", webApplication }, { "Zone", "Default" } } ) .FirstResultItemAs <string>(); Assert.IsTrue(actual == path); }
public void SetGlobalVariable_sets_a_global_variable_in_scope() { var actual = PsFactory.Create(HostState.Core).SetGlobalVariable("test", "test1"); var result = actual.LoadScriptBlock("return $test") .Execute().FirstResultItemAs <string>(); Assert.IsTrue(result == "test1"); }
public void LoadScriptFromFile_should_be_able_to_set_variable() { var actual = PsFactory.Create(HostState.Core) .LoadScriptFromFile("GlobalVariableTest.ps1") .Execute() .LoadScriptFromFile("ScriptTest.ps1") .Execute() .FirstResultItemAs <XmlDocument>(); Assert.IsTrue(actual != null); }
public void Execute_should_load_and_invoke_shell_with_params() { var actual = PsFactory.Create(HostState.Core) .FailOnNonTerminatingError() .Load(@"TestModule\Modules\TestModule.psm1") .StubFromFile("WebApplication.ps1") .Execute ( "Get-WelcomeMessage", new Dictionary <string, string> { { "context", "VSTest" } } ); Assert.IsTrue(actual.FirstResultItemAs <Hashtable>().Contains("Url")); }
public void Execute_should_invoke_method_on_module_after_scriptblock_execution() { var actual = PsFactory.Create(HostState.Core) .Load(@"TestModule\Modules\TestModule.psm1") .StubFromFile("WebApplication.ps1") .LoadScriptFromFile("GlobalVariableTest.ps1") .Execute ( "Get-WelcomeMessage", new Dictionary <string, string> { { "context", "VSTest" } } ) .FirstResultItemAs <Hashtable>(); Assert.IsTrue(actual.Contains("Url")); }
private object InitConnection(PSConnection options, Dictionary <string, object> sessionStateVars) { Uri connectTo = null; string hostName = options.ComputerName; if (hostName != null && hostName.IndexOf(':') == -1) { hostName += ":5985"; } connectTo = new Uri(String.Format("http://{0}/wsman", hostName)); var user = options.UserName; if (!user.Contains("\\")) { user = "******" + user; } var connection = new WSManConnectionInfo(connectTo, null, new PSCredential(user, options.Password)); connection.AuthenticationMechanism = options.Authentication; Runspace runspace; if (options.InteractiveTerminal) { var factory = new PsFactory(); var interactiveHost = new WmBridge.Web.Terminal.Host(factory); if (options.Options != null) { dynamic size; if (options.Options.TryGetValue("BufferSize", out size)) { interactiveHost.Terminal.BufferSize = new System.Management.Automation.Host.Size(Convert.ToInt32(size.Width), Convert.ToInt32(size.Height)); } if (options.Options.TryGetValue("WindowSize", out size)) { interactiveHost.Terminal.WindowSize = new System.Management.Automation.Host.Size(Convert.ToInt32(size.Width), Convert.ToInt32(size.Height)); } } runspace = RunspaceFactory.CreateRunspace(interactiveHost, connection); factory.Runspace = runspace; sessionStateVars.Add(PSSessionManager.PSHostClientKey, interactiveHost); } else { runspace = RunspaceFactory.CreateRunspace(connection); } logger.InfoFormat("Opening runspace: {0}", runspace.ConnectionInfo.ComputerName); try { runspace.Open(); logger.InfoFormat("Runspace opened: {0}; InstanceId: {1}", runspace.ConnectionInfo.ComputerName, runspace.InstanceId); } catch (Exception ex) { logger.Error(string.Format("Failed to open runspace: {0} - {1}", runspace.ConnectionInfo.ComputerName, ex.Message)); throw; } var eap = ""; using (var ps = PowerShell.Create()) { ps.Runspace = runspace; string script = options.InteractiveTerminal ? "" : "$ErrorActionPreference = 'stop';"; if (!string.IsNullOrEmpty(options.ExecutionPolicy)) { script += "Set-ExecutionPolicy $args[0] -Scope Process -Force;"; } script += "$PSVersionTable.PSVersion; $ErrorActionPreference;"; ps.AddScript(script); ps.AddArgument(options.ExecutionPolicy); var psResult = ps.Invoke(); if (psResult.Count == 2) { sessionStateVars.Add(PSSessionManager.PSVersionKey, psResult[0].BaseObject as Version); eap = psResult[1].ToString(); } } if (!string.IsNullOrEmpty(options.Script)) { using (var ps = PowerShell.Create()) { ps.Runspace = runspace; ps.AddScript($"$ErrorActionPreference = 'stop'; {options.Script}; $ErrorActionPreference = '{eap}';"); ps.Invoke(); } } if (!string.IsNullOrEmpty(options.ClientVersion)) { Version ver; if (Version.TryParse(options.ClientVersion, out ver)) { sessionStateVars.Add(PSSessionManager.ClientVersionKey, ver); } } return(runspace); }