我在运行此脚本时遇到麻烦。我应该使用强认证要求进行呼叫,这意味着如果我没有记错的话,将显示使用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
无论如何,如果您对我将要编辑的问题有所澄清。
答案 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'} }}
}
StrongAuthenticationMethods
和StrongAuthenticationRequirements
的澄清从我读到的here来看,StrongAuthenticationRequirements
似乎适用于每个用户的MFA。如果您的租户使用的是基于条件访问的MFA,则该属性可能为空(在我的租户上选中)。所以我猜StrongAuthenticationMethods
更可靠。
注意:我还测试了您发布的长代码部分,它对我来说是正确的。并且您在getMsolRole
中有一个错字-应该是Get-MsolRole