【发布时间】:2018-12-17 01:36:38
【问题描述】:
我只需要调用一次 PowerShell cmdlet,但我想使用 C# 获取所有 cmdlet 中的所有信息。
例如:
Get-AzureADUser
Get-AzureADUserMembership
Get-AzureADUserLicenseDetail
这所有的 cmdlet 只能被调用一次。但我应该得到所有的信息。 如何在 C# 中使用 PowerShell 类来减少花费的时间?
尝试多次调用:
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());
}
}
【问题讨论】:
-
您的实际问题是什么?您是说它们偶然被多次调用,还是您只是在寻找某人为您完成工作,为您提供解决任务所需的代码?如果您有正在使用的代码,请编辑您的问题以包含它。
-
这和链接的问题一样吗?
-
@ivcubr 是,但没有回应
-
@saravananks 你确定这不是 Azure 的响应时间吗?由于等待 Azure,可能每个命令都需要很长时间。从 Powershell 命令行手动执行它们是否更快? (只需排查问题,看看它是 C# 优化还是 Azure 需要多长时间)
标签: c# powershell azure office365