public void TestHandle()
        {
            var runner = new ImpersonationProcessRunner();
            var spec   = new ProcessRunSpec()
            {
                ExecutablePath      = "powershell",
                Arguments           = new[] { "-Command", "$x = [Console]::In.ReadLine()" },
                BufferedInputOutput = true,
                Credentials         = creds
            };
            var proc = runner.Run(spec);

            Assert.NotNull(proc.Handle);
            var pid      = GetProcessId(proc.Handle);
            var realProc = Process.GetProcessById(pid);

            try
            {
                Assert.NotNull(realProc);
                Assert.Equal("powershell", realProc.ProcessName);
            }
            finally
            {
                realProc.Kill();
            }
        }
        public void TestStdout()
        {
            var runner = new ImpersonationProcessRunner();
            var spec   = new ProcessRunSpec()
            {
                ExecutablePath      = "whoami",
                BufferedInputOutput = true,
                Credentials         = creds
            };
            var proc = runner.Run(spec);

            Assert.Matches(new Regex(username), proc.StandardOutput.ReadToEnd());
        }
        public void TestStderr()
        {
            var runner = new ImpersonationProcessRunner();
            var spec   = new ProcessRunSpec()
            {
                ExecutablePath      = "powershell",
                Arguments           = new[] { "-Command", "[Console]::Error.WriteLine('hi')" },
                BufferedInputOutput = true,
                Credentials         = creds
            };
            var proc = runner.Run(spec);

            Assert.Equal("hi", proc.StandardError.ReadToEnd().Trim());
        }
        public void TestExited()
        {
            var exited = false;
            var runner = new ImpersonationProcessRunner();
            var spec   = new ProcessRunSpec()
            {
                ExecutablePath      = "whoami",
                BufferedInputOutput = true,
                Credentials         = creds,
                ExitHandler         = (sender, args) => exited = true
            };
            var process = runner.Run(spec);

            process.WaitForExit();
            Assert.True(exited);
        }