Пример #1
0
        public void ErrorDetect()
        {
            var script     = @"Write-Output ""$(1/0)""
throw [System.IO.FileNotFoundException] ""$file not found.""
Start -Sleep -s 1
Write-Output 'exit'
";
            var scriptName = $"{Environment.CurrentDirectory}\\{System.Reflection.MethodBase.GetCurrentMethod().Name}.ps1";

            File.WriteAllText(scriptName, script);
            var lib    = new PSExecutor(scriptName);
            int count  = 0;
            var errors = new List <ErrorRecord>();

            lib.OnStdErrorData += (s, a) =>
            {
                count++;
                errors.Add(a);
            };

            var ret = lib.Run()
                      .GetAwaiter()
                      .GetResult();

            Assert.IsTrue(count == 2);
            Assert.IsTrue(errors[0].Exception.InnerException is DivideByZeroException);
            Assert.IsTrue(errors[1].Exception.InnerException is FileNotFoundException);
        }
Пример #2
0
        public void ExecuteParameters()
        {
            var script     = @"Param(
    [string]$A,
    #[string[]]$A2,
    [int]$B,
    #[switch]$C,
    $D    
)

Write-Output $A
#Write-Output $A2
Write-Output $B
#Write-Output $C
Write-Output $D
";
            var scriptName = $"{Environment.CurrentDirectory}\\{System.Reflection.MethodBase.GetCurrentMethod().Name}.ps1";

            File.WriteAllText(scriptName, script);
            var lib = new PSExecutor(scriptName);
            var ret = lib.Run(new Dictionary <string, object>()
            {
                { "A", "Hello, World" },
                //{ "A2", new []{ "1", "2", "3"}},
                { "B", 1 },
                //{ "C", true },
                { "D", "DDD" }
            })
                      .GetAwaiter()
                      .GetResult();

            Assert.AreEqual("Hello, World", ret[0]);
            Assert.AreEqual("1", ret[1]);
            Assert.AreEqual("DDD", ret[2]);
        }
Пример #3
0
        public void PrintParameters()
        {
            var script     = @"Param(
    [string]$A,
    [string[]]$A2,
    [int]$B,
    [switch]$C,
    $D    
)

Write-Host $A
";
            var scriptName = $"{Environment.CurrentDirectory}\\{System.Reflection.MethodBase.GetCurrentMethod().Name}.ps1";

            File.WriteAllText(scriptName, script);
            var lib = new PSExecutor(scriptName);
            var ret = lib.Parameters;

            foreach (var item in ret)
            {
                Assert.IsTrue(item.Keys.Count == 5);
                Assert.AreEqual(typeof(string), item["A"]);
                Assert.AreEqual(typeof(string[]), item["A2"]);
                Assert.AreEqual(typeof(int), item["B"]);
                Assert.AreEqual(typeof(bool), item["C"]);
                Assert.AreEqual(typeof(string), item["D"]);
            }
        }
Пример #4
0
        public void PrintHelloWorld()
        {
            var script     = "Write-Output \"Hello, World\"";
            var scriptName = $"{Environment.CurrentDirectory}\\{System.Reflection.MethodBase.GetCurrentMethod().Name}.ps1";

            File.WriteAllText(scriptName, script);
            var lib = new PSExecutor(scriptName);
            var ret = lib.Run(new System.Collections.Generic.Dictionary <string, object>())
                      .GetAwaiter()
                      .GetResult();

            foreach (var item in ret)
            {
                Assert.AreEqual("Hello, World", item.ToString());
            }
        }
Пример #5
0
        public void InvalidScriptRunThrowInvalidOperationException()
        {
            var script     = @"Param(
    [string]$A
    [strias] $D
";
            var scriptName = $"{Environment.CurrentDirectory}\\{System.Reflection.MethodBase.GetCurrentMethod().Name}.ps1";

            File.WriteAllText(scriptName, script);
            var lib = new PSExecutor(scriptName);

            Assert.ThrowsException <InvalidOperationException>(() => {
                lib.Run()
                .GetAwaiter()
                .GetResult();
            });
        }