两天前我刚开始玩 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# 中使用所需的数据操作来推送这个应用程序,然后在脚本中进行一些可选的更改。关键是避免将应用程序推送到生产服务器并在脚本中处理所有/大部分数据操作。