Блокировать массовые учетные записи пользователей - PullRequest
0 голосов
/ 10 мая 2019

Любой способ заблокировать учетную запись пользователя в Office365 по EmployeeID вместо UPN?

Это скрипт, который я пробовал, но он может блокировать только по UPN:

Import-Csv 'C:\BlockedUsers.csv' | ForEach-Object {
$upn = $_."UserPrincipalName"
Set-MsolUser -UserPrincipalName $upn -BlockCredential $true
}

1 Ответ

0 голосов
/ 10 мая 2019

Если ваш CSV-файл содержит столбец с именем EmployeeId, вы можете использовать его для получения свойства UserPrincipalName с помощью командлета Get-AdUser:

Import-Csv 'C:\BlockedUsers.csv' | ForEach-Object {
    $user = Get-ADUser -Properties EmployeeID -Filter "EmployeeID -eq $($_.EmployeeID)"
    if ($user) {
        $upn = $user.UserPrincipleName
        Set-MsolUser -UserPrincipalName $upn -BlockCredential $true
    }
}

Редактировать

Судя по вашему комментарию, свойство EmployeeID не всегда уникально в вашей организации.

В этом случае приведенный ниже код должен справиться с этим

Import-Csv 'C:\BlockedUsers.csv' | ForEach-Object {
    $user = Get-ADUser -Properties EmployeeID -Filter "EmployeeID -eq $($_.EmployeeID)"
    if ($user) {
        foreach ($usr in $user) {
            Write-Host "Blocking user $($usr.Name)"
            $upn = $usr.UserPrincipleName
            Set-MsolUser -UserPrincipalName $upn -BlockCredential $true
        }
    }
    else {
        Write-Host "User with EmployeeID $($_.EmployeeID) not found"
    }
}

P.S. Если ваш CSV может содержать пустые значения для столбца EmployeeID, измените первую строку на

Import-Csv 'C:\BlockedUsers.csv' | Where-Object {$_.EmployeeID -match '\S'} | ForEach-Object {

чтобы избавиться от пустых или только пробельных значений.


Редактировать

Если вы уверены, что ваш CSV содержит столбец EmployeeId, и вы не ошиблись со свойством AD EmployeeNumber, то, возможно, это может сработать для вас.
Он использует Get-ADUser, чтобы получить коллекцию пользовательских объектов, которые на самом деле имеют что-то в их атрибуте EmployeeId, и уточняют это, сравнивая с теми, которые вы прочитали из CSV, используя Where-Object.

И EmployeeId, и EmployeeNUmber являются свойствами AD типа String. Вы можете посмотреть это здесь

# first read the CSV into an array containing only the values from the 'EmployeeID' column
$blockedUserIds = Import-Csv 'C:\BlockedUsers.csv' | Select-Object -ExpandProperty EmployeeId -Unique

# next get an array of user objects that have something in the EmployeeID attribute and only
# leave the users where the attribute can be matched to a value captured in the CSV array above
# use the '@(..)' syntax to force the result to be an array, even if only one item is found
$usersToBlock = @(Get-ADUser -Properties EmployeeID, Name, UserPrincipalName -Filter "EmployeeID -like '*'" | 
                  Where-Object { $blockedUserIds -contains $_.EmployeeID })

# you can also use the '-LDAPFilter' parameter
# $usersToBlock = @(Get-ADUser -Properties EmployeeID, Name, UserPrincipalName  -LDAPFilter "(employeeID=*)" | 
#                   Where-Object { $blockedUserIds -contains $_.EmployeeID })

# you now should have an array of user objects that need to be blocked
if ($usersToBlock.Count) {
    Write-Host "Blocking $($usersToBlock.Count) users.." -ForegroundColor Green
    $usersToBlock | ForEach-Object {
        Write-Host "Blocking user $($_.Name)"
        Set-MsolUser -UserPrincipalName $($_.UserPrincipleName) -BlockCredential $true
    }
}
else {
    Write-Warning "No users found with an EmployeeId property that matches any of the values in BlockedUsers.csv"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...