![]() |
Извлечение информации из Excel с помощью PowerShell
Добрый день.
Помогите пожалуйста составить скрипт PowerShell который: 1.Открывал заданный файл Excel, содержащий имена и даты. 2.Находил в нем строчки с датой отличающейся от сегодняшней менее чем на 20 дней. 3.Отсылал найденные строчки по электронной почте. |
Код:
$body = Import-Excel "C:\Users.xlsx" | Where { ![]() Пример вывода: Код:
Имя Дата |
Спасибо за ответ. Подскажите, а как установить Import-Excel?
|
При запуске кода возникает ошибка:
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 Подскажите, как это можно исправить? |
Alexchandr, самым правильным будет, если Вы выложите образец Вашего:
Цитата:
|
Вложений: 1
Вот сам файл.
|
|
Исправил второй столбец на "Дата".
Ошибка осталась. 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" : "Ссылка на объект н |
Код:
PS > Import-Excel C:\user.xlsx Код:
$body = Import-Excel "C:\Users.xlsx" | Where {$_.Дата} | Where { Код:
PS > Import-Excel C:\user.xlsx | Where {$_.Дата} | Where { Код:
$t = New-TimeSpan (Get-Date).ToString("dd.MM") ($_.Дата.ToString("dd.MM")) Код:
$t = New-TimeSpan (Get-Date).ToString("MM.dd") ($_.Дата.ToString("MM.dd")) |
Спасибо большое! Заработало!
Единственное, MS Outlook2010 почему то не отображает русские шрифты. ??? ???? --- ---- ???? 05.11.1965 0:00:00 ???? 01.11.2000 0:00:00 Еще раз спасибо. |
Попробовать указать параметр -Encoding:
Код:
send-mailmessage -encoding [System.Text.Encoding]::UTF8 |
Выдает ошибку:
>> send-mailmessage -encoding [System.Text.Encoding]::UTF8 -from "user01@example.com" -to "user01@example.com" -subject "Date" -body $body -smtpServer smtp.fabrikam.com >> } >> Send-MailMessage : Не удается привязать параметр "Encoding". Не удается преобразовать значение "[System.Text.Encoding]: :UTF8" типа "System.String" в тип "System.Text.Encoding". строка:3 знак:28 + send-mailmessage -encoding [System.Text.Encoding]::UTF8 -from "user01@e ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Send-MailMessage], ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.SendMailMessage |
С -encoding разобрался.
Но столкнулся с новой проблемой: если имя в таблице длинное, то оно обрезается в почтовом сообщении. № Наименование инструкции Дата пересмотра - ----------------------- --------------- 5 По эксплуатации ПО «Журнал учета пер... 01.11.2016 0:00:00 6 По эксплуатации программного комплек... 02.11.2016 0:00:00 |
Код:
Out-String -Width 250 |
Спасибо за помощь.
Подскажите, как нибудь можно форматировать ширину столбца, интервал между столбцами в почтовом сообщении? Хотелось бы увеличить интервал между первым и вторым столбцом, а между вторым и третьим уменьшить. Входящее сообщение имеет вид ( Код:
№ Дата пересмотра Наименование инструкции |
Время: 08:15. |
Время: 08:15.
© OSzone.net 2001-