Я пытаюсь создать сценарий 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