Как создать переменные 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();
}
Другие вопросы по тегам