繁体   English   中英

在C#应用程序的脚本中调用PowerShell函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM