C# 当前PowerShell实例的状态对此操作无效

C# 当前PowerShell实例的状态对此操作无效,c#,powershell,C#,Powershell,我创建了一个powershell实例,如下所示,并运行了一个powershell脚本,该脚本在我的C应用程序中被多次调用。它在一段时间内工作正常,但在一段时间后,由于当前PowerShell实例的状态对此操作无效,因此我收到了错误 我怎样才能避免这种情况 class DataRulesPSScripts { private static PowerShell ps = PowerShell.Create(); private static PowerShe

我创建了一个powershell实例,如下所示,并运行了一个powershell脚本,该脚本在我的C应用程序中被多次调用。它在一段时间内工作正常,但在一段时间后,由于当前PowerShell实例的状态对此操作无效,因此我收到了错误

我怎样才能避免这种情况

class DataRulesPSScripts
    {
        private static PowerShell ps = PowerShell.Create();
        private static PowerShell PsInstance
        {
            get
            {
                if( ps == null )
                {
                    ps = PowerShell.Create();
                }
                return ps;
            }
        }
        public async Task<IEnumerable<object>> CreateAndRunScriptBlock(
            string pSScript, Dictionary<string, object> scriptParameters )
        {
            PsInstance.AddScript( pSScript );
            var scriptBlock = (await PsInstance.InvokeAsync())[0].BaseObject as ScriptBlock;
            var vars = scriptParameters.Select( p => new PSVariable( p.Key, p.Value ) ).ToList();
            return scriptBlock.InvokeWithContext( null, vars );
        }
    }    
}
CreateAndRunScriptBlock方法是从另一个类中定义的内部方法调用的

private async Task<IEnumerable<object>> GenerateValuesFromScript( Dictionary<string, EntityProperty> arg, string pwScript )
        {
            var pars = new Dictionary<string, object>();
            pars.Add( "_", arg );
            return (await ds.CreateAndRunScriptBlock( pwScript, pars )).ToList();
        }

我的2美分:如果您得到一个InvalidPowerShellStateException,请检查它的CurrentState属性值。它将帮助您找到根本原因。我的猜测是,由于AddScript不是线程安全的,如果在您尝试添加另一个脚本时仍有一个正在运行的脚本,则会出现此异常。您一直在将相同的脚本添加到现有实例中…那么我如何修复此问题?