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