从C#调用时,Powershell Try / Catch不执行

时间:2015-01-07 15:34:11

标签: c# powershell try-catch

  1. 列出项目

  2. $ LOGFILE = “C:\ LOG2 \ crush1.txt”

    function log
    {
        write-host $($args[0])
        echo $($args[0]) >> $LOGFILE
    }
    
    log "Main Before TRY"
    try {
        log "Inside TRY"
    }
    catch {
        log "Inside CATCH"
    }   
    
    log "Main After TRY"
    
    return "Powershell script completed successfully"
    

    这是我的C#代码:

    命名空间HostSamples {     使用系统;     使用System.Management.Automation; // Windows PowerShell命名空间。     使用System.Collections.ObjectModel;     使用System.Management.Automation.Runspaces;     使用System.IO;     使用System.Text;

    /// <summary>
    /// </summary>
    internal class HostPS1
    {
        private static void Main(string[] args)
        {
            PowerShell ps = PowerShell.Create();
    
            ps.AddScript(LoadScript(@"c:\\temp\\crush1.ps1"));
            Console.WriteLine("Starting");
    
            foreach (PSObject result in ps.Invoke())
            {
                Console.WriteLine(result);
            }
            Console.WriteLine("Finished");
            Console.ReadLine();
        }
    
        static string LoadScript(string filename)
        {
            try
            {
                using (StreamReader sr = new StreamReader(filename))
                {
    
                    // use a string builder to get all our lines from the file 
                    StringBuilder fileContents = new StringBuilder();
    
                    // string to hold the current line 
                    string curLine;
    
                    while ((curLine = sr.ReadLine()) != null)
                    {
                        fileContents.Append(curLine + "\n");
                    }
    
                    return fileContents.ToString();
                }
            }
            catch (Exception e)
            {
                string errorText = "The file could not be read:";
                errorText += e.Message + "\n";
                return errorText;
            }
    
        }
    
    } // End HostPs1. }
    

1 个答案:

答案 0 :(得分:0)

我找到了答案。由于某种原因,在日志函数内部进行了写入主机调用,导致尝试触发异常。 catch也称为日志函数,因此它没有向输出文件写入任何内容。输出文件跟踪使得它看起来像是完全跳过了try-catch。

我无法解释为什么try-catch会抱怨写主机调用,但脚本的其余部分却没有。可能是范围问题。

一旦我在日志功能中注释掉了write-host语句,一切都正常运行。