我正在尝试在C#应用程序中获取有关MFA的信息。我已经在Powershell中取得了令人满意的结果,但是我在用C#做同样的事情。
我在Powershell中的代码:
Get-MsolUser -SearchString c.test@mytenant.com |
Where-Object {$_.StrongAuthenticationRequirements -like “*”} |
Select-Object UserPrincipalName, DisplayName, @{n='MFA';e=
{$_.StrongAuthenticationRequirements.State}}, @{n='Methods'; e=
{($_.StrongAuthenticationMethods).MethodType}}, @{n='Default Method'; e=
{($_.StrongAuthenticationMethods).IsDefault}}
UserPrincipalName : c.test@mytenant.com
DisplayName : Cyril test
MFA : Enforced
Methods : {OneWaySMS, TwoWayVoiceMobile, PhoneAppOTP,
PhoneAppNotification}
Default Method : {False, False, False, True}
如您所见,我获得了MFA状态和使用的方法。
现在,我想在C#中做同样的事情。
我的功能:
public static List<string> GetMFA(Runspace runspace, string nom)
{
List<string> listResult = new List<string>();
try
{
Command getLicenseCommand = new Command("Get-MsolUser");
getLicenseCommand.Parameters.Add(new CommandParameter("SearchString", nom));
var pipe = runspace.CreatePipeline();
pipe.Commands.Add(getLicenseCommand);
var props = new string[] { "displayname", "userprincipalname", "StrongAuthenticationRequirements" };
Command CommandSelect = new Command("Select-Object");
CommandSelect.Parameters.Add("Property", props);
pipe.Commands.Add(CommandSelect);
// Execute command and generate results and errors (if any).
Collection<PSObject> results = pipe.Invoke();
if (results.Count != 0)
{
var error = pipe.Error.ReadToEnd();
if (error.Count > 0)
{
throw new Exception(error[0].ToString());
}
foreach (PSObject resultat in results)
{
string dn = resultat.Properties["displayname"].Value.ToString();
string upn = resultat.Properties["userprincipalname"].Value.ToString();
string mfa = resultat.Properties["StrongAuthenticationRequirements"].Value.ToString();
string res = dn + '/' + upn + '/' + mfa;
listResult.Add(res);
}
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return listResult;
}
“ StrongAuthenticationRequirements”属性未返回“ Enforced”之类的信息,而是
System.Collections.Generic.List`1[Microsoft.Online.Administration.StrongAuthenticationRequirement]
我在这里想念什么?
答案 0 :(得分:1)
我猜 OP 不再关心了,但是对于下一个像我过去几个小时一样为此苦苦挣扎的人,我会发布一个答案。
为了调用这些项目,您必须包含 Microsoft.Online.Administration 引用,这些引用作为 DLL 包含在 MSOL PowerShell 模块包中。
在 Visual Studio 中:
您现在可以在 c# 中解析结果。
注意:根据我的经验,我需要先将项目显式转换为变量,然后才能使用它们。
编辑:
经过进一步测试,我删除了对 resources.dll 的不必要引用。