gpt4 book ai didi

c# - powerShell.AddCommand 的使用

转载 作者:太空狗 更新时间:2023-10-29 22:37:42 24 4
gpt4 key购买 nike

我想使用 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("*");

我坚持写 ForEach-Object {$_ | ConvertTo-Json}。让我知道如何进行。

感谢帮助。

最佳答案

如果 Path 来自可信来源,Keith 的回答是完全有效的。否则,它可能容易受到脚本注入(inject)的攻击。 (演示 https://gist.github.com/vors/528faab6411db74869d4)

我建议一个妥协的解决方案:将您的脚本包装在一个函数中,该函数采用动态参数并使用 AddScript() 调用它。现在您在 powershell 运行空间/ session 中有了一个函数。您可以使用 AddCommand() + AddParameter() 调用此函数。请记住,您需要在第一次 Invoke 之后调用 powershell.Commands.Clear(),否则将通过管道传输命令。

代码可以是这样的:

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);

关于c# - powerShell.AddCommand 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19627192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com