PowerShell: скрипт автопубликации изображений на блог

В продолжение записи о PowerShell, решил не жадничать, и публиковать свои скрипты. Вдруг кому-то пригодятся? Сразу хочу предупредить, я не профи, код вряд-ли выглядит красиво и правильно, но суть в том, что скрипты свою работу выполняют.

Ниже-указанный скрипт публикует запись на блог, с помощью smtp, то есть используя почту.

Сама суть следующая: есть текстовый файл в котором в каждой строке храниться ссылка на изображение. В taskscheduler создается задание,  которое периодично (у меня раз в час) запускает скрипт. Сам же скрипт смотрит который сейчас час, и если время публикации наступило, значит нужно взять ссылку с текстового файла, отправить запись с изображением на блог и удалить эту ссылку из текстового файла.

#Автор скрипта: https://elims.org.ua
Function Get-Image{
 begin{[void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") |Out-Null}
 process{
  $fi=[System.IO.FileInfo]$_
  if( $fi.Exists){
   $img = [System.Drawing.Image]::FromFile($_)
   $img.Clone()
   $img.Dispose()
  }else{Write-Host "File not found: $_" -fore yellow }
 }
 end{}
}

#условие с помощью которого указывается в которые часы добавлять картинку на блог
if(((Get-Date).Hour -eq 0) -or ((Get-Date).Hour -eq 2) -or ((Get-Date).Hour -eq 4) -or ((Get-Date).Hour -eq 6) -or ((Get-Date).Hour -eq 8) -or ((Get-Date).Hour -eq 10) -or ((Get-Date).Hour -eq 12) -or ((Get-Date).Hour -eq 14) -or ((Get-Date).Hour -eq 16) -or ((Get-Date).Hour -eq 19) -or ((Get-Date).Hour -eq 20) -or ((Get-Date).Hour -eq 22)) {

 #читаем содержимое файла в масив построчно и берем из первой строки url добавляемого изображения
 $file = Get-Content "Путь_к_файлу_со_списком_ссылок_на_изображения.txt"
 $url = $file[0]

 #Скачиваем добавляемое изображение
 $webclient = New-Object System.Net.WebClient
 $file_temp = "D:\ImageSize.jpg"
 $webclient.DownloadFile($url,$file_temp)

 #Получаем ширину и высоту изображения
 $image = $file_temp | Get-Image
 $Width = $image.Width
 $Height = $image.Height
 if ($Width -gt $Height) {
  $width_or_height = "width" }
 else {
  $width_or_height = "height"
 }

 $l = Get-Item "Путь_к_файлу_со_списком_ссылок_на_изображения.txt"
 #если размер файла = 0 байт - отправляем на почту оповещение о пустой очереди, в ином случае отправляем изображение из очереди на блог
 if ($l.Length -eq 0) {
  #пароль и юзернейм от почты
  $secpasswd = ConvertTo-SecureString "ваш_пароль_от_почты" -AsPlainText -Force #пароль от почты
  $mycreds = New-Object System.Management.Automation.PSCredential ("логин_почты", $secpasswd) #логин от почты
  #отправка письма о том что файл с ссылками пустой
  send-mailmessage -to "на_какую_почту_слать" -from "логин_почты@yandex.ru" -subject "Очередь пуста!" -body "Очередь пуста!" -smtpserver smtp.yandex.ru -credential $mycreds }
 else {
  #Отправляем запись в блоги через smtp
  $secpasswd = ConvertTo-SecureString "Пароль_от_почты" -AsPlainText -Force #пароль от почты
  $mycreds = New-Object System.Management.Automation.PSCredential ("логин_от_почты", $secpasswd) #логин от почты
  send-mailmessage -to "секретный_ящик@blogger.com" -from "логин_от_почты@yandex.ru" -Encoding ([System.Text.Encoding]::UTF8) -subject " " -bodyasHTML -body "<center><img src=`"$url`" $width_or_height=`"100%`" /></center>" -smtpserver smtp.yandex.ru -credential $mycreds
  #Записываем в логфайл время и ссылку добавленного изображения
  $file_log = "Путь_к_логфайлу.txt"
  $time = "{0:yyyy-MM-dd HH:mm:ss}" -f (get-date)
  $string = "$time $url"
  $string | Out-File -Append $file_log -Encoding UTF8
  #Удаляем отправленную картинку из очереди
  $file = "Путь_к_файлу_со_списком_ссылок_на_изображения.txt"
  $file_temp = "D:\Temp.txt"
  get-content $file | select -Skip 1 | set-content $file-temp
  move $file-temp $file -Force
 }
}
Понравилось? =) Поделись с друзьями:

Обсудить