Zapisz załączniki z plików MSG

Dzisiaj dzwoni do mnie Pani, że ma dokumenty w wielu(setki) folderach i musi je wszystkie wydrukować...

Okazało się, że te foldery to były pliki Outlooka w formacie MSG (ups). Żeby to normalnie wydrukować, trzeba by było każdy plik otworzyć i zapisać załączniki. Roboty mnóstwo. No więc przychodzi mi z pomocą Powershell (jak zawsze).

Napisałem skrypt, który z każdego pliku wyciąga załączniki i zapisuje je w tym samym folderze. Skrypt działa bardzo prosto. Otwórz plik w Outlooku, zapisz wszystkie załączniki, zamknij plik. Dla uproszczenia pominąłem podawanie ścieżki do zapisu, czy sprawdzanie czy plik już istnieje. Funkcję można znacznie rozbudować.

Po wykonaniu takiego skryptu można wszystkie pliki zaznaczyć i puścić do druku lub skorzystać z mojego poprzedniego wpisu i przerobić wszystkie pliki na jeden plik PDF(jeśli są otwieralne w Wordzie).

Miłego skryptowania:

Generator PDF w Powershell za pomocą Office Word Automation

Mam tę przyjemność pracować dla ludzi, którzy często operują dużymi plikami biurowymi (doc, pdf, xls). Praca na nich jest w miarę przyjemna, o ile oczywiście mamy wystarczającą ilość pamięci. Gorzej wygląda praca na wielu malutkich plikach

Przyszła dzisiaj do mnie pewna pani i powiedziała, że ma do wydrukowania 717 plików wordowych. Każdy z nich był jednostronicowy. Opcje jakie miała:
1. Po kolei otwierać plik i drukować => Kuuuuupa roboty
2. Wszystkie naraz zaznaczyć i drukować => nie bardzo chciała pamięć współpracować
(Partiami tak by długo zeszło)
3. Wykorzystać metodę "Wstaw -> Plik" w Wordzie => niestety się trochę rozjeżdżało i naraz łykało ok. 40 plików.

No więc spiąłem poślady, zakasałem rękawy, chwyciłem za klawirkę i tak oto powstał skrypt w Powershell'u, który zamienia pliki wordowe na PDF.

Po co?

Ano wymyśliłem sobie, że przekształcę wszystkie pliki do PDFa a potem scale je w jeden, ponieważ mam świetne narzędzie do tego. Nazywa się PDFSaM (Split&Merge). Potrafi dzielić i scalać pliki PDF. No i jest do tego darmowy.

PrimalForms - Okienka w Powershellu

Zwykło się mawiać, że Powershell powstał po to, aby użytkownicy Linuxa w końcu przestali się śmiać z Windowsa i jego cmd. Faktycznie, Powershell to język dla Microsoftu przełomowy. O jego możliwościach można mówić wiele. Wspomnę narazie jedynie o dostępie do całego środowiska .NET. Krótko mówiąc, Powershell to taka powłoka skryptowa, w której mamy trzaskać skrypty automatyzujące pracę(nie bez powodu główna przestrzeń poleceń Powershella to System.Management.Automation).

Tylko co, jeśli przyjdzie nam ochota na pokazanie użytkownikowi skryptu jakiegoś okienka? Ja, dla przykładu, jestem zbyt leniwy żeby resetować użytkownikom AD hasło z poziomu konsoli. Jednocześnie też jestem zbyt leniwy żeby odpalać Remote Desktop serwera, odpalić ADUaC, znaleźć grupę, znaleźć użytkownika i dopiero wtedy zmienić mu hasło. Wolę to zautomatyzować, ograniczają się do kilku kliknięć.

To jest jeden z przykładów, kiedy okna się przydają. Z pewnością znajdzie się jeszcze parę takich zastosowań. Tylko jak tu tworzyć okna w Powershellu?
Fakt, mamy dostęp do całego .NETa, ale nie piszemy skryptów tak jak aplikacji w VisualStudio.

Zrestartuj komputer i kontynuuj skrypt

Czasami bywa tak, że działania wykonywane przez nas wymagają restartu komputera. Systemy Windows Server z założenia nie powinny być restartowane jednak instalacja pewnych głównych modułów (Active Directory itp.) wymaga restartu. W przypadku maszyn klienckich może to być dla przykładu wpięcie hosta do domeny. A co jeśli chcemy napisać skrypt, który gdzieś w środku swojego działania będzie wymagał restartu komputera?
Zadanie można wykonać w prosty sposób.
1. Dzielimy nasz skrypt na 2 pliki. Pierwszy skrypt kończy się restartem komputera a drugi wykonuje to, co powinniśmy wykonać po restarcie.
2. Prosimy Pana Windowsa o wykonanie drugiego skryptu podczas ponownego uruchamiania się systemu (dokładniej to podczas pierwszego logowania po restarcie)
3. Restartujemy

Jest taki klucz rejestru systemowego, z którego system pobiera wszystkie wpisy przy starcie systemu, wykonuje je i usuwa z tej listy. Pozwala to na jednorazowe uruchomienie aplikacji(często tak robią różne instalatory oprogramowania).
Zwie się on:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce

Instalacja Active Directory za pomocą Powershell

Załóżmy że jesteśmy studentami informatyki i rozpoczynamy zajęcia poświęcone administracji systemów Windows Server. Na początku poznajemy dostępne role, później je konfigurujemy i zarządzamy nimi. Na laboratorium mamy komputery z maszynami wirtualnymi. Niestety komputery są skonfigurowane jako "Time machine" tzn. po każdym restarcie wracają do pewnych domyślnych ustawień i tracimy naszą pieczołowicie wykonaną konfigurację. Jeśli, na ten przykład, mamy kilka zajęć z Active Directory, podczas których poznajemy coraz to więcej opcji i narzędzi, to każde zajęcia zaczynają się od zainstalowania i skonfigurowania roli oraz dodania standardowych kont itp.
Moim pomysłem jest przygotowanie skryptów w języku Powershell, które skonfigurują maszynę za nas.