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

Скрипт Powershell: Импорт пользователей из CSV, добавление в группу с журналами успехов / сбоев

Я пытаюсь создать сценарий PowerShell для обслуживания пользователей. Текущая среда. Office365 с ADFS, AD и локальным сервером Exchange 2010. Все интегрировано вместе. Для текущей проблемы я пытаюсь импортировать список пользователей из CSV и применять их к определенной группе рассылки либо в Exchange, либо в Active Directory. Оба синхронизируются и обновляют друг друга в моей среде. Я хотел бы сделать это на основе номера сотрудника сотрудника, который хранится как extensionattribute5 в Active Directory. Я также хотел бы создать журнал успехов / неудач. Ниже мой сценарий. Далее следует сообщение об ошибке. Тестовый файл содержит два столбца: отображаемое имя и EmpNo. Что я здесь делаю не так / не хватает. Кажется, это не работает.

    import-module activedirectory

$Users=Import-csv c:\test.csv 
$failedUsers = @()
$usersAlreadyExist =@()
$successUsers = @()
$VerbosePreference = "Continue"
$LogFolder = "C:\temp"

ForEach($User in $Users)
{


try {

    if (!(get-aduser -Filter "extensionattribute5 -like '$($_.EmpNo)'")){ 
        Add-ADGroupMember -Identity 'IMS S3' -Member SAMAccountName
        Write-Verbose "[PASS] Created $EmpNo"
        $successUsers += $EmpNo
    }
    else {
        Write-Warning "[WARNING] [$($EmpNo)] already exists in Distribution Group"
        $usersAlreadyExist += $EmpNo
    }
}
catch {
    Write-Warning "[ERROR]Can't create add [$($EmpNo)] : $_"
    $failedUsers += $EmpNo
}
}
if ( !(test-path $LogFolder)) {
    Write-Verbose "Folder [$($LogFolder)] does not exist, creating"
    new-item $LogFolder -Force 
}

Write-verbose "Writing logs"
$failedUsers | out-file -FilePath  $LogFolder\FailedUsers.log -Force -Verbose
$usersAlreadyExist | out-file -FilePath  $LogFolder\usersAlreadyExist.log -Force -Verbose
$successUsers | out-file -FilePath  $LogFolder\successUsers.log -Force -Verbose

Далее следует сообщение об ошибке: В C: \ users \ new3.ps1: 16 символов: 72 + ... if (! (Get-aduser -Filter "extensionattribute5 -like '$ ($ _. EmpNo)'")) + ~ Отсутствует блок операторов после if (условие). + CategoryInfo: ParserError: (:) [], ParseException + FullyQualifiedErrorId: MissingStatementBlock

У вас есть одинарная кавычка, в которой оператор сравнения «-like» цитируется с атрибутом extension в фильтре Get-Aduser. Вам нужны двойные кавычки перед -like и удалите двойные кавычки после одинарной кавычки в сравнении:

import-module activedirectory

$Users=Import-csv c:\test.csv 
$failedUsers = @()
$usersAlreadyExist =@()
$successUsers = @()
$VerbosePreference = "Continue"
$LogFolder = "C:\temp"

ForEach($User in $Users)
{


try {

    if (!(get-aduser -Filter "extensionattribute5" -like '$($_.EmpNo)')){ 
        Add-ADGroupMember -Identity 'IMS S3' -Member SAMAccountName
        Write-Verbose "[PASS] Created $EmpNo"
        $successUsers += $EmpNo
    }
    else {
        Write-Warning "[WARNING] [$($EmpNo)] already exists in Distribution Group"
        $usersAlreadyExist += $EmpNo
    }
}
catch {
    Write-Warning "[ERROR]Can't create add [$($EmpNo)] : $_"
    $failedUsers += $EmpNo
}
}
if ( !(test-path $LogFolder)) {
    Write-Verbose "Folder [$($LogFolder)] does not exist, creating"
    new-item $LogFolder -Force 
}

Write-verbose "Writing logs"
$failedUsers | out-file -FilePath  $LogFolder\FailedUsers.log -Force -Verbose
$usersAlreadyExist | out-file -FilePath  $LogFolder\usersAlreadyExist.log -Force -Verbose
$successUsers | out-file -FilePath  $LogFolder\successUsers.log -Force -Verbose