[英]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.