Быстрый вопрос относительно Powershell вызывает в С#
Я хотел бы попросить С# загрузить модуль powershell в отдельный метод, а затем запустить команды Powershell другим способом.
В настоящее время из моих (ограниченных) знаний о вызове 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 вместо проверки потока ошибок.