我知道可以通过加载程序集从PowerShell脚本调用C#代码。但是有没有办法在C#代码和PowerShell脚本之间传递和接收值。
假设我的电源脚本中有一个$path
变量。我想将它传递给我的c#代码。而C#代码将使用$ path。在c#代码中执行了一些操作后,它会向脚本返回一些值。这可能吗?如果是,我该怎么办?我必须在我的power shell中加载第三方dll,并在该dll上加载所有一个或两个公共方法来完成某项任务。
我的PowerShell脚本代码:
$scriptpath = $MyInvocation.MyCommand.Path;
$cureentDir = Split-Path $scriptpath;
$isSasDir = $cureentDir -match "mydir";
$requiredFile = "Core.dll";
$myPowersehllVal = "has value for c# code";
我的C#代码:
$Source = @"
using System.Net;
public class ExtendedWebClient : WebClient
{
String myPowersehllVal;
public int Timeout;
protected override WebRequest GetWebRequest(System.Uri address)
{
}
}
"@;
答案 0 :(得分:0)
将PS值输入C#
https://stackoverflow.com/a/22384009/3546415
从更一般的意义上说,System.Management.Automation(Nuget Required)看起来很有希望,特别是Runspace和Pipeline。
以下是一些很好的使用示例: https://msdn.microsoft.com/en-us/library/ee706576(v=vs.85).aspx
像this one这样的东西似乎与你想要的一样。
或者只是使用PowerShell Class从C#模块执行PS命令来设置PS变量值。
或者,不用担心互操作,你可以通过处理文件系统和/或环境变量来解决这个问题。遵循这个范例,您甚至可以使用memory mapped file并与更广泛的应用程序共享变量。 Powershell方面是something like this。对于对象,serialization。