Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] PS 5.0 модуль AD экспорт в эксель, в том же виде как в консоле

Ответить
Настройки темы
PowerShell - [решено] PS 5.0 модуль AD экспорт в эксель, в том же виде как в консоле

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


у нас есть переменная в которой три связанных списка данных.
Код: Выделить весь код
$Name =(get-ADUser -Filter {Enabled -eq "True"} -properties $ADProperties `
    | select-object name,samaccountname,@{n="AD_SNILS";e={$_  `
    |Select-Object -ExpandProperty $ADProperties  `
    | select-string $AD_SNILS}})
создаем документ excel, здесь все окей
Код: Выделить весь код
$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $true
$WorkBook = $Excel.Workbooks.Add()
$sh1 = $WorkBook.Worksheets.Item(1)
$sh1.Name = "$AD_SNILS"
 
 
# fill cells
$sh1.Cells.Item(1,1) = "кто"                        
$sh1.Cells.Item(1,2) = "Логин"
$sh1.Cells.Item(1,3) = "Снилс"

а вот эта часть кода в идеале должна переносить данные переменной $name в соответствующие столбцы в эксель, что и происходит, но при этом получается что каждый список выгружается без привязки к значениям других списков + некоторые данные пропускаются, например пустые строчки. В итоге данные в консоле не соответствуют данным в экселе.
Код: Выделить весь код
$j = 2
    foreach($arr in $Name.name)
    {
    $sh1.Cells.Item($j,1) = "$arr"
    $j++
    }
$j = 2
    foreach($arr in $Name.samaccountname)
    {
    $sh1.Cells.Item($j,2) = "$arr"
    $j++
    }
$j = 2
    foreach($arr in $Name.AD_SNILS)
    {
    $sh1.Cells.Item($j,3) = "$arr"
    $j++
    }

Отправлено: 19:31, 11-10-2017

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$j = 2
foreach($arr in $Name)
{
    $sh1.Cells.Item($j,1) = $arr.name
    $sh1.Cells.Item($j,2) = $arr.samaccountname
    $sh1.Cells.Item($j,3) = $arr.AD_SNILS
    $j++
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:49, 12-10-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


эта часть кода отработала отлично
Код: Выделить весь код
$sh1.Cells.Item($j,1) = $arr.name
    $sh1.Cells.Item($j,2) = $arr.samaccountname
здесь появилась ошибка
Код: Выделить весь код
$sh1.Cells.Item($j,3) = $arr.AD_SNILS
вот такая
Код: Выделить весь код
Исключение из HRESULT: 0x800A03EC
At line:1 char:1
+ $sh1.Cells.Item($j,3) = $arr.AD_SNILS
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [], COMException
    + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException
оказалось, что PS ругался на пустые строки,заработало после того, как переписал последнюю строчку вот так
Код: Выделить весь код
$sh1.Cells.Item($j,3) = "qqq"+$arr.AD_SNILS
остался вопрос как удалить из столбца в эксель "qqq" перед каждым значением ,
нагуглил команды get-content и -replace но применить их по отношению к экселю пока не знаю как.

Последний раз редактировалось zero273, 13-10-2017 в 16:35. Причина: опечатка


Отправлено: 15:09, 13-10-2017 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата zero273:
оказалось, что PS ругался на пустые строки, »
Ой ли. Это явно не «пустая строка».

Цитата zero273:
здесь появилась ошибка
Код: Выделить весь код
$sh1.Cells.Item($j,3) = $arr.AD_SNILS
вот такая
Код: Выделить весь код
Исключение из HRESULT: 0x800A03EC
At line:1 char:1
+ $sh1.Cells.Item($j,3) = $arr.ADSNILS
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 + CategoryInfo : OperationStopped: (:) [], COMException
 + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException
оказалось, что PS ругался на пустые строки,заработало после того, как переписал последнюю строчку вот так
Код: Выделить весь код
$sh1.Cells.Item($j,3) = "qqq"+$arr.AD_SNILS
»
«AD_SNILS» и «ADSNILS»?!

Цитата zero273:
остался вопрос как удалить из столбца в эксель "qqq" перед каждым значением , »
Я бы попробовал как раз пустую строку:
Код: Выделить весь код
$sh1.Cells.Item($j,3) = ""+$arr.AD_SNILS
Или проверку типа/содержимого значения.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:24, 13-10-2017 | #4


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата:
«AD_SNILS» и «ADSNILS»?!
опечатался, везде AD_SNILS

Цитата:
Ой ли. Это явно не «пустая строка».
Не буду спорить с высоты моего недельного опыта в программировании))). Это было отличием которое я заметил между AD_SNILS и другими столбцами, когда выводил значение переменной $Name.


такой вариант работает, спасибо.
Код: Выделить весь код
$sh1.Cells.Item($j,3) = ""+$arr.AD_SNILS

Отправлено: 16:32, 13-10-2017 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


zero273, тут надо отличать пустую строку и отсутствующее значение свойства. Как уж оно там отражается в типах — Empty, Null или ещё как — не знаю, смотреть мне не на чем. Важно, что при конкатенации его с пустой строкой происходит преобразование в тип «Строка», хотя ещё лучше бы было проверять содержимое и вовсе не задействовать присваивание «$sh1.Cells.Item($j,3) = …». Мне, опять же — не на чем.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:41, 13-10-2017 | #6


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата:
хотя ещё лучше бы было проверять содержимое и вовсе не задействовать присваивание «$sh1.Cells.Item($j,3) = …»
пока что знаний не хватает, что бы выбирать каким способом делать. Закончу скрипт, с помощью гугла и добрых людей с форума, а после этого примусь за изучение языка последовательно, с основ. Не задумывался, что Empty, Null, воспринимаются программой по разному, принял к сведению.

Отправлено: 17:26, 13-10-2017 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] PS 5.0 модуль AD экспорт в эксель, в том же виде как в консоле

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - [решено] PS 5.0 модуль AD, импортировать несколько свойств пользователя в виде таблицы zero273 Скриптовые языки администрирования Windows 2 11-10-2017 17:29
Перезагрузка компьютера в одном и том же месте... Crey Непонятные проблемы с Железом 6 09-01-2014 03:15
Разное - экспорт из gpedit.msc в виде ключей реестра HFShak Microsoft Windows 7 2 18-03-2012 23:31
Разное - Открытие в том же окне. gambini Microsoft Windows 2000/XP 8 19-05-2009 17:39
у меня локалка и сразу же соединение по модему как их всех 3-их в том числе и меня GiTLer Сетевые технологии 2 26-12-2004 17:29




 
Переход