如果 else 语句的行为不符合我的预期 - Powershell

如果 else 语句的行为不符合我的预期 - Powershell

因此,我试图想出一种可靠的方法来确定用户是否在脚本运行之前在其帐户上配置了 o365 多因素身份验证,这样他们就不会重新启用。

使用:

$MFAUsers = Get-Msoluser -userprincipalname [email protected]  | select "StrongAuthenticationRequirements"

输出是否启用

StrongAuthenticationRequirements
--------------------------------
{Microsoft.Online.Administration.StrongAuthenticationRequirement}

如果他们被禁用,则以下内容

StrongAuthenticationRequirements
--------------------------------
{}

理想情况下,如果用户被禁用,则脚本将针对启用该功能的帐户运行。如果启用了该功能,则脚本将跳过它们。为了进行测试,我制定了以下计划

if ($MFAUsers -eq "{Microsoft.Online.Administration.StrongAuthenticationRequirement}") {
"NO MFA"
} 
Elseif ($MFAUsers -eq "{Microsoft.Online.Administration.StrongAuthenticationRequirement}"){
"MFA"
}

当针对已启用的测试帐户运行此操作时,我仍然收到“无 MFA”响应

有人知道吗?我确信这是一件愚蠢的事情,但我真的说不出来是什么原因?是看到了“StrongAuthenticationRequirments”标头吗?

答案1

如果这是一个多值属性,那么这应该会更好:

if ($MFAUsers.Count -ne 0) { 

答案2

我发现的第一件事是你的 if / elseif 语句正在做同样的事情。

两者都在检查“$MFAUsers”是否等于“{Microsoft.Online.Administration.StrongAuthenticationRequirement}”。

检查是否“无 MFA”的正确运算符是:

if ($MFAUsers -ne "{Microsoft.Online.Administration.StrongAuthenticationRequirement}") {
"NO MFA"
} 

-ne 表示“不等于”。

其次,如果您使用的是 powershell 3 或更高版本,我个人会以略有不同的方式处理您收集数据的方式。

$MFAUsers = (Get-Msoluser -userprincipalname [email protected]).StrongAuthenticationRequirements

if ($MFAUsers -eq $null) {
    "NO MFA"
} 
Elseif ($MFAUsers -ne $null){
    "MFA"
}

如果属性“StrongAuthenticationRequirements”未返回任何内容,则这是一个空值,从我在 Azure 文档中看到的情况来看,“Microsoft.Online.Administration.StrongAuthenticationRequirement”的属性结果似乎是一个对象,这可能不允许与文字字符串进行比较,不幸的是我的租赁中没有 MFA 用户可以对此进行检查。

希望这有帮助。

相关内容