
问题是取货时间.那太慢了.
每个用户需要2秒钟,因此如果我拥有大量用户,则会导致时间问题.
在这里,我只想打印所有用户的信息,如名称,组详细信息,许可证.
我怎样才能更快地完成?
尝试过一个:
Runspace runspace = RunspaceFactory.CreateRunspace(); runspace.open(); Pipeline UserDetailsPipe = runspace.CreatePipeline(); UserDetailsPipe.Commands.AddScript("Get-AzureADUser"); foreach (PSObject info in UserDetailsPipe.Invoke()) /////////******* { ArrayList Groups = new ArrayList(); // to hold memberOf ArrayList licenses = new ArrayList(); // to hold of licenses string UserPrincipalname = info.Members["UserPrincipalname"].Value.ToString(); string displayname = info.Members["displayname"].Value.ToString(); //Getting MemberOf Pipeline memberPipe = runspace.CreatePipeline(); memberPipe.Commands.AddScript("Get-AzureADUser -ObjectID '" + UserPrincipalname + "'| Get-AzureADUserMembership"); //Getting licenses Pipeline licensePipe = runspace.CreatePipeline(); licensePipe.Commands.AddScript("$license = Get-AzureADUserlicenseDetail -ObjectID '" + UserPrincipalname + "' | select ServicePlans "); licensePipe.Commands.AddScript("$license.ServicePlans"); foreach (var licensenames in licensePipe.Invoke())////////***** { licenses.Add(licensenames.Members["ServicePlanname"].Value.ToString()); } foreach (var memberOf in memberPipe.Invoke())////////******* { Groups.Add(memberOf.Members["displayname"].Value.ToString()); } }@H_502_20@ 我知道我在调用很多管道.那么如何通过仅使用一次调用来获得我的答案呢? (它也可能在PowerShell类中).
解决方法 看来最好的解决方案是尽可能少地组合脚本以减少管道数量.我还建议使用PowerShell对象而不是Runspaces 另外,为了在调用后获得最终Collection中的所有结果,请使用.AddStatement()方法.这在下面说明. Documentation for AddStatement
这需要修改为您的环境,因为我只是简单地获取日期两次以证明将两个日期返回到最终集合.
using (PowerShell powershell = PowerShell.Create()) { powershell.AddScript("Get-Date"); powershell.AddStatement().AddScript("Get-Date"); Collection<PSObject> result = powershell.Invoke();}@H_502_20@ 总结 以上是内存溢出为你收集整理的在C#中更快地调用PowerShell cmdlet全部内容,希望文章能够帮你解决在C#中更快地调用PowerShell cmdlet所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)