保存动态创建的数据+c#+powershell
本文关键字:数据 +c#+powershell 创建 动态 保存 | 更新日期: 2023-09-27 18:27:54
我有一个运行powershell脚本的应用程序,我需要保存powershell脚本返回的数据。
可以传递给应用程序的脚本示例是:
Get-NetAdapter | Select-Object -Property name, status
以下是我运行脚本并保存结果的C#代码:
PowerShell powershell = PowerShell.Create();
powershell.Runspace = RunspaceFactory.CreateRunspace();
powershell.Runspace.Open();
powershell.AddScript(scriptText);
var results = powershell.Invoke();
然后我过滤返回集合的成员,以找到我真正想要的
var firstobject = results[0].Members;
foreach(PSMemberInfo memberInfo in firstobject)
{
if (!listOfStrings.Contains(memberInfo.Name))
{
//Do something with this -- stuck
}
}
目标是不硬编码任何东西,所以我需要动态创建一个表或其他东西,它可以保存我的返回memberinfo(可以是任何数量的属性)然后我需要它来获得所述memberinfo属性的返回值,然后以适当的格式将其保存到SQL表中。
我是在powershell输出中遗漏了什么,还是有一个框架可以格式化输出,使其更易于使用?
如何保存除了项目数量和属性名称之外一无所知的数据?
我正在考虑将数据保存到SQL表中,然后从那里将其加载到某种视图中。
我正在努力寻找一种适用于任何数量房产的解决方案任何帮助都将不胜感激。
尝试使用这样的Dictionary对象,或者创建一个自定义类,并将每个PSMemberInfo对象存储到列表中。因此,您的表可能只包含Name、Value和其他元数据。尝试对另一个scriptText进行注释,它具有不同的属性,但dictionary对象仍然获得所有属性。出于演示目的,我只使用结果集中的一个对象
更新:脚本中没有第一个,只是为了获得返回对象的类型,我正在执行powershell.Invoke().First().Members
。
static void Main(string[] args)
{
//var scriptText = "Get-Process | Select *";
//var scriptText = "Get-Service";
var scriptText = "Get-Service | Select ServiceName, Status";
PowerShell powershell = PowerShell.Create();
powershell.Runspace = RunspaceFactory.CreateRunspace();
powershell.Runspace.Open();
powershell.AddScript(scriptText);
Dictionary<string, object> dictprop = new Dictionary<string, object>();
foreach (PSMemberInfo item in powershell.Invoke().First().Members)
{
try
{
dictprop.Add(item.Name, item.Value);
Console.WriteLine("Name = {0}, Value = {1}", item.Name, item.Value);
}
catch (Exception ex)
{
//Null Value invocation exception.
}
}
Console.Read();
}