[英]Powershell cmdlets invoking Only once - C#
我只需要調用一些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所述調用一次,並且在某種程度上比以前的方法更好
public static void Display()
{
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
PowerShell UserDetailsPipe = PowerShell.Create();
UserDetailsPipe.Commands.AddScript("Get-AzureADUser");
Console.WriteLine("\n{0,-20}{1,-45}{2,-30}{3,-30}", "DisplayName", "UserPrincipalName", "MemberOf", "Licenses");
Console.WriteLine("{0,-20}{1,-45}{2,-30}{3,-30}", "-----------", "-----------------", "--------", "--------");
var Users = UserDetailsPipe.Invoke();
foreach (var info in Users)
{
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
PowerShell newPipe = PowerShell.Create();
newPipe.Runspace = runspace;
newPipe.AddScript("Get-AzureADUserMembership -ObjectId '" + UserPrincipalName + "' ; $license = Get-AzureADUserLicenseDetail -ObjectId '" + UserPrincipalName + "' | select ServicePlans ;$license.ServicePlans");
var AllInfo= newPipe.Invoke();
try
{
foreach (var licensenames in AllInfo)
{
if (licensenames.Members["DisplayName"]!=null)
Groups.Add(licensenames.Members["DisplayName"].Value.ToString());
if (licensenames.Members["ServicePlanName"] != null)
Licenses.Add(licensenames.Members["ServicePlanName"].Value.ToString());
}
}
catch (Exception)
{
}
//Displaying UsersInfo
for (int groupIndex = 0, licenseIndex = 0; groupIndex < Groups.Count || licenseIndex < Licenses.Count; groupIndex++, licenseIndex++)
{
if (groupIndex == 0 && licenseIndex == 0)
{
Console.Write("{0,-20}{1,-45}", DisplayName, UserPrincipalName);
}
else
{
Console.Write("{0,-20}{1,-45}", " ", " ");
}
if (groupIndex < Groups.Count)
{
Console.Write("{0,-30}", Groups[groupIndex]);
}
else
{
Console.Write("{0,-30}", " ");
}
if (licenseIndex < Licenses.Count)
{
Console.Write("{0,-30}", Licenses[licenseIndex]);
}
else
{
Console.Write("{0,-30}", " ");
}
Console.WriteLine();
}
Console.WriteLine();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.