Я хотел бы получать уведомления, когда в каком-то текстовом файле встречается определенный шаблон, поэтому я написал простой скрипт PowerShell:
Get-Content 'C:\\testfile.txt' -Wait -Tail 50 | Select-String -Pattern 'Sample pattern'
Я бы предпочел запустить его как службу верхнего полка.Я уже произвел следующий код:
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;
}
}
Решения работают нормально. Я запустил его в режиме отладки, но по какой-то причине я не вижу ожидаемого вывода на консоли, поэтому я предполагаю, чтоесть некоторая проблема, которую я пытался решить сам, но безрезультатно.Есть ли способ заставить эту программу работать как положено?Если бы кто-нибудь мог дать какое-то руководство или даже правильное решение, я был бы признателен.