gpt4 book ai didi

c# - 在 C# 中调用 PowerShell 脚本非常耗时

转载 作者:行者123 更新时间:2023-12-03 04:18:13 25 4
gpt4 key购买 nike

我能够使用 C# 中的 Powershell 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());
}
}

最佳答案

您可以使用 C# 中的 Microsoft Graph 或 Azure AD SDK,而不是使用 Powershell cmdlet 来实现您的目的。 Microsoft Graph API 是 Azure AD Graph API 的泛化,通常建议使用它代替 Azure AD 来与数百万用户的数据进行交互。请参阅以下链接以获取更多详细信息。

有关 Microsoft Graph 示例,请参阅 GitHub 存储库 - https://github.com/search?q=aspnet+sample+user:microsoftgraph&type=Repositories

关于c# - 在 C# 中调用 PowerShell 脚本非常耗时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51238650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com