如何在同一个脚本

时间:2017-12-20 14:27:41

标签: c# powershell

我知道可以通过加载程序集从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)
        {

        }
     }
"@;

1 个答案:

答案 0 :(得分:0)

将PS值输入C#

https://stackoverflow.com/a/22384009/3546415

从更一般的意义上说,System.Management.AutomationNuget Required)看起来很有希望,特别是RunspacePipeline

以下是一些很好的使用示例: 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