列出项目
$ 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. }
答案 0 :(得分:0)
我找到了答案。由于某种原因,在日志函数内部进行了写入主机调用,导致尝试触发异常。 catch也称为日志函数,因此它没有向输出文件写入任何内容。输出文件跟踪使得它看起来像是完全跳过了try-catch。
我无法解释为什么try-catch会抱怨写主机调用,但脚本的其余部分却没有。可能是范围问题。
一旦我在日志功能中注释掉了write-host语句,一切都正常运行。