Назад | Перейти на главную страницу

Как проверить, используется ли уже имя пользователя AD

Спасибо заранее за вашу помощь. Я нашел что-то связанное по следующей ссылке, но не смог найти решение, которое искал здесь. Проверить наличие доменных учетных записей с помощью скрипта Powershell

Я пытаюсь взять имена пользователей из списка, который уже сгенерирован в файл CSV, из другого запущенного мной скрипта.

Как только у меня появятся эти имена пользователей (sAMAccountname), я хочу проверить, используется ли это имя пользователя. Если это так, я хочу, чтобы это было показано, возможно, через Echo, а затем продолжить проверку других имен. В противном случае следует просто продолжить проверку других имен.

Вот что у меня есть на данный момент. (Имейте в виду, что я полный новичок в Powershell и делаю это только по крайней мере)

Import-Module ActiveDirectory -ErrorAction Continue
$UserCSV = import-csv "\\fs1\DisasterRecovery\Source Controlled Items\WindowsPowerShell\Test scripts\Import Production Users\Users.csv"
$UserList = $UserCSV.sAMAccountname
foreach($User in $UserList)
{
if (Get-ADUser -Filter {sAMAccountname -eq $User} ) {
  # Exists
  #echo Already Exists
} else {
  SilentlyContinue
}
}

Если вы используете Powershell 3 или лучше, нет необходимости в Import-Module ActiveDirectory. PS автоматически загрузит модуль для вас, как только вы воспользуетесь командлетом из этого модуля. Использовать $PSVersionTable чтобы знать наверняка, но я думаю, что вы используете PS 3 или лучше, потому что вы, кажется, используете автоматический foreach в своем коде, а автоматический foreach не стал доступен до PS 3.

Более того, нет смысла продолжать, если модуль не загружается, так как это критично для остальной части скрипта, поэтому -ErrorAction Continue тоже не имеет смысла. Я бы ударил всю первую строчку.

Вторая строка, где вы Import-CSV, в порядке. В $UserList переменная кажется лишней. Оттуда я, наверное, сделал бы что-то вроде этого:

$UserCSV = Import-Csv C:\Users\Administrator\test.csv
Foreach ($User in $UserCSV)
{
    Try
    {
        # Use "EA Stop" to ensure the exception is caught.
        $U = Get-ADUser $User.sAMAccountName -ErrorAction Stop 
        Write-Host "$($User.SamAccountName) is already in use."
    }
    Catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException]
    {
        # The user was not found!
        Write-Warning "$($User.SamAccountName) was not found in this domain!"
    }
    Catch
    {
        # Some other terrible error occured!
        Write-Error "OHSHI"
    }
}

Я не тестировал это, но структура будет больше похожа на:

Import-Module ActiveDirectory -ErrorAction Continue
$UserCSV = import-csv "\\fs1\DisasterRecovery\Source Controlled Items\WindowsPowerShell\Test scripts\Import Production Users\Users.csv"

foreach($row in $UserCSV)
{
    $userAccount = Get-ADUser -Filter {sAMAccountname -eq $row.sAMAccountname}

    if ($userAccount) {
        Write-Host "User $($row.sAMAccountname) exists"
    }
}

Думаю, лучше проверять наличие sAMAccountname не только для пользователей, группы могут иметь такое же sAMAccountname. Это можно сделать, используя Get-ADObject Таким образом, исключение не генерируется, но вы можете создать его самостоятельно.

$sAMAccountname = "TestToTest"

if(@(Get-ADObject -Filter { sAMAccountname -eq $sAMAccountname }).Count -ge 1){
    Write-Host "$sAMAccountname exsists"
}else{
    Write-Host "$sAMAccountname doesn't exsist"
}