Автор Тема: PoSh Send-MailMessage  (Прочитано 6021 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн sirarthur

  • Старожил
  • ****
  • Сообщений: 577
  • Рейтинг: 5
  • Пол: Мужской
    • Просмотр профиля
PoSh Send-MailMessage
« : 18 февраля 2016, 14:25:27 »
Подскажите - что-то   затупил, не понимаю как   получить строку
Идея - в крон запихнуть проверялку  размеров почтовых ящиков, дабы  нерадивых пользователей  вразумить - и генеральному потихому прирезать еще кусочек ящика. Генеральный сидит на маке - кок мак  отреагирует на квоту - не понятно
Написал:
$from= "**********"
$To="***********"
$msg=Get-MailboxStatistics -Server exch10 | Where {$_.ObjectClass -notlike "*SystemMailbox*" -and  @('IssueWarning','ProhibitSend','MailboxDisabled') -contains $_.StorageLimitStatus -and $_.DisconnectDate -isnot [object]}
$messageParameters = @{
smtpServer = “ыукмук”
From = [string]$from
To = [string]$To
Subject = "Storadge limit information"
Body = $msg
}
Send-MailMessage @messageParameters -BodyAsHtml

при Body = $msg - в консоль вылезает ошибка
Цитировать
Send-MailMessage : Не удается преобразовать "System.Object[]" в тип "System.String", необходимый для параметра "Body".
Указанный метод не поддерживается.
строка:8 знак:17
+ Send-MailMessage <<<<  @messageParameters -BodyAsHtml
    + CategoryInfo          : InvalidArgument: (:) [Send-MailMessage], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.SendMailMessage
делаю Body =[string] $msg
Получаю письмо с телом:
Цитировать
Microsoft.Exchange.Data.Mapi.MailboxStatistics Microsoft.Exchange.Data.Mapi.MailboxStatistics

Спрашиваю в консоли:

Цитировать
[PS] C:\Windows\system32>$msg=Get-MailboxStatistics -Server exch10 | Where {$_.ObjectClass -notlike "*SystemMailbox*" -a
nd  @('IssueWarning','ProhibitSend','MailboxDisabled') -contains $_.StorageLimitStatus -and $_.DisconnectDate -isnot [ob
ject]}
[PS] C:\Windows\system32>$msg

DisplayName               ItemCount    StorageLimitStatus                                                 LastLogonTime
-----------               ---------    ------------------                                                 -------------
***********           2035               IssueWarning                                            18.02.2016 9:42:05
**** Денис               13272              IssueWarning                                           18.02.2016 13:54:48
как в письме вывод передать?

Оффлайн Fray

  • Администратор
  • Олдфаг
  • *****
  • Сообщений: 6671
  • Рейтинг: 58
  • Пол: Мужской
    • Просмотр профиля
    • IT-Бложек
  • Откуда: Петербург
PoSh Send-MailMessage
« Ответ #1 : 18 февраля 2016, 14:37:56 »
Так может  -BodyAsHtml убрать?
MCSE: Messaging, MCSE: Communication, MCSE: Productivity, MCSA: Office 365, MCPS
my blog - http://it-blojek.ru

Оффлайн shs

  • Модераторы
  • Ветеран
  • *****
  • Сообщений: 4401
  • Рейтинг: 89
    • Просмотр профиля
    • ShS's blog
  • Откуда: Default city
PoSh Send-MailMessage
« Ответ #2 : 18 февраля 2016, 14:43:12 »
попробуй так:
$msg=Get-MailboxStatistics -Server exch10 | Where {$_.ObjectClass -notlike "*SystemMailbox*" -and  @('IssueWarning','ProhibitSend','MailboxDisabled') -contains $_.StorageLimitStatus -and $_.DisconnectDate -isnot [object]}| Out-String -Stream

или без -stream:

$msg=Get-MailboxStatistics -Server exch10 | Where {$_.ObjectClass -notlike "*SystemMailbox*" -and  @('IssueWarning','ProhibitSend','MailboxDisabled') -contains $_.StorageLimitStatus -and $_.DisconnectDate -isnot [object]}| Out-String


Updated: 18 February 2016, 14:51:42

Так может  -BodyAsHtml убрать?
не, там же в ошибке явно написано, что она не смогла в строку объект преобразовать, надо ей помочь  :idea:
« Последнее редактирование: 18 февраля 2016, 14:51:42 от shs »

Оффлайн sirarthur

  • Старожил
  • ****
  • Сообщений: 577
  • Рейтинг: 5
  • Пол: Мужской
    • Просмотр профиля
PoSh Send-MailMessage
« Ответ #3 : 18 февраля 2016, 16:21:02 »
-Stream
Тоже ругнулся что нужно преобразовать..
Убрал стрим - письмо пришло - теперь надо кодировку менять...


Updated: 18 February 2016, 16:21:21

Цитировать
DisplayName ItemCount StorageLimitStatus LastLogonTime
----------- --------- ------------------ -------------
??????? ??????? 2038 IssueWarning 18.02.2016 15:21:25
????? ????? 13281 IssueWarning 18.02.2016 15:54:54

Оффлайн shs

  • Модераторы
  • Ветеран
  • *****
  • Сообщений: 4401
  • Рейтинг: 89
    • Просмотр профиля
    • ShS's blog
  • Откуда: Default city
PoSh Send-MailMessage
« Ответ #4 : 18 февраля 2016, 16:23:02 »
Убрал стрим - письмо пришло - теперь надо кодировку менять...
Дык это в параметрах командлета, отправляющего письмо, указывается.

Оффлайн Fray

  • Администратор
  • Олдфаг
  • *****
  • Сообщений: 6671
  • Рейтинг: 58
  • Пол: Мужской
    • Просмотр профиля
    • IT-Бложек
  • Откуда: Петербург
PoSh Send-MailMessage
« Ответ #5 : 18 февраля 2016, 16:25:00 »
$encoding = [System.Text.Encoding]::UTF8
Send-MailMessage ......  -Encoding $encoding
MCSE: Messaging, MCSE: Communication, MCSE: Productivity, MCSA: Office 365, MCPS
my blog - http://it-blojek.ru

Оффлайн shs

  • Модераторы
  • Ветеран
  • *****
  • Сообщений: 4401
  • Рейтинг: 89
    • Просмотр профиля
    • ShS's blog
  • Откуда: Default city
PoSh Send-MailMessage
« Ответ #6 : 18 февраля 2016, 16:25:17 »
ага, параметр -Encoding
попробуй варианты: Default или UTF8

Оффлайн sirarthur

  • Старожил
  • ****
  • Сообщений: 577
  • Рейтинг: 5
  • Пол: Мужской
    • Просмотр профиля
PoSh Send-MailMessage
« Ответ #7 : 18 февраля 2016, 16:29:53 »
чет я сегодня  конкретно тормоз
Посмотрел хелп send-mailmessage, пишу
Цитировать
>> Send-MailMessage @messageParameters -BodyAsHtml -Encoding UTF8
>>
Send-MailMessage : Не удается привязать параметр "Encoding". Не удается преобразовать значение "UTF8" типа "System.String" в тип "System.Text.Encoding".

сделал так:

$from= "отнах"
$To="первонах"
$msg=Get-MailboxStatistics -Server exch10 | Where {$_.ObjectClass -notlike "*SystemMailbox*" -and  @('IssueWarning','ProhibitSend','MailboxDisabled') -contains $_.StorageLimitStatus -and $_.DisconnectDate -isnot [object]}| Out-String
$messageParameters = @{
smtpServer = “серверк”
From = [string]$from
To = [string]$To
Subject = "Storadge limit information"
Body = $msg
}
Send-MailMessage @messageParameters -BodyAsHtml -Encoding ([System.Text.Encoding]::UTF8)

Оффлайн shs

  • Модераторы
  • Ветеран
  • *****
  • Сообщений: 4401
  • Рейтинг: 89
    • Просмотр профиля
    • ShS's blog
  • Откуда: Default city
PoSh Send-MailMessage
« Ответ #8 : 18 февраля 2016, 16:34:46 »
Send-MailMessage : Не удается привязать параметр "Encoding". Не удается преобразовать значение "UTF8" типа "System.String" в тип "System.Text.Encoding".
Посмотри, как у Fray'я:

[System.Text.Encoding]::UTF8
[System.Text.Encoding]::Default

Оффлайн Fray

  • Администратор
  • Олдфаг
  • *****
  • Сообщений: 6671
  • Рейтинг: 58
  • Пол: Мужской
    • Просмотр профиля
    • IT-Бложек
  • Откуда: Петербург
PoSh Send-MailMessage
« Ответ #9 : 18 февраля 2016, 16:35:34 »
$encoding = [System.Text.Encoding]::UTF8
Send-MailMessage ......  -Encoding $encoding
А так?
MCSE: Messaging, MCSE: Communication, MCSE: Productivity, MCSA: Office 365, MCPS
my blog - http://it-blojek.ru

Оффлайн sirarthur

  • Старожил
  • ****
  • Сообщений: 577
  • Рейтинг: 5
  • Пол: Мужской
    • Просмотр профиля
PoSh Send-MailMessage
« Ответ #10 : 18 февраля 2016, 16:50:22 »
да оно и так   и так работает :)
что -Encoding ([System.Text.Encoding]::UTF8)
что $encoding = [System.Text.Encoding]::UTF8
приходит читабельно
:)



Updated: 18 February 2016, 17:46:59

гхм.. а как теперь это в шедулер  запихать? шедулер же  запустит его через обычный ps, нет?  ???
« Последнее редактирование: 18 февраля 2016, 17:46:59 от sirarthur »

Оффлайн Fray

  • Администратор
  • Олдфаг
  • *****
  • Сообщений: 6671
  • Рейтинг: 58
  • Пол: Мужской
    • Просмотр профиля
    • IT-Бложек
  • Откуда: Петербург
PoSh Send-MailMessage
« Ответ #11 : 18 февраля 2016, 17:47:50 »
гхм.. а как теперь это в шедулер  запихать? шедулер же  запустит его через обычный ps, нет?
Запускать через cmd:

powershell.exe c:\script.ps1
MCSE: Messaging, MCSE: Communication, MCSE: Productivity, MCSA: Office 365, MCPS
my blog - http://it-blojek.ru

Оффлайн sirarthur

  • Старожил
  • ****
  • Сообщений: 577
  • Рейтинг: 5
  • Пол: Мужской
    • Просмотр профиля
PoSh Send-MailMessage
« Ответ #12 : 18 февраля 2016, 18:00:47 »
запускаю
Цитировать
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -version 2.0 -noexit -command ". 'C:\scripts\st-lim.ps1'
получаю
Цитировать
Имя "Get-MailboxStatistics" не распознано как имя командлета, функции, файла скрипта или выполняемой программы. Проверьте правильность написания имени, а также наличие и правильность пути, после чего повторите попытку.
C:\scripts\st-lim.ps1:3 знак:27
+ $msg=Get-MailboxStatistics <<<<  -Server exch10 | Where {$_.ObjectClass -notlike "*SystemMailbox*" -and  @('IssueWarning','ProhibitSend','MailboxDisabled')
-contains $_.StorageLimitStatus -and $_.DisconnectDate -isnot [object]}| Out-String
    + CategoryInfo          : ObjectNotFound: (Get-MailboxStatistics:String) [   ], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Send-MailMessage : Не удается проверить аргумент для параметра "Body". Аргумент
 пустой или имеет значение NULL. Укажите не пустой аргумент, не имеющий значение NULL, после чего повторите выполнение команды.
C:\scripts\st-lim.ps1:11 знак:17
+ Send-MailMessage <<<<  @messageParameters -BodyAsHtml -Encoding ([System.Text.Encoding]::UTF8)
    + CategoryInfo          : InvalidData: (:) [Send-MailMessage], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Power   Shell.Commands.SendMailMessage
через exch manag shell - работает.

Оффлайн Fray

  • Администратор
  • Олдфаг
  • *****
  • Сообщений: 6671
  • Рейтинг: 58
  • Пол: Мужской
    • Просмотр профиля
    • IT-Бложек
  • Откуда: Петербург
PoSh Send-MailMessage
« Ответ #13 : 18 февраля 2016, 18:08:47 »
sirarthur, а, ну так надо сначала модули exchange подгружать. Это же не просто в powershell надо выполнять, а в exchange shell
MCSE: Messaging, MCSE: Communication, MCSE: Productivity, MCSA: Office 365, MCPS
my blog - http://it-blojek.ru

Оффлайн sirarthur

  • Старожил
  • ****
  • Сообщений: 577
  • Рейтинг: 5
  • Пол: Мужской
    • Просмотр профиля
PoSh Send-MailMessage
« Ответ #14 : 18 февраля 2016, 18:17:51 »
Fray, так?
Цитировать
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -version 2.0 -noexit -command ". 'C:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto ;'C:\scripts\st-lim.ps1'"