@broblond
Системный инженер

Почему скрипт ругается на EXEL?

9bcfe76827404805bd327dc63a086b23.jpgДоброго времени суток, пытаюсь написать скрипт, который бы заполнял данные по пользователям в AD из файла EXEL, который был заранее подготовлен. В ходе первых попыток еще как то отрабатывал, но путал местами позиции ( с этим разобрался), теперь он просто не отрабатывает.
Сам скрипт имеет вид :
cls

Import-Module activedirectory

Add-pssnapin Quest.ActiveRoles.ADManagement


$TelSPR="C:\PS_TEST\list1.xlsx"

#Имя листа (WorkSheet) рабочей книги Excel

$SheetName="EXAMPLE"

#"Запускаем" Excel (создаем COM-объект Excel.Application)

$objExcel=New-Object -comobject Excel.Application

#выполняем открытие файла ("Рабочей книги") в Excel

$objWorkbook=$objExcel.Workbooks.Open($TelSPR)

$ColumnUserLogonName=1

$ColumnFirstName=3
#Номер колонки, содержащей Имя

$ColumnSecondName=2
#номер колонки с фамилией

$ColumnHomePhone=7
#номер телефона личный

$ColumnCity=5
#номер колонки с городом

$ColumnRegion=6
#номер колонки с регионом

$ColumnMobilePhone=8
#номер телефона рабочий

$ColumnRoom=9
#Комната

$ColumnDep=4
#Департамент

#Константа для использования с методом SpecialCells
$xlCellTypeLastCell=12

$TotalsRow=$objWorkbook.Worksheets.Item($SheetName).UsedRange.SpecialCells($xlCellTypeLastCell).CurrentRegion.Row

#Выполняем перебор строк в открытом файле Excel
for ($Row=1;$Row -le $TotalsRow; $Row++) {
    #Сохраняем в переменных значения соответствующих ячеек
    $UserLogonName=$objWorkbook.ActiveSheet.Cells.Item($Row, $ColumnUserLogonName).Value()
    $UserFirstName=$objWorkbook.ActiveSheet.Cells.Item($Row, $ColumnFirstName).Value()
    $UserSecondName=$objWorkbook.ActiveSheet.Cells.Item($Row, $ColumnSecondName).Value()
    $HomePhone=$objWorkbook.ActiveSheet.Cells.Item($Row, $ColumnHomePhone).Value()
    $MobilePhone=$objWorkbook.ActiveSheet.Cells.Item($Row, $ColumnMobilePhone).Value()

    $Region=$objWorkbook.ActiveSheet.Cells.Item($Row, $ColumnRegion).Value()    
    $Department=$objWorkbook.ActiveSheet.Cells.Item($Row, $ColumnDep).Value()
    $Room=$objWorkbook.ActiveSheet.Cells.Item($Row, $ColumnRoom).Value()
    $City=$objWorkbook.ActiveSheet.Cells.Item($Row, $ColumnCity).Value()    
        
 #Пишем данные в AD, если пользователь включен  (enabled), включаем обработку ошибок
            try {
                Get-QADUser -DisplayName $UserLogonName -enabled | Set-QADUser -FirstName $FirstName -SecondName $SecondName -Department $Department -City $City -Region $Region -HomePhone $HomePhone -MobilePhone $MobilePhone -Room $Room -Company "NAME" 
            }
            catch {
                $ReportString=("{0,-50} <-> {1,50}" -f $UserName, "Все плохо")
            }
   write-Host $reportString
	$reportString=" "
}
#Закрываем книгу Excel

$objExcel.Workbooks.Close()

#Выходим из Excel (вернее даем команду на выход из Excel)
$objExcel.Quit()
#обнуляем объект
$objExcel = $null

#запускаем принудительную сборку мусора для освобождения памяти и окончательного завершения процесса
[gc]::collect()
[gc]::WaitForPendingFinalizers()


стабильно выдает ошибку 0x800a03ec.

Заранее спасибо за ответы.
PS - с powershell в таком виде столкнулся впервые, прошу сильно тапками не кидаться
  • Вопрос задан
  • 235 просмотров
Пригласить эксперта
Ответы на вопрос 1
@azarij
В меру опытный никто
не думаю, что дело в повершеле. на эту ошибку часто на экселевских форумах жалуются. а если то же самое делать, но использовать цсв файл вместо экселевского?
приведите полный текст ошибки. там будет указан номер строки на которой ошибка возникает. картинка прогрузилась наконец, вижу ошибку.
у себя запустить этот код мне будет проблематично, так что рассуждения будут чисто теоретические.

судя по тексту ошибок вы дали не весь код скрипта.

у меня пару раз были неприятности с activesheet. попробуйте явно указывать на какой sheet вы обращаетесь.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы