我可以使用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()); } }
解决方法
看来最好的解决方案是尽可能少地组合脚本以减少管道数量.我还建议使用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(); }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。