Очистить AD с CSV в качестве входа - PullRequest
1 голос
/ 26 января 2012

Мой HR-отдел предоставил мне список из нескольких тысяч пользователей с обновленными полями «компания» и «местоположение».Я хотел бы очистить AD с этим файлом в качестве базы.Мне придется сделать какое-то «мягкое сопоставление» с именами, потому что я не уверен, что все имена соответствуют 100%.Как мне написать сценарий так?

Сьюн, Норвегия:)

Ответы [ 3 ]

2 голосов
/ 27 января 2012

Если вы используете сервер Windows 2008, он включает собственный модуль управления AD для powershell.Таким образом, вам не нужен пакет Quest.

import-module activedirectory
$users = import-csv path file.txt

foreach($user in $users)
{    
    set-aduser -id "$($user.name)*" --replace @{Company=$user.Company;physicalDeliveryOfficeName=$user.location}
}

Это предполагает, что вы хотите, чтобы информация о местоположении записывалась в поле "office" пользователей и компьютеров.Знак * на удостоверении личности должен выполнить мягкий поиск.

1 голос
/ 27 января 2012

Я бы использовал Quest ActiveRoles Server PowerShell CmdLets . Ознакомьтесь с примерами Get-QADUser .

$updates = Import-Csv updates.txt

foreach ($update in $updates) {
    $user = Get-QADUser -SamAccountName $update.SamAccountName
    $user.Company = $update.Company
    # Location is not an attribute of the user
    #$user.Location = $update.Location 
}
0 голосов
/ 11 февраля 2012

Спасибо вам обоим.Я сделал, однако в конечном итоге со следующим полным сценарием (надеюсь, это может быть полезно для кого-то еще):

Clear-Host

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin -ErrorAction silentlycontinue
Add-PSSnapin quest.activeroles.admanagement -ErrorAction silentlycontinue

$file = "\Scripts\employees.csv"        #  Location of the input file
$file2 = "\Scripts\employees2.csv"      # Temp file
$logfile = "\Scripts\logfile.txt"   # log file
remove-item $logfile -Force -ErrorAction SilentlyContinue

Get-Content $file | Out-File -Encoding UTF8  $file2                         # Convert to UTF8 (we don't touch the original inputfile)
$ListEmployees = Import-Csv $file2 -Delimiter ";"                           # Import the file to CSV

foreach ($ListEmployee in $ListEmployees) {
$ListDisplayName = $ListEmployee.firstname + " " + $ListEmployee.lastname

if($ADemployee = Get-QADUser -displayname $ListDisplayName -IncludedProperties employeeid )
{
    ## CHECK NAME
    if($($ADEmployee.displayname) -eq $($ListDisplayName))
    { 
        echo "MATCH: $($ADEmployee.displayname)" 
    }

    ## CHECK COMPANY
    if($($ADEmployee.company) -ne $($ListEmployee.company))
    { 
        echo "       CHANGE   - Company: '$($ADEmployee.company)' to '$($ListEmployee.company)'" 
        Set-QADUser -identity $($ADEmployee.samaccountname) -Company $($ListEmployee.company) -WhatIf
    }
    else
    {
        echo "       OK       - Company     : no change '$($ListEmployee.company)'"
    }

    ## CHECK OFFICE
    if($($ADEmployee.office) -ne $($ListEmployee.office))
    {
        echo "       CHANGE   - Office '$($ADEmployee.office)' to '$($ListEmployee.office)'"
        Set-QADUser -identity $($ADEmployee.samaccountname) -Office $($ListEmployee.Office) -WhatIf
    }
    else
    { 
        echo "       OK       - Office      : no change '$($ListEmployee.office)'"
    }

    ## CHECK MOBILE
    if( $listemployee.mobile -match '\S' )
    {
        if($($ADEmployee.mobile) -ne $($ListEmployee.mobile))
        {
            echo "       CHANGE   - Mobile  : '$($ADEmployee.mobile)' to '$($ListEmployee.mobile)'"
            Set-QADUser -identity $($ADEmployee.samaccountname) -Mobile $($ListEmployee.mobile) -WhatIf
        }
        else
        { 
            echo "       OK       - Mobile      : no change '$($ListEmployee.mobile)'"
        }
    }

    ## CHECK EMPLOYEEID
    if($($ADEmployee.employeeid) -ne $($ListEmployee.employeeid))
    {
        echo "       CHANGE   - EmployeeID: '$($ADEmployee.employeeid)' to '$($ListEmployee.employeeid)'"
        Set-QADUser -identity $($ADEmployee.samaccountname) -ObjectAttributes @{employeeID = $($ListEmployee.employeeid)} -WhatIf

    }
    else
    {
        echo "       OK       - EmployeeID  : no change '$($ListEmployee.employeeid)'"
    }
    $match++
}
else
{
    if($EXContact = Get-Contact $ListDisplayName -ErrorAction SilentlyContinue)
    {
        echo "MATCH CONTACT: $ListDisplayName (contact)"

        ## CHECK MOBILE
        if( $listemployee.mobile -match '\S' )
        {
            if($($EXContact.Mobilephone) -ne $($ListEmployee.mobile))
            { 
                echo "       CHANGE   - Mobile : '$($EXContact.Mobilephone)' to '$($ListEmployee.mobile)'"
            }
            else
            { 
                echo "       OK       - Mobile ; No change ($($ListEmployee.mobile))"
            }
        }

        ## CHECK COMPANY
        if($($EXContact.company) -ne $($ListEmployee.company))
        { 
            echo "       CHANGE   - Company: '$($EXContact.company)' to '$($ListEmployee.company)'"
        }
        else
        {
            echo "     OK       - Company : No change($($ListEmployee.company))"
        }

        ## CHECK OFFICE
        if($($EXContact.office) -ne $($ListEmployee.office))
        { 
            echo "       CHANGE   - Office '$($EXContact.office)' to '$($ListEmployee.office)'"
        }
        else
        {
            echo "       OK       - Office : No Change($($ListEmployee.office))"
        }       
        $contactmatch++
    }
    else
    {
        echo "$ListDisplayName" | Out-File $logfile -Append
        echo "NO MATCH: $ListDisplayName" 
        $nomatch++
    }
}
$i++
}
echo " "
echo "List contains $i accounts"
echo "Accounts: $match matches"
echo "Contacts: $contactmatch"
echo "No Match: $nomatch"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...