C#PowerShell ApartmentState = STA无法正常工作

时间:2018-01-31 14:06:03

标签: c# powershell

我想在PowerShell中导入一个需要-STA选项的模块,我将Runspace.ApartmentState设置为STA,但是当我导入模块时失败-STA选项失败了,我尝试使用模块" StarWindX& #34;但我不认为这是模块相关的问题,这里是代码:

static void Main(string[] args) {
    try {
        var iss = InitialSessionState.CreateDefault();
        iss.ApartmentState = System.Threading.ApartmentState.STA;

        using (PowerShell ps = PowerShell.Create(iss)) {
            Console.WriteLine("ApartmentState: " + ps.Runspace.ApartmentState.ToString());
            ps.AddScript(
                "Import-Module StarWindX"
                );

            Collection<PSObject> PSOutput = ps.Invoke();
            if (ps.Streams.Error.Count > 0) {
                foreach (var error in ps.Streams.Error) {
                    Console.WriteLine("ps error: " + error.ToString());
                    Console.WriteLine("ps error: " + error.ScriptStackTrace);
                }
            }
            foreach (PSObject outputItem in PSOutput) {
                if (outputItem != null) {
                    Console.WriteLine("ps: " + outputItem.ToString());
                }
            }
        }
    } catch (Exception ex) {
        Console.WriteLine(ex.Message);
        Console.WriteLine(ex.StackTrace);
    }
    Console.ReadLine();
}

输出是:

ApartmentState:STA

ps错误:StarWindX不支持当前的公寓。您需要使用-STA开关运行此脚本以使用StarWindX。

ps错误:at,C:\ WINDOWS \ system32 \ WindowsPowerShell \ v1.0 \ Modules \ StarWindX \ StarWindX.psm1:ScriptBlock第4行,无文件:第1行

这是.psm1文件的前4行:

if ($host.Runspace.ApartmentState -ne 'STA') 
{
    #write-host "You need to run this script with -STA switch or inside ISE"
    throw "StarWindX doesn't support current appartment. You need to run this script with -STA switch to use StarWindX."
}

如何正确设置ApartmentSate?

0 个答案:

没有答案