Konwersja RTF

Dziś troszeczkę pobawimy się Officem, a konkretnie Word’em i konwersją dokumentów. Zanim przejdę dalej przedstawię sedno problemu. Mianowicie, wielu użytkowników nie zdaje sobie sprawy, iż zwykły dokument naszpikowany grafiką o wysokiej rozdzielczości, zapisany w formacie rtf, potrafi osiągać wręcz gigantyczne rozmiary. W przypadku pojedynczych plików nie jest to jeszcze duży problem, ale gdy stanowi on szablon dokumentu i co gorsza jest powielony kilkaset razy, to sytuacji zaczyna wyglądać zupełnie inaczej. Kwestia przerobienia szablonu nie jest zbyt trudnym zadaniem dla użytkownika, ale wymaganie poprawy dokumentów, na przykład z kilku letniej pracy, może już być czasochłonne i uciążliwe. Czytaj dalej

Reklamy

Symlink okiem PowerShella

Postaram się zaprezentować pewne rozwiązanie, wiem może i stare, ale ostatnio byłem zmuszony go użyć w kilku kryzysowych sytuacjach. Stare dlatego, iż stało się ono popularne już w czasach wypuszczenia na rynek systemu Windows Server 2008 szczególnie w wersji Core. By nie trzymać dłużej w niepewności to mam tutaj na myśli dowiązania – zarówno twarde jak i miękkie. Dowiązania same w sobie zostały bardzo ciekawie opisane przez Paulę Januszkiewicz w artykule „Symlink, czyli MKLINK w Windows Server 2008”, więc o teorii nie będę się rozwodził. Pominę również kwestię omawiania narzędzia mklink, gdyż nie zamierzam przepisywać plików pomocy. W artykule tym nawiążę jedynie do pewnych alternatywnych metod wykorzystywania dowiązań z poziomu PowerShell’a. Czytaj dalej

Outlook Watcher

Może i będę nudny, ale zaprezentuję jeszcze jeden przykład przechwytywania zdarzeń. Tym razem nie systemowych, ale konkretnej aplikacji, a mam tu na myśli Outlooka 2010. Zadaniem skryptu będzie wykonywanie prostego zadania w momencie odebrania wiadomości email, czyli coś na zasadzie pracy z regułami. Choć czytając miedzy wierszami chcę zaprezentować jak można przechwytywać zdarzenia z praktycznie dowolnej aplikacji, którą można zarządzać z poziomy PowerShell’a. Czytaj dalej

Raportowanie GPO

Temat zapewne niebyt nowy, ale z racji iż ostatnio był mi dość potrzebny to go odświeżę. Mianowicie problem polegał na przeprowadzeniu audytu konfiguracji, a konkretniej audytu przypisanych zasad GPO do części stacji roboczych należących do konkretnych jednostek organizacyjnych usługi Active Directory.

By wygenerować taki raport wystarczy skorzystać z przystawki „Wynikowy zestaw zasad” (RSoP) niemniej jednak gdy w posiadanym środowisku zaczyna znajdować się więcej niż kilka maszyn to może stać się to nieco uciążliwe i czasochłonne. Czytaj dalej

Word.Application

Czegóż nie zrobi się dla ukochanej osoby. Jakiś czas temu przerabiałem zarządzanie dokumentami Excela z poziomu PowerShella, natomiast dziś zaprezentuję jak pomocne może się okazać to narzędzie podczas pisania prac w Wordzie. Wiele osób może powiedzieć od czego są przecież makra, niemniej jednak z racji mojego kaprysu nie przepadam za ich wykorzystywaniem.

Zanim jednak przejdę do meritum przedstawię przypadek z jakim przyszło mi się dziś zmierzyć. Polegał on na tym, aby znaleźć sposób na stworzenie zagregowanej listy indeksów dla poszczególnego autora przy wykorzystaniu listy dostępnych artykułów.

Aby bardziej zobrazować problem:

  1. Autor1
    Opis artykułu
  2. Autor2
    Opis kolejnego artykułu
  3. Autor1
    etc…

Natomiast wynik końcowy powinien wyglądać następująco

Autor1 1, 3
Autor2 2, etc… Czytaj dalej

From PS to Zip

Dziś zaprezentuję jak przy pomocy PowerShella można zarządzać plikami Zip. Wbrew pozorom jest to bardzo prosty zabieg składający się z trzech etapów:

  1. Stworzenia pliku z odpowiednim nagłówkiem (o ile już nie istnieje)
  2. Otwarcia tego pliku
  3. Skopiowania zawartości

Ad 1) W celu stworzenia naszego pliku zip posłużymy się standardową komendą Set-Content, dzięki której wpisujemy nagłówek pliku:

$zipfile = <ścieżka do nie istniejącego narazie pliku zip>
Set-Content zipfile ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))

Ad 2) Wykorzystujemy klasę Microsoft COM (Component Object Model) Shell.Application w celu odpowiedniego otwarcia pliku:

$shellApplication = New-Object -ComObject Shell.Application
$zipPackage = $shellApplication.NameSpace($zipfile)

Ad 3)Wykorzystując metodę CopyHere obiektu zipPackage kopiujemy zawartość interesujących nas plików do paczki zip:

$file = <ścieżka do interesującego nas pliku>
$zipPackage.CopyHere($file)

W wielkim skrócie to tyle. Poniżej jednak przedstawię gotowe funkcję, które wykorzystuję gdy zajdzie potrzeba pracy z plikami zip. W szczególności przydatne na maszynach w wersji Core, gdzie nie ma dostępu do explorera aby móc coś wypakować lub spakować.

Czytaj dalej