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"));
        }
Example #6
0
        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);
        }