Sac*_*dar 5 c# powershell powershell-2.0 powershell-3.0
我想用c#执行这个事件.
Get-WinEvent -Path'D:\ Events\myevents.evt'-Oldest | Select-Object -Property*| ForEach-Object {$ _ | 的ConvertTo JSON的}
我已经写了
path = "D:\\Events\\myevents.evt";
var powerShell = PowerShell.Create();
powerShell.AddCommand("Get-WinEvent");
powerShell.AddParameter("Path");
powerShell.AddArgument(path);
powerShell.AddParameter("Oldest");
powerShell.AddCommand("Select-Object");
powerShell.AddParameter("Property");
powerShell.AddArgument("*");
Run Code Online (Sandbox Code Playgroud)
我坚持写ForEach-Object {$ _ | 的ConvertTo JSON的}.让我知道如何继续.
感谢帮助.
如果Path来自可靠来源,Keith的答案是完全有效的.否则,它可能容易受到脚本注入的影响.(演示https://gist.github.com/vors/528faab6411db74869d4)
我建议一个妥协的解决方案:将脚本包装在一个函数中,该函数采用动态参数和Invoke它AddScript().现在,您在powershell的运行空间/会话中有一个功能.您可以使用AddCommand()+ 调用此函数AddParameter().请记住,你需要调用powershell.Commands.Clear()第一后Invoke,否则命令将被管道.
代码看起来像这样:
const string script = @"function wrapper($path) {return (Get-WinEvent -Path $path -Oldest | Select-Object -Property * | ForEach-Object {$_ | ConvertTo-Json}) }";
ps.AddScript(script);
ps.Invoke();
ps.Commands.Clear();
ps.AddCommand("wrapper").AddParameter("path", path);
Run Code Online (Sandbox Code Playgroud)
你可以只使用以下AddScript方法:
powershell.AddScript("Get-WinEvent D:\Events\myevents.evt -Oldest | ConvertTo-Json");
Run Code Online (Sandbox Code Playgroud)
我认为您还可以简化该脚本并直接通过管道传输到 ConvertTo-Json。
| 归档时间: |
|
| 查看次数: |
6775 次 |
| 最近记录: |