 |
|
PS 5.0 модуль AD экспорт в эксель, в том же виде как в консоле
у нас есть переменная в которой три связанных списка данных.
Код:
$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++
}
|
Код:
$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++
}
|
эта часть кода отработала отлично
Код:
$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
оказалось, что 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
Или проверку типа/содержимого значения.
|
опечатался, везде AD_SNILS
Цитата:
Ой ли. Это явно не «пустая строка».
|
Не буду спорить с высоты моего недельного опыта в программировании))). Это было отличием которое я заметил между AD_SNILS и другими столбцами, когда выводил значение переменной $Name.
такой вариант работает, спасибо.
Код:
$sh1.Cells.Item($j,3) = ""+$arr.AD_SNILS
|
zero273, тут надо отличать пустую строку и отсутствующее значение свойства. Как уж оно там отражается в типах — Empty, Null или ещё как — не знаю, смотреть мне не на чем. Важно, что при конкатенации его с пустой строкой происходит преобразование в тип «Строка», хотя ещё лучше бы было проверять содержимое и вовсе не задействовать присваивание «$sh1.Cells.Item($j,3) = …». Мне, опять же — не на чем.
|
Цитата:
хотя ещё лучше бы было проверять содержимое и вовсе не задействовать присваивание «$sh1.Cells.Item($j,3) = …»
|
пока что знаний не хватает, что бы выбирать каким способом делать. Закончу скрипт, с помощью гугла и добрых людей с форума, а после этого примусь за изучение языка последовательно, с основ. Не задумывался, что Empty, Null, воспринимаются программой по разному, принял к сведению.
|
Время: 03:46.
© OSzone.net 2001-