Wpisy otagowane ‘PowerShell’

Przetwarzanie dokumentów w Ghostscript

czwartek, 12 Listopad 2009

Zaczęło się od braku miejsca na jednym z serwerów. Sprzątnięcie śmieci (stare dokumenty, kopie kopii, itp.) było tymczasowym rozwiązaniem problemu, który dość szybko wrócił. Źródło problemu – ‘puchnący’ katalog programu do archiwizacji dokumentów (skany PDF).

archiwizatorDokumenty mają zaledwie kilkanaście stron, więc rozmiar ponad 100 MB jest nieuzasadniony. Po rozmowie z programistą wiem, że „kontrolka jest stara i taki rozmiar wychodzi”. Jeśli nie można zapobiec, to przynajmniej spróbuję wyleczyć.
(więcej…)

PowerShell: Hello world!

wtorek, 23 Czerwiec 2009

Jakiś czas temu napisałem swój pierwszy kod w PowerShell, w sumie nie ma się czym chwalić, ale jeśli ktoś ma podobny problem jak ja – już ma gotowca. Podłoże problemu jest następujące: w harmonogramie wykonuje się (podobno spójna) kopia bazy danych i plików (jakaś rzeźba firmy, która pisze dla nas oprogramowanie), Dział Informatyczny (a w szczególności ASI) musi pilnować, by proces kończył się powodzeniem, a jego wyniki należy notować (ręcznie!) w odpowiednim zestawieniu. Ostatniego kroku niestety nie można zautomatyzować, ale po co klikać w systemie i sprawdzać wynik danej operacji, zliczać wielkość folderów, itp., skoro można zapomocą automatu agregować te informacje i odczytywać to z rana w odpowiednio przygotowanej wiadomości. I właśnie tutaj zadanie dla PowerShell.

$dir = "D:\backup"
$size = 0
$smtpServer = “smtp.domain.tld"

Get-ChildItem -recurse $dir | % {$size=$size+$_.Length}
Get-Item $dir | foreach { $last = $_.lastwritetime }

$msg = new-object Net.Mail.MailMessage
Get-ChildItem "$dir\*.TXT" -name | foreach {
$att = new-object Net.Mail.Attachment("$dir\$_")
$msg.Attachments.Add($att)
}
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$msg.From = “backupmonitor@domain.tld"
$msg.To.Add(”admin@domain.tld")
$msg.To.Add(”chief@domain.tld")
$msg.Subject = “Monitor kopii zapasowej"
$msg.Body = “Rozmiar katalogu: $size`nData modyfikacji katalogu: $last`n"
$smtp.Send($msg)

Bez komentarza w kodzie, ale mniej więcej wygląda to tak:

  • obliczamy zajętość miejsca przez zadany katalog,
  • sprawdzamy datę jego modyfikacji,
  • przygotowujemy wiadomość dodając do niej załączniki (pliki tekstowe),
  • …i wysyłamy!

Proste? Proste.

Teraz grzebię w AD…