[英]Calling PowerShell function from within the script in C# Application
我两天前才开始使用PowerShell。 我正在从C#控制台应用程序运行PowerShell脚本。 我将对象列表(MyObj1)作为脚本的参数传递,并对对象进行一些数据处理。 但是,当我在脚本中调用函数时,在打印出错误时出现了函数无法识别的错误。 这是我在做什么的一小部分样本。
public class MyObj1
{
public string Property1 {get; set;}
public int Property2 {get; set;}
}
这是我用来运行脚本的部分代码:
var rs = RunspaceFactory.CreateRunspace();
rs.Open();
rs.SessionStateProxy.SetVariable("list", myObjectList);
rs.SessionStateProxy.SetVariable("xml", xml);
var ps = PowerShell.Create();
ps.Runspace = rs;
var psScript = System.IO.File.ReadAllText(@"C:\temp\ps.ps1");
ps.AddScript(psScript);
ps.Invoke();
foreach (var item in myObjectList)
{
Console.WriteLine(item.Property1 + "; " + item.Property1);
}
Console.WriteLine("\n================================ ERRORS ============================ \n");
foreach (ErrorRecord err in ps.Streams.Error)
{
Console.WriteLine(err.ToString());
}
这是实际的脚本:
$list | ForEach {
$_.Property1 = $_.GetType()
DoSomeThing ([ref] $_)
}
Function DoSomeThing ($MyObject)
{
$Asset.Property2 = $Asset.Property2 + $Asset.Property2
}
两天前,当我使用上述类似的虚拟类使用同一脚本时,我能够修改数据,但是从今天早上开始,我已经修改了脚本以使用真实类。 Ctrl + Z只能将我带回到编辑器中的某个点。 在ForEach
循环中,一切正常,直到我校准函数为止。
对于项目,计划是使用C#中的必需数据操作推送此应用程序,然后在脚本中进行一些可选更改。 关键是要避免将应用程序推送到生产服务器并在脚本中处理所有/大多数数据操作。
将函数声明移到脚本文件的开头。
Function DoSomeThing ($MyObject)
{
$Asset.Property2 = $Asset.Property2 + $Asset.Property2
}
$list | ForEach {
$_.Property1 = $_.GetType()
DoSomeThing ([ref] $_)
}
PS不编译脚本,而是逐个命令执行。 因此,必须在使用前创建/声明函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.