跨方法可用的C#Powershell运行空间

本文关键字:C#Powershell 运行 空间 方法 | 更新日期: 2023-09-27 18:29:34

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

我希望能够请求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
     }

跨方法可用的C#Powershell运行空间

根据您如何使用类变量实现这一点,您可能还希望实现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,而不是检查错误流。