在C#中,我有以下代码来按文本运行脚本。
public virtual void RunScript(string scriptText)
{
Runspace runspace = RunspaceFactory.CreateRunspace();
Pipeline pipeline = null;
RunspaceInvoke runSpaceInvoker = null;
try
{
runspace.Open();
runSpaceInvoker = new RunspaceInvoke(runspace);
//create pipeline and run the script
pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(scriptText);
pipeline.Commands.Add("Out-String");
pipeline.Invoke();
}
catch(Exception ex)
{
//Log error
}
finally
{
pipeline.Stop();
pipeline.Dispose();
pipeline = null;
runspace.Close();
runspace.Dispose();
runspace = null;
runSpaceInvoker.Dispose();
}
}
在脚本中,我只是执行以下cmdlet
Get-WebsiteState -Name "Default Web Site"
每次执行脚本时,我的记忆都会不断攀升。当然,这最终将成为一个更大的脚本的一部分,它不仅仅是这一个功能,但似乎任何组合的IIS命令最终会占用越来越多的内存。我试图:
没有" Dispose"我已经使用过的IIS cmdlet结果的方法。
需要注意的是,当我在我的机器上执行$ PSVersionTable.PSVersion时,它会为我的版本返回4.0。
目标是能够使用计数器和各种元素向消费者显示站点信息。
我做错了什么?这是滥用IIS命令吗?
任何指导都将不胜感激。
答案 0 :(得分:0)
直接使用API就是答案。仍然不确定为什么我可以使用一些cmdlet而不是其他cmdlet,但重做它使它工作得很好。