Как создать переменные PowerShell для работы со статическими членами?
PowerShell 4.0
В моем приложении Application
Класс имеет множество важных свойств, методов и событий. Я хочу работать с этими членами через app
Переменная PowerShell (она будет похожа на псевдоним класса). Но Runspace.SessionStateProxy.SetVariable
ожидает экземпляр класса во втором параметре:
using app = CompanyName.AppName.Application;
...
using (Runspace rs = RunspaceFactory.CreateRunspace()) {
rs.ThreadOptions = PSThreadOptions.UseCurrentThread;
rs.Open();
// TODO: The problem is here (app is not the instance of
//the Application class
rs.SessionStateProxy.SetVariable("app", app);
rs.SessionStateProxy.SetVariable("docs", app.DocumentManager);
using (PowerShell ps = PowerShell.Create()) {
ps.Runspace = rs;
ps.AddScript("$docs.Count");
ps.Invoke();
}
rs.Close();
}
Как мне это сделать?
1 ответ
Решение
Ты можешь использовать typeof
оператор в C#, чтобы получить System.Type
экземпляр, который представляет указанный тип. В PowerShell вы можете использовать статический член-оператор ::
для доступа к статическим членам некоторого типа.
using app = CompanyName.AppName.Application;
...
using (Runspace rs = RunspaceFactory.CreateRunspace()) {
rs.ThreadOptions = PSThreadOptions.UseCurrentThread;
rs.Open();
rs.SessionStateProxy.SetVariable("app", typeof(app));
using (PowerShell ps = PowerShell.Create()) {
ps.Runspace = rs;
ps.AddScript("$app::DocumentManager");
ps.Invoke();
}
rs.Close();
}