C# 当前PowerShell实例的状态对此操作无效
我创建了一个powershell实例,如下所示,并运行了一个powershell脚本,该脚本在我的C应用程序中被多次调用。它在一段时间内工作正常,但在一段时间后,由于当前PowerShell实例的状态对此操作无效,因此我收到了错误 我怎样才能避免这种情况C# 当前PowerShell实例的状态对此操作无效,c#,powershell,C#,Powershell,我创建了一个powershell实例,如下所示,并运行了一个powershell脚本,该脚本在我的C应用程序中被多次调用。它在一段时间内工作正常,但在一段时间后,由于当前PowerShell实例的状态对此操作无效,因此我收到了错误 我怎样才能避免这种情况 class DataRulesPSScripts { private static PowerShell ps = PowerShell.Create(); private static PowerShe
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不是线程安全的,如果在您尝试添加另一个脚本时仍有一个正在运行的脚本,则会出现此异常。您一直在将相同的脚本添加到现有实例中…那么我如何修复此问题?