用于MFA调用的脚本Powershell

时间:2019-10-10 01:48:25

标签: powershell

我在运行此脚本时遇到麻烦。我应该使用强认证要求进行呼叫,这意味着如果我没有记错的话,将显示使用MFA门户启用MFA的用户。

Security

错误是

Connect-MsolService
$role = getMsolRole -rolename "Company Administrator"
$rm = get-MsolRoleMember -RoleObjectId $role.ObjectId

foreach ($c in $rm)

{


Get-MsolUser -UserPrincipalName $c.EmailAddress | Select DisplayName, UserPrincipalName, @{N="MFA Status"; E={ if($_.StrongAuthenticationRequirements.Count -ne 0) { $_.StrongAuthenticationRequirements.State.toString() } else 'Disabled' }}

编辑:

即使您也可以澄清使用StrongAuthenticationMethods调用MFA和使用StrongAuthenticationRequirements之间的区别。所以我可以重现这段代码。

MFA审核代码存在的问题是,即使系统管理员声称已启用MFA,它仍显示系统管理员已禁用MFA。

这是审核代码,该代码可禁止使用通配符管理员返回管理员。

At line:9 char:225
+ ... { $_.StrongAuthenticationRequirements.State.toString() } else 'Disabl ...
+                                                                  ~
Missing statement block after 'else' keyword.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingStatementBlockAfterElse

无论如何,如果您对我将要编辑的问题有所澄清。

1 个答案:

答案 0 :(得分:0)

从收到的错误中可以很明显地看出,应该纠正的问题:

  

“ else”关键字后缺少语句块

else之后,您缺少花括号,因此应该是:

else {'Disabled'}

我对照我的帐户(我启用了2FA)检查了您的cmdlet,StrongAuthenticationRequirements对我来说是空对象(已检查许多帐户-请在下面进行说明)。我认为您应该改用StrongAuthenticationMethods属性。它包含有关为2FA配置的通道的信息。

最后,您的代码如下所示:

foreach ($c in $rm) {
  Get-MsolUser -UserPrincipalName $c.EmailAddress | Select DisplayName, UserPrincipalName,
  @{N="MFA Status"; E={ if($_.StrongAuthenticationMethods.Count -ne 0) { "$($_.StrongAuthenticationMethods.Count) methods found" } else {'Disabled'} }}
}

但是您可能会注意到一些条目出现此类信息错误:

  

Get-MsolUser:无法将参数绑定到参数'UserPrincipalName',因为它为空。

要摆脱这一点,重要的是从ServicePrincipal中过滤掉Get-MsolRoleMember个成员(例如,我拥有RMS和PowerBI信息服务,您可能没有或没有其他成员):

foreach ($c in $rm | Where-Object {$_.rolemembertype -eq 'user'}) {
  Get-MsolUser -UserPrincipalName $c.EmailAddress | Select DisplayName, UserPrincipalName,
  @{N="MFA Status"; E={ if($_.StrongAuthenticationMethods.Count -ne 0) { "$($_.StrongAuthenticationMethods.Count) methods found" } else {'Disabled'} }}
}

关于StrongAuthenticationMethodsStrongAuthenticationRequirements的澄清

从我读到的here来看,StrongAuthenticationRequirements似乎适用于每个用户的MFA。如果您的租户使用的是基于条件访问的MFA,则该属性可能为空(在我的租户上选中)。所以我猜StrongAuthenticationMethods更可靠。


注意:我还测试了您发布的长代码部分,它对我来说是正确的。并且您在getMsolRole中有一个错字-应该是Get-MsolRole