Скрипт Powershell для вызова МФА - PullRequest
1 голос
/ 10 октября 2019

У меня проблемы с запуском этого скрипта. Я должен звонить, используя строгие требования аутентификации, что означает, что пользователи, которые включили MFA, используя портал MFA, будут отображаться, если я не ошибаюсь.

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' }}

Ошибка

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

Отредактировано:

Если даже вы сможете уточнить разницу между вызовом MFA с использованием StrongAuthenticationMethods и использованием StrongAuthenticationRequirements, это будет хорошо. Поэтому я могу воспроизвести этот код.

Проблема с нашим кодом аудита MFA состоит в том, что он показывает, что системные администраторы отключили MFA, даже если они утверждают, что они уже включены.

Это аудиткод, который возвращает администраторов с подстановочным знаком администратора, отключен.

Function Get-O365AdminMFAStatus{
    $AdminData=@()
    $objRole=@()
    $Domain = $(get-addomain).dnsroot
    $Log = "C:\temp\Audit\$Domain O365 Admin MFA Status $(get-date -f yyyy-MM-dd).csv"

    try{
        $Roles = Get-MsolRole | where {$_.name -LIKE "*Administrator*"}
        $Roles = ($Roles).name

        foreach ($Role in $Roles){
            $Members = Get-MsolRoleMember -RoleObjectId (Get-MsolRole -RoleName $Role).ObjectId 
            foreach ($Member in $Members){
                $MsUser = $Member | Get-MsolUser
                if($MsUser.StrongAuthenticationMethods.Count -eq 0) {
                    $Enabled = "False"
                    write-host $Role - $Member.DisplayName "No MFA enabled" -foregroundcolor red
                }
                Else{
                    $Enabled = "True"
                    write-host $Role - $Member.DisplayName "MFA enabled" -foregroundcolor green
                }   

                Try{
                    $Exist = [bool](Get-mailbox $MsUser.UserPrincipalName -erroraction SilentlyContinue)
                    if ($Exist){
                        $MBStats = Get-MailboxStatistics $MsUser.UserPrincipalName
                        $LastLogon = $MBstats.LastLogonTime
                    }
                    Else{
                        $LastLogon = "N/A"
                    }
                }
                Catch{
                    $LastLogon = "N/A"
                }

                $objRole = New-Object -TypeName PSObject
                $objRole | Add-Member -MemberType NoteProperty -Name "Role Name" -Value $Role
                $objRole | Add-Member -MemberType NoteProperty -Name "Display Name" -Value $Member.DisplayName
                $objRole | Add-Member -MemberType NoteProperty -Name "UPN" -Value $Member.UserPrincipalName
                $objRole | Add-Member -MemberType NoteProperty -Name "Licensed" -Value $Member.IsLicensed
                $objRole | Add-Member -MemberType NoteProperty -Name "Last Logon" -Value $LastLogon
                $objRole | Add-Member -MemberType NoteProperty -Name "MFA Enabled?" -Value $Enabled

                $AdminData += $objRole
            }
        }

        $AdminData | Export-Csv -NoTypeInformation $Log 
        write-host ""
        write-host "CSV Export Complete to $Log" -foregroundcolor yellow
    }
    Catch{
        Write-host "There was an error: $($_.Exception.Message)"
    }
}

Get-O365AdminMFAStatus

в любом случае, если у вас есть разъяснения по вопросу, который я буду редактировать.

1 Ответ

0 голосов
/ 10 октября 2019

Из полученной ошибки становится совершенно очевидно, что вы должны исправить:

Отсутствует блок операторов после ключевого слова 'else'

Вы пропустили фигурные скобки послеelse так и должно быть:

else {'Disabled'}

Я проверил ваш командлет по своим учетным записям (у меня включен 2FA), а 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', поскольку он имеет значение null.

Чтобы избавиться от этого, важно отфильтровать 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

Отто, что я прочитал здесь , похоже, StrongAuthenticationRequirements применимо для MFA для каждого пользователя. Если ваш арендатор использует MFA на основе условного доступа, это свойство может быть пустым (проверено на моем арендаторе). Поэтому, я думаю, StrongAuthenticationMethods более надежен.


ПРИМЕЧАНИЕ : Я также протестировал часть длинного кода, который вы разместили, и он работает правильно для меня. И у вас есть опечатка в getMsolRole - должно быть Get-MsolRole

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...