繁体   English   中英

跨方法提供的C#Powershell运行空间

[英]C# Powershell runspace available across methods

有关Powershell在C#中调用的快速问题

我希望能够要求C#在单独的方法中加载powershell模块,然后在另一种方法中运行Powershell命令。

目前,根据我在C#中调用PS的(有限的)知识,看来我无法从另一种方法访问powershell实例-这正确吗?

下面的代码示例。 我正在研究usind运行空间,但也不想花太多时间研究它。

从类中的其他方法访问Powershell实例(加载模块)的最佳方法的任何帮助,将不胜感激。

namespace Test
{
    public class Test
    {

    public void loadModule()
    {
       using (PowerShell PowershellInstance = PowerShell.Create())
        {
            PowershellInstance.AddScript("Add-PSSnapin VMware.VimAutomation.Core");
            PowershellInstance.Invoke();
            if (PowershellInstance.Streams.Error.Count > 0)
            {
                infoBox.Text = "Error loading snapin";
                return;
            }
            else
            {
                infoBox.Text = "Loaded";
            }

            PowershellInstance.Commands.Clear();
        }
     }

     public void someOtherMethod()
     {
           //do some more powershell - without loading module
     }

根据使用类变量实现此操作的方式,您可能还希望实现IDisposable来清理PowerShell参考。 否则,您将无法正确释放所有内存\\资源。

像这样:

    public class Test : IDisposable
    {
        private bool disposed;
        private PowerShell ps;

        public Test()
        {
            disposed = false;
            ps = PowerShell.Create();
        }

        public void loadModule()
        {
            ps.AddCommand("Add-PSSnapin")
              .AddParameter("Name", "VMware.VimAutomation.Core")
              .Invoke();

            if (ps.HadErrors)
                infoBox.Text = "Error loading snapin";
            else
                infoBox.Text = "Loaded";

            ps.Commands.Clear();
        }

        public void someOtherMethod()
        {
            //do some more powershell - without loading module

            ps.Commands.Clear();
        }

        public void Dispose()
        {
            Dispose(true);
        }

        private void Dispose(bool disposing)
        {
            if (!disposed)
            {
                disposed = true;
                if (disposing)
                {
                    if (ps != null)
                    {
                        ps.Dispose();
                        ps = null;
                    }
                }
            }
        }
    }

请注意,您可以使用ps.HadErrors而不是检查错误流。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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