Welcome to TechNet Blogs Sign in | Join | Help

W roku 2010 na pewno wydarzy się wiele ważnych rzeczy, ale poza nimi warto zapisać sobie w kalendarzu trzy daty związane z tak zwanymi "klienckimi" systemami:

  • Pierwszy marca 2010 – od tego dnia, Windows 7 RC zacznie się automatycznie restartować co dwie godziny, w ten subtelny sposób zwracając uwagę użytkownika na fakt, że wypadałoby zainstalować wersję finalną. Warto pamiętać, że oficjalnie nie istnieje ścieżka migracji z wersji RC do wersji finalnej, ale szczególnie uparty użytkownik może tego dokonać zmieniając zawartość jednego z plików ini, podobnie jak miało to miejsce podczas upgrade z wersji beta do RC.
  • Trzynasty kwietnia 2010 – koniec wsparcia dla Windows Vista bez Service Pack. Jeżeli ktoś jeszcze nie ma SP1 lub SP2, to lepiej późno niż wcale. SP2 można pobrać ze stron Microsoft.
  • Trzynasty lipca 2010 – koniec wsparcia dla Windows XP SP2 – podobnie jak w poprzednim przypadku, warto pomyśleć o poprawkach. Oczywiście SP3 również można pobrać ze stron Microsoft.

Zdaję sobie sprawę, że w większych środowiskach konieczność aktualizacji może być sporym problemem. Ale z drugiej strony – może już pora na aktualizację? SP2 do Windows XP wydaje się taki świeży, a ma już prawie 6 lat...

Autor: Grzegorz Tworek [MVP]

Zapowiadałem, zapowiadałem i w końcu pora to w jakieś konkrety ubrać. Jak zwykle, zasada jest bardzo prosta: Napisz coś dla polskiej Wikipedii, a ja poszukam czegoś w zamian za twój wkład.

U mnie na parapecie stoją sobie w ładnych pudełkach: Office 2007 Professional, Windows Vista Ultimate, Windows Vista Business. Wszystkie w wersjach polskich, wszystkie legalne, nierozpakowane i z pełnymi licencjami tak jak ze sklepu.
Moje oczekiwania: artykuł ma dotyczyć produktów lub technologii Microsoft nie starszych niż 2-3 lata. Liczy się każdy wkład. Edycja (dowolna, łącznie z krytyką) za 1 punkt, dowolny nowy artykuł – 5 punktów, za ilustrację (uwaga trudne!) – 5 punktów. Od piszących oczekuję dwóch maili (na adres @iscg.pl) – pierwszego w chwili rozpoczęcia zabawy i zawierającego login na Wikipedii. Drugi mail chciałbym dostać do końca dnia 8.02 i w nim tabelkę z punktami. Za największą ilość punktów powysyłam pocztą oprogramowanie. Za pierwsze miejsce Office, za drugie Windows Vista Ultimate, za trzecie Windows Vista Business.

Całość jest moją prywatną inicjatywą i stoję za nią tylko ja :) A ciąg dalszy na pewno nastąpi.

Autor: Grzegorz Tworek [MVP]

W angielskojęzycznych (choć nie tylko) rozważaniach na temat bezpieczeństwa, tytułowy termin przewija się całkiem często i oznacza on, że ktoś wymyślił, jak możnaby wykorzystać lukę zabezpieczeń, gdyby się umiało. Ale że się nie umie, to się tworzy właśnie "proof of concept".

Rozumiem, że luki w zabezpieczeniach to poważna sprawa i znalezienie ich musi się wiązać z natychmiastową reakcją producenta. Rozumiem, że odkrywca luki chce mieć swoje parę minut sławy. Rozumiem, że opracowanie kodu, który wykorzystuje lukę do osiągnięcia własnego celu (choćby na pokaz) to naprawdę spore osiągnięcie.

Ale chwalenie się wydumanym scenariuszem, którego nie umie wprowadzić się w życie? Jakoś do mnie nie przemawia... czego to ma dowodzić, poza niekompletną wiedzą twórcy? Bo gdyby wiedza była kompletna, ów twórca mówiłby o "exploicie". Pokazałby kod, nagrałby krótki filmik, opisałby szczegółowo przypadek itp. Zamiast tego woli jednak przyjąć jakieś karkołomne, nierealne w praktyce założenie i na nim zbudować swój pseudo-dowód.

Weźmy przypadek: "Aplikacja X podatna jest na przepełnienie bufora" To zazwyczaj poważny błąd. I teraz poważny haker (nie lubię tego słowa, ale w tym kontekście ono dobrze działa) tak długo dłubie w debuggerze aż nie znajdzie, że jeżeli w polu A wpisze się wartość B, to w docelowym komputerze stanie się to i to. I mój szacunek ma gwarantowany.

A jak w tym samym przypadku wygląda proof of concept? "Bufor można przepełnić w taki sposób, że na docelowym komputerze stanie się to, co zechce atakujący". Tyle, że nigdzie nie pojawia się opis czym go przepełnić i co takiego konkretnie wtedy się stanie. Ta tajemniczość nie wynika z dobrego serca czy troski o tysiące użytkowników, tylko z niewiedzy, albo niedostatecznego zbadania tematu, albo z faktu, że poza tą jedną (być może poważną) luką, istnieją jeszcze inne zabezpieczenia, które spełniają dobrze swoje zadanie.

Oczywiście od "proof of concept" do skutecznego ataku jest jeszcze bardzo długa droga. Czasem, komuś udaje się ją przejść i całość przestaje być nagle taka wesoła, ale ogromna większość przypadków kończy swój krótki żywot pięciominutowej sławy na pokazaniu światu, że mimo głośnego krzyczenia, że to "taaaaka dziura w bezpieczeństwie", użytkownicy wcale nie są mniej bezpieczni.

Zdaję sobie sprawę, że to nieco przewrotne podejście, ale osobiście, gdy usłyszę o jakimś nowym "proof of concept", to wiem, że mogę spać spokojnie. Dlatego, że w praktyce znaczy to, że ktoś usiłował znaleźć metodę wykorzystania usterki w oprogramowaniu, ale mu się nie udało. Czyli świat jest dalej względnie bezpieczny.

Oczywiście nie zwalnia to producenta z konieczności jak najszybszego usunięcia usterki, ale to już zupełnie inna historia.

Autor: Grzegorz Tworek [MVP]

Edit: poprawienie oczywistego błędu, dziękuję dmusial za zwrócenie uwagi.

Blue Screen jest dla mnie jednym z najciekawszych trybów pracy systemu. Wiem, że wielu użytkowników nie podziela mojego zdania, ale pod tym niebieskim ekranem dzieją się naprawdę interesujące rzeczy.

Jedną z nich jest tworzenie zrzutu pamięci. To nie jest takie proste jak się może wydawać, ale z punktu użytkownika widać przede wszystkim interfejs. A w nim (w oknie Startup and Recovery) jest wybór zawartości dumpa. Tradycyjnie, opcje są cztery:

I mimo, że w nowszych systemach w szczegółach coś się zmienia, to ogólna idea pozostaje taka sama "od zawsze". W Windows 7 pojawia się jednak drobny problem:

image

Nie ma opcji zrzutu całej pamięci. Może i słusznie...? Nie wiem. Wiem za to, że jeżeli ktoś bardzo chce – może ją sobie włączyć przez rejestr. W gałęzi HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl jest wartość CrashDumpEnabled. Tam zapisany jest tryb zrzutu, gdzie:

  • 0 oznacza brak zrzutu,
  • 1 – zrzut pełny,
  • 2 – zrzut jądra,
  • 3 – small dump.

Wystarczy wpisać tam 1 i nie dość, że będą się wykonywać pełne zrzuty, to jeszcze brakująca opcja pojawi się w GUI. Tak swoją drogą, na komputerach z ilością pamięci RAM mniejszą niż 2GB opcja ta jest normalnie widoczna. Ot takie ustawienie, żeby "grzebacz" nie włączył sobie mechanizmu wrzucającego mu na dysk ogromne pliki. Nie wiem, czy lubię jak ktoś do tego stopnia myśli za mnie, ale znając trik z rejestrem, nie mam w tym przypadku wielkiego problemu.

Tak swoją drogą, dla niemyślących, Microsoft przygotował jeszcze jedną niespodziankę. Jeżeli Windows 7 nie jest w domenie i ma mniej niż 25GB wolnego miejsca na dysku – zrzut się nie wykona. Oczywiście można to sobie w rejestrze włączyć (AlwaysKeepMemoryDump=1). Trochę więcej informacji na ten temat można znaleźć na http://blogs.msdn.com/wer/archive/2009/02/09/kernel-dump-storage-and-clean-up-behavior-in-windows-7.aspx

Autor: Grzegorz Tworek [MVP]

Czasem zdarza się, że zasoby plikowe w sieci powinny mieć wysoką dostępność. Czasem do tego, zdarza się, że z pośród kilku dostępnych opcji, najlepiej sprawdzi się klasyczny klaster MSCS. Nawet może zdarzyć się i tak, że klient da się przekonać, żeby ten klaster zbudować na Windows Server 2008R2.

I wszystko jest super, póki nie okaże się, że mając stary serwer plików, nowy klaster i skopiowane dane, musimy teraz pracowicie jeszcze raz udostępnić wszystkie foldery konfigurując dla każdego z nich parametry takie jak nazwa, ścieżka, opis, uprawnienia i ilość dozwolonych użytkowników. I to nie identycznie, ale z delikatnymi zmianami. Dla dwóch udziałów jest prosto, dla dziesięciu – da się przeżyć, dla pięćdziesięciu – zacznę się zastanawiać, czy nie mam pod ręką jakiegoś praktykanta a dla tysięcy...? Pozostają rozwiązania automatyczne, czytaj skryptowe. Miało nie być przez jakiś czas o PowerShellu, ale cóż poradzę, że właśnie to środowisko działa najlepiej...?

Tak czy inaczej, przy tworzeniu udziałów dobrze sprawdza się WMI. Mając klasę Win32_Share można sobie prosto czytać i tworzyć udziały i niejeden skrypt produkcyjnie to robi uszczęśliwiając użytkowników.

Nieco gorzej jest w klastrze. Plątało mi się po głowie, że zrobienie udziału przez Win32_Share zrobi go lokalnie na węźle będącym w danej chwili właścicielem zasobu. A nie o to chodzi! Miało być w klastrze. Do udziałów w klastrze była klasa Win32_ClusterShare. Czasem też spotykało się rozwiązania polegające na użyciu innej przestrzeni niż cimv2, czyli zasadniczo – "rzeźbienie". Założyłem więc sobie, że trochę czasu mi na rozgryzienie tego wszystkiego zejdzie. Próby wydawały się obiecujące, tylko metoda Create() zamiast upragnionego 0 zwracała uparcie 25 i udziały nie chciały się pojawiać.

Zacząłem więc dłubać i szukać i szukać i szukać... I nic mądrego nie znalazłem poza artykułem zupełnie nie na temat mojego problemu: http://support.microsoft.com/kb/971403 Otóż węzły klastra zapytane o udziały, nie zwracają informacji o udziałach lokalnych. I tu pojawiło mi się w głowie pytanie: to co zwracają? Oczywiście w wersj 2008 R2, wspomniany powyżej błąd dawno jest usunięty, ale i tak efekt mnie zaskoczył: Win32_Share zwraca informacje o zasobach lokalnych i klastrowych. Szybka próba z Create() i jest! Założony na dysku klastra staje się udziałem klastrowym a na innym dysku – udziałem lokalnym. Działa to przez tak przez WMI jak i przez stare dobre "net share".
A ja tak kombinowałem. Na usprawiedliwienie mam tylko to, że w Windows 2003 to było naprawdę dużo bardziej skomplikowane...

Szczęśliwi, którzy nie znają starszych systemów... ;)

Autor: Grzegorz Tworek [MVP]

PS. W Windows Server 2008 nie ma już magicznego ograniczenia do 1674 zasobów w klastrze, ale i tak nie byłoby ono tutaj problemem. Tyle, że to już zupełnie inna historia.

Nagle, parę dni temu, zupełnie nie wiadomo dlaczego, zrobiło się głośno o GodMode, SuperAdmin panel i innych nazwach tego samego zjawiska. Cała magia polega na tym, że jeżeli utworzymy folder o nazwie, której rozszerzenie jest równe GUIDowi danego rozszerzenia Explorera, to Explorer będzie traktował ten folder jako skrót do funkcjonalności. Czy to dobrze? Ciężko powiedzieć... źle chyba nie, ale używać nie zamierzam. W zasadzie, w ogóle użycie Explorera ograniczam do minimum, więc to pewnie dlatego.

Ważne jest jednak, aby wiedzieć, że to żadne czary. Po prostu w systemie jest trochę "specjalnych" lokalizacji i można do nich sięgnąć. Taką drogą, jak kto lubi. Jeżeli przez tworzenie folderów – droga wolna, czemu nie.

Dla ciekawych, polecam do przetestowania na przykład rozszerzenia:

  • {00C6D95F-329C-409a-81D7-C46C66EA7F33}
  • {0142e4d0-fb7a-11dc-ba4a-000ffe7ab428}
  • {025A5937-A6BE-4686-A844-36FE4BEC8B6D}
  • {05d7b0f4-2121-4eff-bf6b-ed3f69b894d9}
  • {0DF44EAA-FF21-4412-828E-260A8728E7F1}
  • {1206F5F1-0569-412C-8FEC-3204630DFB70}
  • {15eae92e-f17a-4431-9f28-805e482dafd4}
  • {17cd9488-1228-4b2f-88ce-4298e93e0966}
  • {1D2680C9-0E2A-469d-B787-065558BC7D43}
  • {1FA9085F-25A2-489B-85D4-86326EEDCD87}
  • {208D2C60-3AEA-1069-A2D7-08002B30309D}
  • {20D04FE0-3AEA-1069-A2D8-08002B30309D}
  • {2227A280-3AEA-1069-A2DE-08002B30309D}
  • {22c6c651-f6ea-46be-bc83-54e83314c67f}
  • {241D7C96-F8BF-4F85-B01F-E2B043341A4B}
  • {2559a1f1-21d7-11d4-bdaf-00c04f60b9f0}
  • {2559a1f5-21d7-11d4-bdaf-00c04f60b9f0}
  • {4026492F-2F69-46B8-B9BF-5654FC07E423}
  • {62D8ED13-C9D0-4CE8-A914-47DD628FB1B0}
  • {78F3955E-3B90-4184-BD14-5397C15F1EFC}

Nie przestaje mnie zdumiewać jak bardzo można się zafascynować okrężnymi drogami zrobienia prostych rzeczy... ;)

Osobiście pozostanę przy uruchamianiu tych funkcjonalności bardziej tradycyjną drogą.

Autor: Grzegorz Tworek [MVP]

Tym razem będzie o programowaniu. Za to o programowaniu w PowerShellu, czyli tak bardziej dla administratorów. W ramach jednego z projektów dłubię ostatnio skrypt wczytujący z pliku dane i na ich podstawie modyfikujący w środowisku sporo różnych atrybutów. Ot, klient zażyczył sobie, żeby konfiguracja była zgodna z korporacyjnymi regułami i konwencjami i chwała mu za to.

Oprogramowanie tego przez prosty plik EXE wywołujący właściwe funkcje API byłoby względnie łatwe, ale od pewnego czasu tłumaczę wszystkim "uczcie się PowerShella i próbujcie w nim rozwiązywać wasze zadania administracyjne" i sam też się do tego próbuję zmuszać. Ma to swój sens, ale to zupełnie inny temat.

W każdym razie mój skrypt sobie rośnie (głównie ze względu na odczytywanie i ustawianie ACLi) i ma na razie kilkaset linii. Rozmiar wynika również w sporym stopniu z tego, że założyłem sobie, że w którymś momencie klient zostanie ze skryptem sam i dobrze byłoby, gdyby na ekranie jasno widział, dlaczego coś nie działa i co ma zmienić w pliku wejściowym. Ze względu na obsługę błędów, skrypt wczytuje sobie plik wejściowy, analizuje go i weryfikuje jego wykonalność, po czym albo stwierdza, że wszystko gra i przystępuje do pracy, albo grzecznie tłumaczy użytkownikowi, co jest nie tak i kończy działanie.

Do analizy danych wejściowych linia po linii użyłem prostego polecenia

$DaneZPliku | ForEach-Object {$dana=$_.cośtam; cośtam; cośtam}

gdzie $DaneZPliku zostały chwilę wcześniej wczytane. Okazało się bardzo szybko, że pusta linia w takim pliku wejściowym sprawia, że $dana ma wartość $NULL i moja procedura sprawdzająca mówi (słusznie!), że to niezbyt dobrze.

Dodałem więc prosty warunek na początku bloku:

$DaneZPliku | ForEach-Object {$dana=$_.cośtam; if ($dana –eq $NULL) {Continue}; cośtam; cośtam}

I tu okazało się, że mam problem. Zamiast (zgodnie z moim naiwnym oczekiwaniem) zacząć znęcać się nad kolejnym obiektem, mój skrypt kończył działanie. Oczywiście Continue można prosto ominąć używając If, ale tworzy to długie bloki, które potem trudniej wyłapuje się na ekranie. Continue jest milsze. Długo myślałem zanim doszedłem do prostego wniosku: tu nie ma pętli! Więc jak Continue ma działać poprawnie...? Pętle robi się używając foreach. Zmylił mnie tak naprawdę "przyjazny" alias zdefiniowany w PowerShellu...  polecenie "alias foreach" pokaże o co chodzi. Otóż wbrew temu aliasowi, polecenia te nie są tożsame. Foreach to równocześnie alias i słowo kluczowe i może to prowadzić do kłopotów.

Jeżeli chcę użyć prawdziwej pętli, to moje sprawdzanie danych wyglądać powinno tak:

foreach ($i in $DaneZPliku) {$dana=$i.cośtam; if ($dana –eq $NULL) {Continue}; cośtam; cośtam}

I to wreszcie działa jak powinno.

Jako test polecam dwa proste polecenia:

foreach ($i in 'kot','pies','but','krowa') {if ($i -eq 'but') {continue}; write-host $i} – tu mamy pętlę i wszystko działa jak powinno, omijając $i, które nie jest zwierzęciem i kontynuując działanie.

Jeżeli jednak napiszemy:

('kot','pies','but','krowa') | ForEach-Object {$i=$_; if ($i -eq 'but') {continue}; write-host $i} – to pętli tu nie ma! I Continue bez słowa kończy działanie polecenia.

Ten język tak ma i wiem, że to ja powinienem się nauczyć a nie mówić, jaki to jest głupi. Choć chętnie zobaczyłbym po prostu komunikat o błędzie w sytuacji, gdy użyję Continue poza pętlą...

Do zapamiętania pozostaje jedno: foreach to zupełnie co innego niż ForEach-Object, a fakt, że ForEach-Object można w dowolnym miejscu zastąpić przez foreach, wcale nie upraszcza sytuacji. Najlepiej odzwyczaić się od używania foreach jako aliasu i dzięki temu lepiej czuć gdzie robimy pętlę, a gdzie wcale nie.

Powershellowo się ostatnio na blogu zrobiło. Postaram się napisać coś z innej beczki, ale jak widać takie czasy, że tak zwany "ITPro" bez PowerShella się nie obejdzie...

Autor: Grzegorz Tworek [MVP]

Czasem (koniec roku to dobry pretekst) ktoś zadaje administratorom pytanie "a co tak naprawdę mamy w naszej sieci?". Administratorzy nie kochają takich pytań, głównie dlatego, że kojarzą im się z wędrówką od biurka do biurka, papierowymi arkuszami do wypełniania i przepisywaniem wszystkiego w ładne tabelki dla szefostwa.

Administrator szanujący swój czas i wiedzę skorzysta z automatu. Jest takich wynalazków wiele, pracujących na najróżniejszych zasadach, z bardzo różnymi cenami i możliwościami. Ale może by tak użyć wyłącznie tego, co już jest w systemie? Przecież jest PowerShell. Prostym skryptem (znacząco milszym niż rozwiązania vbs z ubiegłego wieku) można dowiedzieć się tego, co jest w danym momencie potrzebne.

Do sięgania do zdalnych maszyn dobrze nada się WMI. Metoda ta dostępna jest od Windows 2000 i mimo, że całkiem skuteczna – jest mało popularna w świadomości administratorów. Tymczasem ma ona dwie niepodważalne zalety:

  • Działa na zdalnych komputerach
  • Potrafi naprawdę głęboko sięgnąć po informację

Pierwsza zaleta uwolni administratora od wysyłania maili z cyklu "proszę o uruchomienie skryptu z załącznika i przesłanie mi wyniku", druga zaś pozwala odkryć rzeczy, które wydają się całkiem solidnie schowane. Szybkość i ilość kości RAMu, pojemność baterii, obroty wiatraków, numery seryjne twardych dysków itd. A do tego oczywiście zupełnie "zwykłe" rzeczy takie jak udziały sieciowe, usługi systemowe itp.

Żeby zapytać o coś używając WMI i PowerShella należy wydać polecenie:

Get-WMIObject –ComputerName  <nazwa_komputera> Nazwa_klasy_WMI

Oczywiście administrator bywa leniwy, więc robienie tego komputer po komputerze nie jest najlepszym podejściem. Zakładając, że mamy plik tekstowy z nazwami komputerów do sprawdzenia (nazwijmy go machines.txt) możemy użyć powershellowego polecenia Get-Content. W takiej sytuacji, polecenie przyjmie postać:

Get-WMIObject –ComputerName (Get-Content c:\test\machines.txt) Nazwa_klasy_WMI

O nazwach klas będzie jeszcze za chwilę, ale na razie można dla testów spróbować z Win32_Product.

Jak widać ,coś jest zwracane, wygląda nawet jak lista zainstalowanego oprogramowania ale... jakoś jest tak skromnie z tymi informacjami. To już urok PowerShella, że jak mu administrator nie powie wprost, co jest dla niego ważne, to PowerShell spróbuje odgadnąć sam. Wystarczy poprosić "daj mi wszystko co wiesz" i od razu informacji jest o wiele więcej:

Get-WMIObject –ComputerName (Get-Content c:\test\machines.txt) Win32_Product | Select-Object *

Oczywiście zamiast gwiazdki (oznaczającej wszystkie właściwości danej klasy) można samodzielnie wymienić te właściwości, które są szczególnie interesujące. Na przykład:

Get-WMIObject –ComputerName (Get-Content c:\test\machines.txt) Win32_Product | Select-Object Caption, InstallDate

Otrzymaną w ten sposób listę można filtrować (na przykład nie wyświetlać oprogramowania zawierającego w swojej nazwie słowo "Microsoft") przy pomocy polecenia Where-Object:

Get-WMIObject –ComputerName (Get-Content c:\test\machines.txt) Win32_Product | Where-Object {$_.Caption –notlike '*Microsoft*'} | Select-Object Caption, InstallDate

Składnia polecenia Where-Object wymaga nieco wprawy, ale znając operatory like i notlike można dość prosto zmodyfikować na własne potrzeby powyższy przykład. Można oczywiście zamiast filtrować po nazwie użyć właściwości Vendor, która pokazuje aplikacje Microsoftu nawet, jeżeli ich nazwa nie zawiera bezpośrednio tej informacji.

Dla administratora te parę linijek na ekranie to rzecz cenna, ale co z szefostwem?Są to zwykle ludzie nadzwyczaj odporni na piękno PowerShella... Dla nich istnieją polecenia ConvertTo-Html. Wygenerowana na ekranie tabelka może być w HTMLu, dzięki czemu można ją wkleić do maila albo pokazać komuś nie-informatycznemu. Użycie jest bardzo proste: wynik wygenerowany przez poprzedni przykład należy przekazać (używając | jak to w PowerShell) do wspomnianego powyżej ConvertTo-HTML.

Get-WMIObject –ComputerName (Get-Content c:\test\machines.txt) Win32_Product | Where-Object {$_.Caption –notlike '*Microsoft*'} | Select-Object Caption, InstallDate | ConvertTo-Html

Działa? Działa… tylko wynik pojawia się na ekranie. PowerShell tak właśnie robi, jeżeli administrator jasno nie powie, co ma się z wynikiem stać. Więc powiedzmy – oddajmy go kolejnemu powershellowemu mechanizmowi, który zapisze go do pliku:

Get-WMIObject –ComputerName (Get-Content c:\test\machines.txt) Win32_Product | Where-Object {$_.Caption –notlike '*Microsoft*'} | Select-Object Caption, InstallDate | ConvertTo-Html | Out-File c:\test\oprogramowanie.html

Plik powstał, tabelka się otwiera w przeglądarce, ale jeszcze może razić niektórych estetów. Dlatego, warto zrobić sobie zmienną $naglowek zawierającą parę wskazówek na temat formatowania:

$naglowek = "<style>"
$naglowek = $naglowek + "BODY{background-color:pink;}"
$naglowek = $naglowek + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"
$naglowek = $naglowek + "TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:green}"
$naglowek = $naglowek + "TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:yellow}"
$naglowek = $naglowek + "</style>"

Nie należy ani trochę ufać moim sugestiom estetycznym i lepiej spróbować z własnymi ulubionymi kolorami.

Teraz wystarczy powiedzieć, że polecenie generujące HTML ma użyć naszego nagłówka.

Get-WMIObject –ComputerName (Get-Content c:\test\machines.txt) Win32_Product | Where-Object {$_.Caption –notlike '*Microsoft*'} | Select-Object Caption, InstallDate | ConvertTo-Html –head $naglowek | Out-File c:\test\oprogramowanie.html

I gotowe. Plik z inwentaryzacją oprogramowania dla szefa zrobiony w parę minut. Jeżeli szef lubi Excela i chce sam sobie poprzestawiać co i jak wyświetli się na ekranie, administrator może zamiast ConvertTo-Html użyć ConvertTo-CSV i wynikowy plik wczytać prosto do arkusza.

Na końcu miało być o klasach WMI.

Otóż nawet najdłuższy wpis na blogu nie ujmie tego, co rzetelnie opisane jest na stronach MSDN.

Żeby wymienić na szybko to, co może przydać się podczas inwentaryzacji, wspomnieć należy:

  • Win32_BaseBoard – dla płyt głównych
  • Win32_Battery – dla baterii w laptopach
  • Win32_BIOS – dla BIOSów
  • Win32_CacheMemory – dla pamięci podręcznej
  • Win32_CDROMDRIVE – dla napędów optycznych
  • Win32_CodecFile – dla kodeków audio i video
  • Win32_ComputerSystem – dla ogólnych parametrów komputera
  • Win32_DiskDrive – dla dysków fizycznych
  • Win32_Fan – dla wiatraczków
  • Win32_NetworkAdapter – dla kart sieciowych
  • Win32_OperatingSystem – dla wersji i edycji systemu operacyjnego
  • Win32_PhysicalMemory – dla zainstalowanych kości pamięci
  • Win32_Printer – dla drukarek
  • Win32_Process – dla aktywnych procesów
  • Win32_Processor – dla procesorów
  • Win32_Share – dla udziałów sieciowych

I wiele, wiele innych czasem bardzo potrzebnych a czasem traktowanych wyłącznie jako ciekawostka. Ale administrator, który wie, z czego może skorzystać a do tego ma narzędzia pozwalające na odpytywanie zdalnych komputerów i ładną prezentację wyników – może dość swobodnie wyciągać od swoich systemów te informacje, które mu są w danym momencie potrzebne.

Warto też sięgnąć po PowerShell Quick Reference po polsku. Dwustronicowa ściągawka pozwoli wyjść poza Copy&Paste gotowych poleceń i podpowie czasem jak zrobić polecenie PowerShell jeszcze lepiej dostosowane do konkretnych potrzeb.

Autor: Grzegorz Tworek [MVP]

Systemowe narzędzia przy próbie zmiany litery dysku systemowego powiedzą od razu "nie da się". To prawie prawda. Powie tak diskmgmt.msc, powie diskpart, ale nie powie mountvol. To aż prowokuje do eksperymentów. Odradzam ich wykonywanie na produkcyjnym systemie, bo przy odrobinie szczęścia uda się go trwale popsuć.

Żeby odebrać dyskowi systemowemu (załóżmy, że jest to C:\) literkę wystarczy mountvol c:\ /d

Problem w tym, że nadawanie nowej literki wymaga ponownego uruchomienia programu mountvol, a nie mając dysku c:\ - możemy mieć z tym problem. Dlatego trzeba mieć na boku kopię programu mountvol. Na innym dysku. Sam "goły" program nie będzie chciał działać, ponieważ poza binariami wymaga również folderu en-US\mountvol.exe.mui (dla wersji innej niż angielska, nazwa folderu będzie inna). Tak więc, należy sobie skopiować sam program i do właściwego folderu jego plik z komunikatami.

Teraz już można przejść na drugi dysk z kopią mountvol.exe i wykonać operacje:

  • Mountvol – wyświetli nazwy wolumenów i przypisane im literki.
  • Mountvol c:\ /d – usunie literkę C:\ (ten stan uniemożliwi pracę systemu)
  • Mountvol x:\ \\?\Volume{.........} (należy użyć GUIDu dysku systemowego, tego samego, który wcześniej miał przypisaną literę C:\)

Restart... może się nie udać, ponieważ część procesów nadal chce sięgać do dysku c:\. Więc reset...

I system wstaje. Udaje się zalogować, trwa to wieki, po czym okazuje się, że system nie jest w stanie uruchomić Explorer.exe ani załadować profilu i kończy z pustym pulpitem. W dodatku stwierdza, że ma problem z legalnością.

Pozornie nic się nie da zrobić, ale po Ctrl+Alt+Del pojawia się opcja "Start Task Manager", która działa całkiem dobrze. Teraz z poziomu Task Managera: File -> Run i cmd.exe Działa!

Część aplikacji chce pracować, część niekoniecznie. Nie działa podnoszenie przywilejów (Run as Administrator). Daje się uruchomić Explorer.exe, ale od razu ostrzega, że nie załadował profilu. I w zasadzie dalsza praca jest loterią. Kalkulator zadziała, snipping tool nie. Paint zechce pracować a FreeCell – niekoniecznie.

Ale to tylko aplikacje. Sam system działa bardzo dobrze. Z tym, że to mój osobisty punkt widzenia. W przeciwieństwie do mnie, większość użytkowników pewnie nie będzie takim działaniem zachwycona.

Autor: Grzegorz Tworek [MVP]

Nie mam wcale na myśli późnej pory, tylko znane każdemu "usypianie" komputera. Zarządzanie energią jest tematem złożonym i nawet pobieżne przyjrzenie się interfejsowi ACPI wystarczy, żeby zrozumieć, że proste włącz / wyłącz / uśpij to jeszcze nie wszystko.

Zasadniczo, system Windows może uśpić się w trzech obszarach. Są to:

  • Wyświetlanie obrazu
  • Sleep Mode
  • Away Mode

Ten ostatni wydaje się najmniej oczywisty i w praktyce dość trudno odróżnialny od Sleep Mode, ale ewentualne niejasności rozwiewa dokument opisujący Away Mode w szczegółach.

Istnieje wiele powodów, dla których system nie powinien się uśpić. W przypadku wyświetlania obrazu może być to na przykład oglądanie filmu na płycie DVD. Gdyby po kilkunastu minutach oglądania wyłączyło się wyświetlanie – użytkownik miałby uzasadnione pretensje. Innym przypadkiem może być udostępnianie mediów przez sieć. Jeszcze innym – pełnoekranowa prezentacja z PowerPoint.

Podobne przykłady można mnożyć, ale czasem trzeba podejść do tematu odwrotnie: Widzę, że system nie chce pójść spać, ale nie wiem dlaczego...

I tu z pomocą przychodzi systemowe polecenie powercfg.exe. Użyte z parametrem –requests wyświetli jasno informacje o tym kto i dlaczego nie pozwala udać się systemowi na zasłużony odpoczynek. Polecam wydanie polecenia "powercfg –requests" w normalnie działającym systemie, a następnie po uruchomieniu "Presenter Mode" (Win+X), po uruchomieniu programu Media Player i w paru podobnych przypadkach. No i oczywiście we wszystkich sytuacjach, kiedy system powinien spać a jakoś nie może.

Autor: Grzegorz Tworek [MVP]

No właśnie... poprzedni post był o dniu "zerowym". To właśnie jedna z charakterystycznych cech tej konferencji. Sześć dni mija w mgnieniu oka. Trudno podsumować wszystko, co się wydarzyło, ale spróbujmy...

Dzień zerowy to niewielki MCT Summit. Trenerzy, spotkanie po roku i dużo pozytywnych doznań. Wieczorem wspólna kolacja i dobra zabawa.

Dzień pierwszy to sesja Pauli. O użytecznych dla administratora technikach "harcerskich". Mariusz opisał już tą sesję i tylko mogę się przyłączyć do zafascynowania ilością osób, które oczekiwały na wejście do sali. Na konferencji TechED (inaczej niż na naszym MTS) nie ma rezerwacji miejsc w salach i obowiązuje zasada "kto pierwszy ten lepszy".

Dzień drugi (wtorek) to mój pierwszy dzień pracy w roli eksperta. Praca przez kilkanaście godzin w czasie konferencji jest moim obowiązkiem (w zamian za prawo uczestniczenia w konferencji), ale w mojej subiektywnej ocenie to czysta przyjemność. Zasady pracy są zbliżone do tych z MTS, ale stanowisk jest więcej i są w efekcie mocniej skoncentrowane na wąskich obszarach. W poprzednich latach miałem przyjemność pomagać w obszarze security, w tym roku trafiłem do Springboard a później do Microsoft Learning. Sama przyjemność, choć ilość i trudność pytań bywały zaskakujące. Trudno się temu dziwić, ponieważ pojawia się wiele nowych produktów (od Windows 7 aż do wszystkich nowości z "2010" w nazwie). Razem ze mną, uczestnikom pomagało kilka innych osób, wśród których bardzo potrzebny okazał się team z Redmond, który na codzień odpowiada za egzaminy. Ich wiedza "od kuchni" była czasem niezbędna. Wieczór spędziliśmy na imprezie Springboard.

Środa to znowu moja praca i oczywiście sesje. W przeciwieństwie do MTS, konferencyjne centrum egzaminacyjne jest naprawdę popularnym miejscem i niemało osób podeszło do egzaminów, zazwyczaj z pozytywnym rezultatem. Wśród egzaminowanych rozlosowaliśmy nagrody (jako wsparcie Microsoft Learning miałem przyjemność wziąć w tym udział). Sam również dałem się skusić na egzamin i jestem o jeden tytuł MCTS bogatszy. Tak więc podczas gdy w Polsce wszyscy świętowali 11 listopada – ja bawiłem się nie gorzej, choć w nieco inny sposób. Wieczorem trochę bardziej przyziemnie spotkaliśmy się na kolacji z firmą SecureGuard, której ISCG jest partnerem. Brzmi strasznie poważnie, ale przy stole siedziała również Paula oraz David Cross (jeden z najważniejszych "magików" od bezpieczeństwa) a to oznacza, że niezależnie od doskonałego jedzenia, nie mogło być nudno. Jak na pasjonatów przystało, podczas kolacji rozmawialiśmy głównie na tematy zawodowe.

Czwartek (jak łatwo policzyć – dzień czwarty) zajęty był sesjami, imprezami, rozmowami w kuluarach i jednym stosunkowo interesującym zdarzeniem: wśród wystawców znalazła się grupa zajmująca się mrówkami AntMe. Jest to środowisko do nauki programowania w C#. Dałem się skusić na parę chwil i okazało się, że nigdy wcześniej nie mając do czynienia z tym językiem – wygrałem konkurs dzienny a w finale zająłem drugie miejsce. To żywy dowód, że jako środowisko do nauki, AntMe sprawdza się doskonale. Nagrodę (na razie niespodziankę) przeznaczę pewnie na analogiczny konkurs dla czytelników bloga. Na razie jeszcze nie wiem kiedy. Z ciekawostek, przy okazji sesji na temat TMG (znowu David Cross) dowiedziałem się kiedy pojawi się wersja RTM.

Piątek (dzień ostatni) to chyba czas powtórek. Znowu sesja Pauli (powtórzona z powodu ogromnego zainteresowania, znowu przy pełnej sali i jeszcze lepsza niż w poniedziałek), znowu jakiś egzamin (promocja była, więc trochę na żywioł, ale ważne że zdane), trochę sesji i jakoś tak czuć w powietrzu atmosferę końca imprezy. Szkoda. Ale nie ma powodu do narzekania, bo za rok też będzie TechED.

W poprzednim poście napisałem, że to TechED EMEA. Tajemniczne cztery literki oznaczają Europę, Bliski Wschód i Afrykę. Okazało się, że popełniłem błąd. Struktura konferencji nieco się zmieniła i tak naprawdę, Europa ma swoją konferencję, Bliski Wschód swoją i Afryka – też własną. Poprawna nazwa brzmi więc TechED Europe 2009.

Cośtamcośtam Lives Here ;)

Autor: Grzegorz Tworek [MVP]

Największą europejską konferencję poświęconą technologiom Microsoft czas zacząć. Tym razem w Berlinie, czyli jest nieco mniej upalnie niż w czasie poprzednich edycji mających odbywających się w Barcelonie.

Pierwszą rzeczą, która zwraca uwagę jest ogrom centrum konferencyjnego. Ze znanych mi miejsc, porównywalne są jedynie centra w USA. Widać jasno, że to nie konferencja dostosowała się do miejsca. Po prostu organizatorzy określili ile będzie osób, sal, stanowisk, laboratoriów itp. a centrum targowe wygospodarowało takie zasoby, jakie były potrzebne. W efekcie wszystko sprawia wrażenie perfekcyjnie zorganizowanego i nie wydaje się, żeby mogło czegokolwiek zabraknąć. Jeżeli ktoś odczuje potrzebę dostarczenia czegoś do centrum pociągiem – ma własną bocznicę. Jeżeli ktoś stwierdzi, że zamiast 7000 osób ma być dwa razy tyle – nie wydaje się, żeby komukolwiek sprawiło to kłopot. Teren targowy jest tak ogromny, że wielu uczestników myląc stacje kolejowe, na których trzeba wysiąść, w efekcie funduje sobie całkiem długi spacer w pięknej berlińskiej aurze.

Tytułowy dzień 0, mimo że pierwsza konferencyjna sesja jeszcze się nie zaczęła, jest całkiem zajęty. Trenerzy (MCT, w tym i ja) mają swój mały MCT Summit. Na terenie wystawowym uwijają się wszyscy ci, którzy na konferencji chcą coś uczestnikom pokazać. Prelegenci mają swój tech-check. Eksperci z TLC (w tym i ja) mają odprawę na której dowiadują się wszystkiego, co może im być podczas konferencji przydatne. Trwa rejestracja i jeżeli ktoś jest już w Berlinie – nie będzie musiał w pierwszy dzień konferencji stać w kolejce po plakietkę z nazwiskiem, torbę, Windows 7, przewodnik, bilety komunikacji miejskiej i parę innych ciekawych rzeczy. Pracownicy Microsoft mają swoje mikro-konferencje a dla wszystkich otwarte są tak zwane sesje 101. Sesje te pozwalają zapoznać się z podstawami w wielu różnych obszarach. Można pójść na przykład na sesję 101 o System Center, dzięki czemu nie znając wcześniej produktu, pozna się go w stopniu pozwalającym na zrozumienie poświęconych mu pełnoprawnych sesji podczas konferencji. Jest też sesja 101 o samej konferencji pokazująca uczestnikom o co tak naprawdę chodzi, gdzie i kiedy dzieje się coś ciekawego itp.

Mimo, że konferencja zaczyna się dopiero jutro – centrum konferencyjne tętni życiem a przy stołach z prądem i siecią (do wyboru kabel lub WiFi) siedzi kilkadziesiąt osób i pilnie stuka w klawiaturę.

Poza tym, w taki luźniejszy, zerowy dzień najlepiej przywitać się ze wszystkimi znajomymi. Poza osobami z Polski, jest sporo ludzi z całego świata, których nie widziałem od poprzedniej konferencji albo i dłużej. To jest mały świat, ludzie są niewiarygodnie życzliwie do siebie nastawieni i normalne jest, że ktoś mieszkający w Holandii (Marko) przywozi Pauli tamtejsze ciastka, o których Paula rok temu powiedziała, że jej smakują. Ponieważ zjawiła się już większość Polaków – siedzimy sobie i planujemy zajęcia na najbliższy tydzień.

Ciąg dalszy relacji oczywiście nastąpi, choć trudno mi obiecać konkretny termin.

Autor: Grzegorz Tworek [MVP]

Zdarza się czasem, że jakiś serwis internetowy przeżywa oblężenie. Powody są różne, ale zazwyczaj oblężenie takie jest szczególnie dotkliwe, jeżeli publicznie ogłosi się coś w stylu "startujemy o 12:00, kto pierwszy ten lepszy".

Prawie dwa lata temu (starzy admini pamiętają te czasy) organizowałem konkurs na temat Windows Server 2008. Wtedy jednym z moich najważniejszych priorytetów było takie zaprojektowanie wszystkiego, żeby równoczesne działanie prawie siedmiu tysięcy użytkowników nie "zabiło" serwera. Było to o tyle istotne, że serwerem był zwykły komputer PC wyposażony w prosty dysk SATA, jeden procesor i stosunkowo niedużą ilość pamięci.

Takie priorytety wzięły się stąd, że moje doświadczenia pokazują (niestety), że nawet najlepszy serwis, najciekawszy konkurs, świetnie zrobiony portal dostanie od użytkowników ocenę niedostateczną, jeżeli tylko pojawią się zauważalne problemy z wydajnością. Poza tym, problemy takie mają tą niemiłą cechę, że zmuszają użytkowników do nerwowego klikania, otwierania w kilku oknach, z dwóch przeglądarek i najlepiej jeszcze z drugiego komputera. W efekcie, mający problemy z wydajnością serwis zostaje w praktyce zabity.

Choć w moim konkursie można było conieco wygrać, to nie był on związany z finansami i płatnościami online. W przypadku serwisu z płatnościami, frustracja użytkowników rośnie jeszcze bardziej, ponieważ nikt do końca nie jest pewny czy, ile i za co tak naprawdę zapłacił.

Po tym przydługim wstępie mogę powoli przejść do meritum.

Otóż 7.11 o 10:00 czasu Vancouver miała się rozpocząć sprzedaż biletów na Zimowe Igrzyska Olimpijskie 2010. Ponieważ dokładnie w tym samym czasie, w Redmond (czyli tuż obok, po drugiej stronie granicy) jest spotkanie MVP z całego świata – pomyślałem sobie, że może by tak choć raz zobaczyć na przykład olimpijski mecz hokeja na żywo zamiast w telewizorze...

Niestety organizatorzy ogłaszając sprzedaż, pomyśleli prawdopodobnie, że na pewno chętnych nie będzie. Okazało się, że jacyś jednak się znaleźli i cały serwis po prostu przestał działać. Po kilkudziesięciu minutach pojawiło się lakoniczne wyjaśnienie i cóż... czekamy.

image

Nie uważam, że jestem lepszy i mądrzejszy od obsługi informatycznej Igrzysk Olimpijskich, ale w obecnych czasach, na imprezie tej rangi, taka totalna wpadka, to po prostu wstyd. Istnieją dziesiątki sposobów zapobiegania takim sytuacjom i naprawdę nie jest trudno zastosować je przed godziną zero.

Autor: Grzegorz Tworek [MVP]

I jeszcze mała aktualizacja: po kilku godzinach zapraszania na później, pojawiło się oświadczenie oraz informacja, że za tydzień cała zabawa zacznie się od początku. Jako winny, wskazany został portal tickets.com, co jest o tyle ciekawe, że to jeden z największych na świecie serwisów specjalizujących się w sprzedaży biletów online.

Tytułowe pytanie jest nieco przewrotne. Zwłaszcza, że studenci również są czytelnikami tego bloga. Ale tak naprawdę chodzi o coś zupełnie innego – o konkurs.

Jeżeli chcesz się sprawdzić dzięki przykładowym pytaniom w konkursie dla studentów, to zajrzyj na stronę http://imaginecup.com/MyStuff/SampleITQuestion.aspx

Jeżeli do tego jesteś studentem – zapisz się koniecznie do udziału w konkursie.

Pytania są hmmm... no co najmniej nietrywialne i mimo, że jest ich tylko dziesięć, to bardzo szeroko sprawdzają wiedzę informatyczną. Jak znalazł jako inspiracja na rozmowy z kandydatami do pracy.

Autor: Grzegorz Tworek [MVP]

Dostałem właśnie wyniki i komentarze z mojej sesji na MTS 2009. W zeszłym roku wpadłem na pomysł, żeby do każdego komentarza się odnosić i wyjaśniać wątpliwości i zastrzeżenia. Pomysł został podchwycony i chyba się całkiem dobrze sprawdził.

W tym roku sam nie wiem... nie mam do czego się odnosić. Komentarze są takie, że jedyną moją odpowiedzią może być tylko "dziękuję!".

Nie będę tych komentarzy cytował, bo wystawiliście mi taką laurkę, że wyszedłbym na chwalipiętę.

Aż chce się robić dla was kolejne sesje.

I tylko jeszcze jedno, do znudzenia przeze mnie powtarzane... z 80 osób na sesji, oceniło ją 47. Z tego 12 pozostawiło komentarz. Ja wiem, że zwykle nie chce się pisać elaboratu o każdej sesji. Ale to dzięki waszym komentarzom mamy szansę na poprawienie się. Chcecie lepszych sesji – piszcie jasno co się podobało a co nie.

A na koniec gratulacje dla Tomka, Bartka i Pawła. Znam was jako prelegentów i nie wątpię, że oceny wyższe niż moja są w pełni zasłużone.

Autor: Grzegorz Tworek [MVP]

PS. Cieszę się, że drobne nagrody zostały zauważone w komentarzach. Jako MVP mam dostęp do sklepiku w Redmond i nagrody na sesje to jedno z najlepszych zastosowań dla dostępnych tam setek gadżetów.

More Posts Next page »
 
Page view tracker