Powershell - Active Directory - перемещение пользователей в подразделение на основе файла CSV для идентификатора сотрудника и даты - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь создать сценарий, который переместит учетные записи пользователей Active Directory из одного подразделения в другое на основе дат и идентификатора сотрудника из CSV-файла. В CSV-файле есть следующие столбцы:

«Номер сотрудника», «Дата начала», «Fini sh Date». Пример одного: Номер сотрудника: 123456, Дата начала: 10.07.2020 Дата окончания: 20.07.2020

Сценарию потребуется выполнить поиск в Active Directory номера сотрудника, тогда, если "Дата начала" "соответствует" сегодняшней дате ", затем перемещает их в OU X. Если" End Date "совпадает с" Today date ", то они перемещаются в OU Y.

Я хотел сделать это с помощью переменных вверху, например это:

$Importcsv = Import-Csv -Path "C:\Temp\Accounts.csv" | select "Employee Number", "Start Date", "End Date"
$xOU =  "OU=Start,OU=Test,DC=MyDomain,DC=local"
$yOU = "OU=End,OU=Test,DC=MyDomain,DC=local"
$CurrentDate = Get-Date -Format dd/MM/yyyy

Тогда я знаю, что мне нужно будет использовать код «ForEach», а затем вложить все переменные в него, но заставить его соответствовать датам, чтобы затем переместить его в OU? Вот где я ' м застрял!

1 Ответ

0 голосов
/ 11 июля 2020

При сравнении дат лучше всего сравнивать их как [DateTime] объекты, а не их строковые представления.

Кроме того, в заголовке вашего вопроса указано EmployeeID, но в CSV вы, кажется, используете EmployeeNumber .. Это два разных пользовательских атрибута в AD, поэтому вам нужно убедиться, что вы используете правильный.

На данный момент я предполагаю, что вам действительно нужен атрибут EmployeeID:

$xOU = "OU=Start,OU=Test,DC=MyDomain,DC=local"
$yOU = "OU=End,OU=Test,DC=MyDomain,DC=local"
$CurrentDate = (Get-Date).Date

Import-Csv -Path "C:\Temp\Accounts.csv" | ForEach-Object {
    $id = $_.'Employee Number'
    $user = Get-ADUser -Filter "EmployeeID -eq '$id'" -Properties EmployeeID -ErrorAction SilentlyContinue
    if ($user) {
        # convert the string dates from the CSV into real DateTime objects
        $startDate = [DateTime]::ParseExact($_.'Start Date', 'dd/MM/yyyy', $null)
        $endDate   = [DateTime]::ParseExact($_.'Finish Date', 'dd/MM/yyyy', $null)
        switch ($CurrentDate) {
            $startDate {
                Write-Host "Moving user $($user.Name) to $xOU"
                $user | Move-ADObject -TargetPath $xOu
                break
            }
            $endDate {
                Write-Host "Moving user $($user.Name) to $yOU"
                $user | Move-ADObject -TargetPath $yOu
            }
        }
    }
    else {
        Write-Warning "No user with EmployeeID '$id' found."
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...