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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Извлечение информации из Excel с помощью PowerShell

Ответить
Настройки темы
PowerShell - Извлечение информации из Excel с помощью PowerShell

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


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

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


Добрый день.
Помогите пожалуйста составить скрипт PowerShell который:
1.Открывал заданный файл Excel, содержащий имена и даты.
2.Находил в нем строчки с датой отличающейся от сегодняшней менее чем на 20 дней.
3.Отсылал найденные строчки по электронной почте.

Отправлено: 13:41, 13-10-2016

 

Ветеран


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

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


Код: Выделить весь код
$body = Import-Excel "C:\Users.xlsx" | Where {
	$t = New-TimeSpan (Get-Date).ToString("dd.MM") (Get-Date $_.Дата).ToString("dd.MM") 
	$t.Days -gt 0 -and $t.Days -le 20
} | Out-String

if($body)
{
send-mailmessage -from "User01 <user01@example.com>" -to "User02 <user02@example.com>" -subject "Date" -body $body -smtpServer smtp.fabrikam.com
}
Пример файла:


Пример вывода:
Код: Выделить весь код
Имя  Дата
---  ----
Поля 1.11.2000
Модуль: https://github.com/dfinke/ImportExcel

Последний раз редактировалось Kazun, 13-10-2016 в 15:00.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:52, 13-10-2016 | #2



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

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


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


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

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


Спасибо за ответ. Подскажите, а как установить Import-Excel?

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


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


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

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


При запуске кода возникает ошибка:
Get-Date : Не удается привязать параметр "Date" к целевому объекту. Исключение при задании "Date" : "Ссылка на объект н
е указывает на экземпляр объекта."
строка:2 знак:58
+ $t = New-TimeSpan (Get-Date).ToString("dd.MM") (Get-Date $_.Дата).ToString("dd.M ...
+ ~~~~~~~
+ CategoryInfo : WriteError: ( [Get-Date], ParameterBindingException
+ FullyQualifiedErrorId : ParameterBindingFailed,Microsoft.PowerShell.Commands.GetDateCommand


Подскажите, как это можно исправить?

Отправлено: 16:51, 14-10-2016 | #4


Ветеран


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

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


Alexchandr, самым правильным будет, если Вы выложите образец Вашего:
Цитата Alexchandr:
заданный файл Excel, содержащий имена и даты. »
упаковав его в архив.

Отправлено: 18:33, 14-10-2016 | #5


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


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

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


Вложения
Тип файла: zip user.zip
(6.9 Kb, 3 просмотров)

Вот сам файл.

Отправлено: 09:46, 18-10-2016 | #6


Ветеран


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

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


Цитата Alexchandr:
Вот сам файл. »
У Вас оба столбца называются «Имя», в примере же второй столбец имеет название «Дата» (в этом ли дело — не проверялось, попробуйте сами).

Отправлено: 10:07, 18-10-2016 | #7


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


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

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


Исправил второй столбец на "Дата".
Ошибка осталась.

PS C:\Users\Alex> $body = Import-Excel "D:\us\user.xlsx" | Where {
>> $t = New-TimeSpan (Get-Date).ToString("dd.MM") (Get-Date $_.Дата).ToString("dd.MM")
>> $t.Days -gt 0 -and $t.Days -le 20
>> } | Out-String
>>
Get-Date : Не удается привязать параметр "Date" к целевому объекту. Исключение при задании "Date" : "Ссылка на объект н
е указывает на экземпляр объекта."
строка:2 знак:58
+ $t = New-TimeSpan (Get-Date).ToString("dd.MM") (Get-Date $_.Дата).ToString("dd.M ...
+ ~~~~~~~
+ CategoryInfo : WriteError: ( [Get-Date], ParameterBindingException
+ FullyQualifiedErrorId : ParameterBindingFailed,Microsoft.PowerShell.Commands.GetDateCommand

Get-Date : Не удается привязать параметр "Date" к целевому объекту. Исключение при задании "Date" : "Ссылка на объект н
е указывает на экземпляр объекта."
строка:2 знак:58
+ $t = New-TimeSpan (Get-Date).ToString("dd.MM") (Get-Date $_.Дата).ToString("dd.M ...
+ ~~~~~~~
+ CategoryInfo : WriteError: ( [Get-Date], ParameterBindingException
+ FullyQualifiedErrorId : ParameterBindingFailed,Microsoft.PowerShell.Commands.GetDateCommand

Get-Date : Не удается привязать параметр "Date" к целевому объекту. Исключение при задании "Date" : "Ссылка на объект н
е указывает на экземпляр объекта."
строка:2 знак:58
+ $t = New-TimeSpan (Get-Date).ToString("dd.MM") (Get-Date $_.Дата).ToString("dd.M ...
+ ~~~~~~~
+ CategoryInfo : WriteError: ( [Get-Date], ParameterBindingException
+ FullyQualifiedErrorId : ParameterBindingFailed,Microsoft.PowerShell.Commands.GetDateCommand

Get-Date : Не удается привязать параметр "Date" к целевому объекту. Исключение при задании "Date" : "Ссылка на объект н
е указывает на экземпляр объекта."
строка:2 знак:58
+ $t = New-TimeSpan (Get-Date).ToString("dd.MM") (Get-Date $_.Дата).ToString("dd.M ...
+ ~~~~~~~
+ CategoryInfo : WriteError: ( [Get-Date], ParameterBindingException
+ FullyQualifiedErrorId : ParameterBindingFailed,Microsoft.PowerShell.Commands.GetDateCommand

Get-Date : Не удается привязать параметр "Date" к целевому объекту. Исключение при задании "Date" : "Ссылка на объект н

Отправлено: 10:22, 18-10-2016 | #8


Ветеран


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

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


Код: Выделить весь код
PS > Import-Excel C:\user.xlsx

Имя  Дата
---  ----
Маша 01.10.1986 0:00:00
Паша 02.10.1985 0:00:00
Галя 20.06.1999 0:00:00
Валя 05.11.1965 0:00:00
Поля 01.11.2000 0:00:00
Код: Выделить весь код
$body = Import-Excel "C:\Users.xlsx" | Where {$_.Дата} | Where {
	$t = New-TimeSpan (Get-Date).ToString("dd.MM") (Get-Date $_.Дата).ToString("dd.MM") 
	$t.Days -gt 0 -and $t.Days -le 20
} | Out-String
Выводит:
Код: Выделить весь код
PS > Import-Excel C:\user.xlsx | Where {$_.Дата} | Where {
>> $t = New-TimeSpan (Get-Date).ToString("dd.MM") (Get-Date $_.Дата).ToString("dd.MM")
>> $t.Days -gt 0 -and $t.Days -le 20
>> } | Out-String

Имя  Дата
---  ----
Валя 05.11.1965 0:00:00
Поля 01.11.2000 0:00:00
Если локализациия русская и формат ячеек Дата:
Код: Выделить весь код
$t = New-TimeSpan (Get-Date).ToString("dd.MM") ($_.Дата.ToString("dd.MM"))
Если локализациия английская и формат ячеек Дата:
Код: Выделить весь код
$t = New-TimeSpan (Get-Date).ToString("MM.dd") ($_.Дата.ToString("MM.dd"))
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:32, 18-10-2016 | #9


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


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

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


Спасибо большое! Заработало!
Единственное, MS Outlook2010 почему то не отображает русские шрифты.


??? ????
--- ----
???? 05.11.1965 0:00:00
???? 01.11.2000 0:00:00

Еще раз спасибо.

Отправлено: 13:22, 18-10-2016 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Извлечение информации из Excel с помощью PowerShell

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] извлечение информации из файлаа muslimdogger Скриптовые языки администрирования Windows 3 22-04-2016 21:34
CMD/BAT - Извлечение информации из множества файлов в один Борис_Спектор@vk Скриптовые языки администрирования Windows 9 07-02-2016 21:43
Любой язык - Извлечение определенных файлов из нескольких архивов в .bat или PowerShell dmitry1026 Скриптовые языки администрирования Windows 0 03-02-2016 13:34
PowerShell - [решено] Импорт из CSV в AD с помощью PowerShell rox33 Скриптовые языки администрирования Windows 23 20-07-2012 15:45
2003/XP/2000 - [решено] Excel 2003. Запись текстовой информации из трех ячеек в одну ячейку. Stejar Microsoft Office (Word, Excel, Outlook и т.д.) 2 15-02-2012 16:12




 
Переход