我想在某些文本文件中出现特定模式时得到通知,因此我编写了一个简单的PowerShell脚本:
Get-Content 'C:\\testfile.txt' -Wait -Tail 50 | Select-String -Pattern 'Sample pattern'
我宁愿将其作为topshelf服务运行。我已经产生了以下代码:
public class MyService
{
private string doWork;
public string Path
{
get
{
return @"C:\\testfile.txt";
}
}
public void Start()
{
while (this.doWork)
{
var script = $"Get-Content '{Path}' -Wait -Tail 50 | Select-String -Pattern 'Sample pattern'";
using (PowerShell PowerShellInstance = PowerShell.Create())
{
PowerShellInstance.AddScript(script);
var PSOutput = PowerShellInstance.Invoke();
foreach (PSObject outputItem in PSOutput)
{
if (outputItem != null)
{
Console.WriteLine(outputItem.BaseObject + "\n");
}
}
if (PowerShellInstance.Streams.Error.Count > 0)
{
Console.Write.Write("Error");
}
}
}
}
public void Stop()
{
this.doWork = false;
}
}
public class Program
{
static void Main(string[] args)
{
var rc = HostFactory.Run(
x =>
{
x.Service<MyService>(
s =>
{
s.ConstructUsing(name => new MyService());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
x.RunAsLocalSystem();
x.StartAutomatically();
x.SetDescription("Sample Topshelf Host");
x.SetDisplayName("Sample display name");
x.SetServiceName("Sample service name");
});
var exitCode = (int)Convert.ChangeType(rc, rc.GetTypeCode());
Environment.ExitCode = exitCode;
}
}
解决方案构建良好,我在调试模式下运行它,但由于某种原因,我在控制台上看不到预期的输出,因此我认为存在一些我试图弄清楚自己但没有效果的问题。 有什么方法可以使该程序按预期运行?如果有人可以提供一些指导甚至适当的解决方案,我将不胜感激。