在C#中更快地调用PowerShell cmdlet

在C#中更快地调用PowerShell cmdlet,第1张

概述我可以使用C#中的Power shell cmdlet从O365获取用户详细信息. 问题是取货时间.那太慢了. 每个用户需要2秒钟,因此如果我拥有大量用户,则会导致时间问题. 在这里,我只想打印所有用户的信息,如名称,组详细信息,许可证. 我怎样才能更快地完成? 尝试过一个: Runspace runspace = RunspaceFactory.CreateRunspace(); 我可以使用C#中的Power shell cmdlet从O365获取用户详细信息.
问题是取货时间.那太慢了.

每个用户需要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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1233170.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存