Izolacja sterowników drukarek

By TechNet Polska on Styczeń 31st, 2012

Im głębiej wchodzi się we wnętrzności systemu, tym dokładniej można zobaczyć, że proces jest bardzo specyficznym obiektem. Tak naprawdę nie ma on wiele wspólnego z działaniem aplikacji (tutaj dużo ciekawsze są wątki) ale przede wszystkim z zarządzaniem tym, co w systemie się dzieje. Temat jest ogromny i zainteresowanych chyba najlepiej odesłać do "Windows Internals" a dokładniej do rozdziału piątego: "Processes, Threads, and Jobs". To, co jest dzisiaj dla mnie ważne, to sposób podejścia systemu Windows do sytuacji, kiedy coś zachowuje się nieładnie. W trybie jądra kończy się to Blue Screenem, a poza tym trybem – Windows po prostu "zabije" tego, kto mu podpadnie. I choć wykonywane są poszczególne wątki i to wątek coś niedobrego zwykle robi – zabity zostanie cały proces. Tak jest prościej, bezpieczniej i z punktu widzenia administratora jest to łatwiejsze do ogarnięcia. Problem polega jednak na tym, że skutkiem zastosowania odpowiedzialności zbiorowej jest to, że razem z wątkiem wadliwym, zakończą się i inne, które w ramach tego samego procesu zachowywały się zupełnie poprawnie. Jeżeli dzieje się tak w jakiejś aplikacji od początku do końca przygotowanej przez jednego programistę – trudno. Niech cierpi za słabą obsługę błędów.

Poważniejszy problem pojawia się wtedy, gdy aplikacja musi załadować moduły napisane przez kogoś innego. Oznacza to, że w ramach procesu pojawiają się wątki, dla których kod wykonywalny pochodzi nieraz z zupełnie nieznanego źródła. I może zdarzyć się, że taki wątek z zewnętrznej biblioteki zachowa się nieładnie. Wtedy system zabije cały proces, razem z podpadniętym wątkiem i wszystkimi innymi wątkami, które mogły robić coś istotnego. Sytuacja taka zdarza się w praktyce w niemal w każdym systemie. Na przykład, w każdym, w którym ktoś chce drukować. W systemie Windows 2008R2, wygląda to domyślnie tak, że usługa spooler (bufor wydruku) ładuje specjalną bibliotekę DLL (PrintIsolationProxy.dll), która ładuje sterowniki drukarek.

Błąd w sterowniku powoduje zabicie procesu. Skutki są proste do przewidzenia: usługa spooler przestaje działać i nikt w tym systemie nic już nie wydrukuje dopóki nie zostanie uruchomiona ponownie. Dlatego właśnie, w systemie Windows Server 2008 R2 można skonfigurować system tak, aby dla danego sterownika spooler zachowywał się nieco inaczej. Zamiast bezpośrednio ładować bibliotekę PrintIsolationProxy.dll, uruchomi specjalny proces (PrintIsolationHost.exe) który załaduje bibliotekę, która załaduje sterowniki.

A gdy sterownik zachowa się nieładnie? Cóż… Proces PrintIsolationHost.exe zostanie zabity. A spooler przeżyje. Co więcej, można również całość ustawić tak, aby PrintIsolationHost.exe uruchamiany był dla każdego sterownika oddzielnie. Wtedy jeden sterownik może "wywracać się" choćby i kilka razy na sekundę a inne pozostaną niewzruszone. Z punktu widzenia użytkownika, korzyść jest oczywista: można drukować.

Całość jest bardzo prosta do skonfigurowania. Z konsoli "Print Management" wystarczy wybrać gałąź "Drivers", i z menu kontekstowego dla sterownika wybrać jeden z trzech poziomów izolacji:

  • None – sterownik ładowany jest w procesie spoolera
  • Shared – sterownik jest izolowany od spoolera, ale nie od innych sterowników w trybie "shared", z którymi współdzieli jeden proces
  • Isolated – sterownik ma własny proces izolujący.

A dlaczego w ogóle nie rozwiązać tego tak, żeby każdy sterownik zawsze miał własną pulę? Dlatego, że takie odizolowanie nie jest "za darmo". Wymaga więcej CPU, zajmuje pamięć tworzy więcej procesów… A awaryjne sterowniki aż tak często się nie zdarzają.

Sterownik może sam z siebie zażądać uruchomienia w trybie izolacji i wtedy zamiast domyślnego poziomu "None" używany jest inny. Przy czym żądanie takie system może zignorować, na przykład w sytuacji, gdy w GPO ustawione są wpisy Execute Print Drivers in Isolated Processes i Override Print Driver Execution Compatibility Setting Reported by Print Driver w gałęzi Computer Configuration\Administrative Templates\Printers

Warto również wiedzieć o gałęzi rejestru HKLM\SYSTEM\CurrentControlSet\Control\Print\ i wpisach PrintDriverIsolationIdleTimeout, PrintDriverIsolationTimeBeforeRecycle oraz PrintDriverIsolationMaxobjsBeforeRecycle. Określają one, kiedy proces izolujący jest usuwany lub restartowany. Pozwala to uwolnić trochę pamięci gdy system nie używa danego sterownika lub skorzystać z tego, że restart procesu oznacza ponowne załadowanie sterowników i w ten sposób zapobiec wyciekom pamięci.

Udanego izolowania!

Autor: Grzegorz Tworek [MVP]

PST Capture–czyli jak pozbyć się plików PST

By Konrad Sagala on Styczeń 31st, 2012

Kilka miesięcy temu Microsoft ogłosił, że wyda narzędzie do znajdywania plików PST w naszej organizacji. No i w końcu się pojawiło. Po przeczytaniu dokumentacji, powinniśmy pobrać ze strony Microsoftu moduł zarządzający i agentów, których będą instalowani na komputerach w naszej sieci. Po zlokalizowaniu plików, mogą być one pobrane na serwer do skrzynki lub archiwum online. Mam nadzieję, że znajdę czas żeby w najbliższych dniach, żeby zainstalować i przetestować ten przydatny produkt.

PST Capture–czyli jak pozbyć się plików PST

By Konrad Sagala on Styczeń 31st, 2012

Kilka miesięcy temu Microsoft ogłosił, że wyda narzędzie do znajdywania plików PST w naszej organizacji. No i w końcu się pojawiło. Po przeczytaniu dokumentacji, powinniśmy pobrać ze strony Microsoftu moduł zarządzający i agentów, których będą instalowani na komputerach w naszej sieci. Po zlokalizowaniu plików, mogą być one pobrane na serwer do skrzynki lub archiwum online. Mam nadzieję, że znajdę czas żeby w najbliższych dniach, żeby zainstalować i przetestować ten przydatny produkt.

OpenOffice i LibreOffice(!) jako interfejs publikacji AFINA

By Wojciech Gardziński on Styczeń 31st, 2012

Czytaj: darmowy i natychmiastowy(!) interfejs – fajnie to działa.

http://afin.net/webcasts/Demo_PublishOnIntranet_OpenO_LibreO.swf
Kolejna wersja publikacji AFINA z wykorzystaniem OpenOffice’a i    
LibreOffice’a jako „przeglądarek” naszego raportu. Tym razem jednak    
– ŻYWEGO RAPORTU, takiego z funkcjami AFINA!

Super to działa!
http://afin.net/webcasts/Demo_PublishOnIntranet_OpenO_LibreO_Live.swf

Filtry WMI

By losiak on Styczeń 31st, 2012

W tym artykule zamieszczam zbiór przydatnych filtrów WMI

  • Skrypt filtrujący maszyny z Windows 7:
    Namespace: root\CIMv2
    Query: select * from Win32_OperatingSystem where Version like „6.1%” and ProductType = „1”

    Continue Reading

Blackberry Cloud Service dla Office 365

By Konrad Sagala on Styczeń 30th, 2012

W końcu pojawiła się wersja finalna wersji “chmurzastej” Blackberry – od listopada działała wersja Beta, teraz pojawiła się wersja finalna usługi. Informacja o tym pojawiła się również na stronach Office 365. Ostatnio sporo mówiło się o problemach RIM i spadku popularności w stosunku do IPhone, Androida czy nawet Windows Phone. Zobaczymy, czy zacieśnienie współpracy z Office 365 poprawi tę sytuację.

Blackberry Cloud Service dla Office 365

By Konrad Sagala on Styczeń 30th, 2012

W końcu pojawiła się wersja finalna wersji “chmurzastej” Blackberry – od listopada działała wersja Beta, teraz pojawiła się wersja finalna usługi. Informacja o tym pojawiła się również na stronach Office 365. Ostatnio sporo mówiło się o problemach RIM i spadku popularności w stosunku do IPhone, Androida czy nawet Windows Phone. Zobaczymy, czy zacieśnienie współpracy z Office 365 poprawi tę sytuację.

Niekonsekwencje w ASP.NET

By Paweł Goleń on Styczeń 30th, 2012

Na ostatnim spotkaniu OWASP w Krakowie jedna z prezentacji dotyczyła zapobiegania XSS w aplikacjach tworzonych w ASP.NET. Z prezentacją można zapoznać się tutaj: Defending ASP.Net apps against XSS. Ja chciałem z kolei zwrócić uwagę na pewną niekonsekwencję w zachowaniu platformy, która może doprowadzić do niepożądanych skutków, czyli do XSS.

W ramach przykładu popatrzmy na trzy kontrolki:

Kontrolka TextBox

Zacznijmy od kontrolki TextBox, czyli normalnego pola tekstowego, w które użytkownik może wpisać dane. Jest ona również wykorzystywana do prezentacji danych, zarówno w celu ich edycji, jak i w trybie tylko do odczytu. Spróbujmy w tym przypadku:

  • przypisać jej wartość,
  • przypisać jej atrybut,

Przykładowy fragment kodu:

TextBox2.Text = TextBox1.Text;
TextBox2.Attributes.Add("attr1", TextBox1.Text);
TextBox2.Attributes.Add(TextBox1.Text, "val1");

W ramach payloadu testowego wykorzystam tym razem coś takiego:

pmq'"<>

Jak wygląda kod HTML zwrócony do klienta? Tak:

<input name="ctl00$MainContent$TextBox2" type="text" value="pmq&#39;&quot;&lt;>" id="MainContent_TextBox2" attr1="pmq&#39;&quot;&lt;>" pmq'"<>="val1" />

Rozbijmy go na poszczególne fragmenty.

Po pierwsze wartość przypisana do Text jest prawidłowo kodowana na wyjściu, fragment kodu HTML wygląda następująco:

value="pmq&#39;&quot;&lt;>"

W tym przypadku programista nie musi troszczyć się o właściwy encoding danych na wyjściu. Analogicznie sytuacja wygląda w przypadku, gdy dodaje on atrybut. Wartość atrybutu jest kodowana, co pokazuje ten fragment kodu:

attr1="pmq&#39;&quot;&lt;>"

W tym samym miejscu jest jednak pewna niespodzianka, o oczyszczenie/zakodowanie nazwy atrybutu programista musi zadbać sam, bo inaczej może spotkać go coś takiego:

pmq'"<>="val1"

Można argumentować, że sytuacja, w której atakujący kontroluje nazwę atrybutu nie jest powszechna. Zgoda, ale tym większe prawdopodobieństwo, że jeśli już taka konstrukcja zostanie zastosowana, to programista przyzwyczajony do tego, że o encoding troszczyć się nie musi, nie zastosuje go również w tym przypadku. A kontekst jest o tyle przyjemny (dla atakującego), że mechanizm ValidateRequest na niewiele się tutaj przyda (przy okazji polecam: Bypassing ValidateRequest in ASP.NET przy czym w tym kontekście bypass nie jest potrzebny).

Kontrolka Label

Co jest nie tak z kontrolką Label? Służy często do wypisania tekstu na stronę, w szczególności jest ona używana jako zamiennik kontrolki TextBox w sytuacjach, gdy dane mają być wyświetlone w trybie tylko do odczytu i gdy zastosowanie TextBox z wyłączoną edycją nie jest najlepszym pomysłem (na przykład stronę do wydruku).

W przypadku tej kontrolki zróbmy tylko jeden test, spróbujmy wypisać dane przy pomocy takiego kodu:

Label1.Text = TextBox1.Text;

Kod jest identyczny, jak w przypadku kontrolki TextBox. A rezultat? Trochę inny:

<span id="MainContent_Label1">pmq'"<></span>

Jak widać w tym przypadku to programista musi zadbać o odpowiednie zakodowanie znaków na wyjściu. Pojawia się pewna niekonsekwencja między różnymi kontrolkami. Ten sam sposób wypisania danych może być zarówno bezpieczny, jak i niebezpieczny, w zależności od wykorzystanej kontrolki.

W tym przypadku warto ponownie zwrócić uwagę na kontekst. Akurat tutaj mechanizm ValidateRequest może okazać się wystarczającym zabezpieczeniem, ale oczywiście nie musi. Ponownie nie chodzi mi tutaj o możliwość jego obejścia (np. w sposób opisywany we wcześniej wspominanym artykule), ale o to, że nie zawsze dane wchodzą do aplikacji tylko jedną ścieżką i nie na każdej ścieżce działa ValidateRequest. Przykładowo może istnieć XSS, jeśli:

  • dane są wprowadzane przez WebService,
  • dane są pobierane z importowanego pliku (np. import z XML),
  • wypisywane dane są „składane” z kilku pól,

Jeśli zajrzeć w dokumentację, znajdzie się tam następujący fragment:

This control can be used to display user input, which is a potential security threat. By default, ASP.NET Web pages validate that user input does not include script or HTML elements.

Nie lubię tego typu zagmatwanych komunikatów, bo na dobrą sprawę po jego przeczytaniu można mieć poważne wątpliwości, czy i w jakich przypadkach problem istnieje. Z moich doświadczeń wynika, że w 100% przypadków, w których byłem w stanie w pełni kontrolować dane przekazywane do kontrolki Label, miałem tam XSS.

Kontrolka HyperLink

Na koniec kontrolka HyperLink. W tym przypadku kod wygląda następująco:

HyperLink1.Text = TextBox1.Text;
HyperLink1.Target = TextBox1.Text;
HyperLink1.NavigateUrl = TextBox1.Text;
HyperLink1.Attributes.Add("attr1", TextBox1.Text);

Wykonuje on kolejno:

  • ustawienie tekstu odnośnika,
  • ustawienie atrybutu target (okna, w którym ma otworzyć się odnośnik),
  • ustawienie adresu (atrybutu href),
  • dodanie wartości atrybutu o nazwie attr1

Wygenerowany kod wygląda następująco:

<a id="MainContent_HyperLink1" attr1="pmq&#39;&quot;&lt;>" href="pmq&#39;&quot;&lt;>" target="pmq'"<>">pmq'"<></a>

Przypisanie wartości (tekstu) zachowuje się dokładnie tak samo, jak w przypadku kontrolki Label, czyli programista sam musi zadbać o właściwy encoding. Ciekawsze rzeczy dzieją się w przypadku atrybutów. Ustawiane były trzy atrybuty:

  • href,
  • target,
  • attr1,

Oczekiwać można, że we wszystkich trzech przypadkach zachowanie kontrolki będzie takie samo. Jest nieco inaczej:

attr1="pmq&#39;&quot;&lt;>" 
href="pmq&#39;&quot;&lt;>" 
target="pmq'"<>"

Jak widać wartość atrybutu jest prawidłowo kodowana w przypadku atrybutu attr1 oraz href, w przypadku atrybutu target natomiast żaden encoding nie ma miejsca. WTF? Co więcej w dokumentacji dla HyperLink.Target nie widzę nawet jednego zdania, które mogłoby sugerować takie zachowanie.

Przy okazji trafiłem na ciekawy wątek związany ogólnie z atrybutami: .Net 4.0 Attributes.Add encoding bug. Wynika z niego, że encoding atrybutów dodawanych przez Attributes.Add pojawił się w ASP.NET 4.0 i, niespodzianka, spowodowało to trochę problemów.

Swoją drogą programiści wypowiadający się w tym wątku to jakieś mięczaki. Przecież problem można rozwiązać w trywialny sposób, wystarczy dać następującą nazwę atrybutu oraz jego wartość:

String name = "onclick=\\\"alert('Works!')\\\" foo";
String value = "";
(...).Attributes.Add(name, value);

Co się ślicznie przetłumaczy do postaci (przykład z testowego kodu, istotny pogrubiony fragment, wyciąłem trochę nieistotnej zawartości):

<input value="onclick=&quot;alert(&#39;Works!&#39;)&quot; foo" onclick="alert('Works!')" foo="val1" />

Twardym trzeba być :)

Podsumowanie

To, co pokazałem, to oczywiście tylko mały wycinek tematu. Chodziło mi o pokazanie pewnego braku konsekwencji w ASP.NET, który może okazać się bolesny w skutkach. Gdyby przyjrzeć się dokładniej poszczególnym kontrolkom, może okazać się, że występują bardziej realistyczne przypadki. Rozumiem przez to takie sytuacje, w których istnieje większe prawdopodobieństwo, że wypisane zostaną dane pochodzące od klienta, bo przyznaję, że zarówno w przypadku nazwy atrybutu czy atrybutu target dla kontrolki HyperLink taka sytuacja jest umiarkowanie prawdopodobna.

Istniejący w ASP.NET mechanizm ValidateRequest czasami jest zabezpieczeniem wystarczająco skutecznym. Powtarzam: czasami, ponieważ:

  • payload może nie wymagać wychwytywanych przez ValidateRequest ciągów znaków,
  • może istnieć bypass tego mechanizmu,
  • dane wchodzą do systemu różnymi ścieżkami, w szczególności niechronionymi przez ValidateRequest,
  • dane wchodzą do systemu w postaci zakodowanej,

Porównując ilość podatności typu XSS w aplikacjach tworzonych w oparciu o ASP.NET i w tych tworzonych z wykorzystaniem innych technologii, ASP.NET prezentuje się całkiem nieźle. To nie znaczy jednak, że istniejące w platformie mechanizmy ochrony zwalniają od myślenia o ochronie przed XSS.

Jak szybko testować? Po raz kolejny z pomocą przychodzi mój „ulubiony” payload (tym razem właściwie dwa):

pmq'"<>
pmq'"<A>

Jeśli na wyjściu pojawi się pierwszy payload, to mamy problem, ale prawdopodobnie ValidateRequest nas ocali. Jeśli na wyjściu pojawi się drugi payload, mamy dziurę. Różnica jest taka, że drugi payload nie ma prawa wejść do aplikacji z aktywnym ValidateRequest. Jeśli wejdzie, mechanizm ten dla aplikacji, lub tej strony, został wyłączony. Oczywiście pomijam tutaj inne możliwe ścieżki wprowadzenia tego typu payloadu do aplikacji (patrz wyżej).

Swoją drogą myślę, że ciekawym eksperymentem mogłoby być zastosowanie podejścia secure by default. W tym kontekście mogłoby to oznaczać domyślne stosowanie encodingu w każdym przypadku, oraz dostarczenie programistom wygodnej metody wypisania danych „surowych”, jeśli rzeczywiście jest taka potrzeba. Tu aż prosi się by wspomnieć o ctemplate i Auto Escape (tak, mało związane z ASP.NET).

Chcesz być wielki?

By Zygmunt B. on Styczeń 30th, 2012

Chcesz być wielki, pij mleko jak głosiło niedawno hasło w wielu mediach. A ja Wam powiadam, chcesz być wielki… ucz się i czytaj.

Okazje do nauki już wkrótce. Od środy (przypominam) rusza cykl 7 spotkań z Windows 7 (konkretnie przygotowanie do egzaminu 70-686) czyli środy z certyfikatem (www.srodyzcertyfikatem.pl) O cyklu tym już wspominałem – przypominam tylko i odsyłam na stronę poświęconą tematowi.

Dla miłośników baz danych i SQL – od jutra już rusza cykl 13 spotkań pod wspólnym tytułem: „SQL Reporting Services Crash Course” na Virtual Study (link http://virtualstudy.pl/pl/strona-glowna/22-all-pl-news/1365-sql-reporting-services-crash-course-nowy-cykl-virtualstudypl) Myślę, że nie ma co się obawiać tym razem trzynastki – a wręcz potraktować to jako szczęśliwą 13

Tyle w nauce… w najbliższym czasie oczywiście. Ale jak powiedziałem na początku – ucz się i CZYTAJ. Ostatnio zacząłem czytać biografię S.Jobsa. Już w pierwszych rozdziałach autor podkreśla, jak ważne jest czytanie nie tylko technicznej literatury. Powieści, poezja… Dzięki temu, moim zdaniem, stajemy się bardziej otwarci, nie zamykamy się w skorupce własnej profesji. W konsekwencji np. lepiej dogadujemy się z ludźmi innych branż, lepiej rozumiemy ich potrzeby, tworzymy lepsze programy, systemy… Chcesz być wielki? Ucz się i czytaj, czytaj i ucz się !!!

System Center Advisor – Wydany!

By Kamil Skalski on Styczeń 30th, 2012

Jakiś czas temu wspominałem o narzędziu System Center code nam Atlanta, pozwalającym na monitorowanie konfiguracji serwerów i aplikacji serwerowych. Produkt ten osiągnął wersję finalną pod nazwą System Center Advisor, niestety na chwilę obecną Polska nie została objęta jego wsparciem. Sam produkt dostarczany jest w formie usługi online dla klientów Software Assurance, jeśli chcecie poznać jego koncepcje i przetestować działanie (jest to możliwe także u nas w kraju) zarejestrujcie się i skorzystajcie z 60 dniowej wersji testowej. W skrócie produkt ten należy traktować jako chmurowe (hostowane na platformie Azure) rozwiązania do monitorowania, którego koncepcja zbliżona jest do znanego Wam System Center Operations Manager. Na chwilę obecną wspierane są najważniejsze role serwerowe np. Active Directory czy Hyper-V oraz kluczowe produkty tj. SQL Server oraz Exchange – kolejne zgodnie z zapowiedziami mają pojawić się już wkrótce.

Windows 8 Server Core

By TechNet Polska on Styczeń 30th, 2012

O powstawaniu Windows 8 pojawia się wciąż wiele informacji – i to nie plotek, tylko z pierwszej ręki. Akcja prowadzenia bloga rozpoczęta eksperymentacji z systemem Vista, jest dziś podstawowym medium wymiany informacji pomiędzy osobami pracującymi w projekcie a end-userami – mowa oczywiście o blogu ‘Building Windows 8’.

Tymczasem na blogu poświęconym serwerom i chmurze, pojawiła się ciekawa informacja dotycząca  przyszłości wersji Core i są to informacje niezwykle obiecujące. Pojawić się mają następujące funkcje:

  • koniec z wyborem “raz na zawsze”! wersję core będzie można "włączyć/wyłączyć” w dowolnym momencie przy pomocy pojedynczego polecenia [i restartu]
  • prawie 2.5oo skryptów powershell przydatnych do administracji – to potężna ulga, ponieważ praca z cmd jest co najmniej niemiła. owszem – od pewnego momentu można używać powershell, ale nadal pozostawało to opcją dla zaawansowanych administratorów
  • obsługa .NET framework 4.5

ponad to dochodzi dodatkowa opcja – Minimal Server Interface, który ma być stanem pośrednim. MSI [niefortunnie taki skrót ale z kontekstu wiadomo o co chodzi] to standardowa instalacja pełnego serwera ale pozbawiona Internet Explorer, Windows Explorer, wsparcia dla aplikacji Metro, multimediów i ‘Desktop Experience’. Dzięki dalszej komponentyzacji można natomiast używać MMC – czyli większości narzędzi do zarządzania systemem.

Takie modyfikacje indukują inne podejście do pisania/weryfikacji aplikacji ze względu na fakt, że zależności spełnione podczas instalacji, mogą zostać zerwane po późniejszym przejściu na wersję Core – niewątpliwie najlepszym ruchem będzie przemyślenie instalacji i unikanie tego rodzaju przejść. Nowy model pisania aplikacji promowany jest już od jakiegoś czasu – oddzielnie silnik, oddzielnie formatki, które de facto są interfejsem dla skryptów Powershell – dzięki temu aplikacja działa tak samo dobrze w dowolnej wersji. Zanim jednak wszystkie aplikacje będą tak pisane minie millenium [do dnia dzisiejszego spotykam nowe aplikacje, które nie działają bez uprawnień administratora].

eN.

Autor: nExoR

Rzeź

By Wojciech Gardziński on Styczeń 30th, 2012

(Nie, niestety, nie reklamuję Romana, film mi się tak średnio podobał.)

Kiedyś złapałem mysz (taką żywą – istnieją takie! – takie info dla nolajfów) w pułapkę. Była oszołomiona, ale żyła. Puściłem ją na ogród, żeby się z nią „pobawił” pies – niech ma trochę z życia.
Trącał ją łapką, doskakiwał, odskakiwał, wąchał, szczekał, nawet lizał(!) – chciał się bawić. A myszka nic, w ogóle nie zwracała na niego uwagi, ani, tym bardziej, nie chciała uciekać. Ona już na nic nie miała siły, a zaczepki były daremne.

Jak z biajkami.

Wyobrażam sobie, jaka jazda jest teraz w firmach biajowych… Trochę Wam, biajki, współczuję.
Rzeź.

P.S.
Drodzy Biajkowie,
Swoją drogą, ciekawi mnie bardzo, czy zrozumieliście coś z naszych, tu, uroczych, pogadanko-połajanek, a mianowicie, że, w sprzedaży oprogramowania, najważniejszy jest użytkownik, a nie Wasze ideolo.
Ciekawe, czy zaczniecie teraz wiżualbejzikować (wielu już tak robi), czy będziecie się bujać z firmy biajowej do firmy biajowej za coraz niższe stawki, czy też, i też wielu już tę drogę obrało, będziecie wymyślać coraz to TAŃSZE opcje biajów, łącznie z opensołrsami, w żałosnej nadziei, że Wasze ideolo jest OK, tylko żarłoczność dotychczasowych pracodawców była za duża?

Ech, życie… i, żeby nie było, to nie moja wina, tylko Waszej chorej ideologii.
Zapraszam do współpracy.

Jak wymusić aktualizację WSUS

By Jakub Brodecki on Styczeń 30th, 2012

Zdarza się, że musimy wymusić aktualizację z serwera WSUS, aby to zrobić, należy w wierszu poleceń uruchomić aplikację wuauclt.exe z parametrem /detectnow:

wuauclt.exe /detectnow

 

 

WGUiSW Idol i IT Professional.

By Bartek Bielawski on Styczeń 30th, 2012

Dziś postanowiłem wreszcie napisać parę słów o tym, co działo się w ostatnim czasie. Grudzień – to oczywiście czas świąt. Dla mnie święta to czas podróży: w zasadzie każdego dnia przemieszczaliśmy się z miejsca na miejsce. Potem wróciliśmy z Ładniejszą Połową do Warszawy, a maluchy zostały u dziadków. Cel? Prosty – przygotowania. Emi szykowała się do spotkania z promotorem. Ja – do występu w ramach WGUiSW Idola. Dzięki pomocy Darka Porowskiego miałem sporo materiału do przemyśleń, starałem się jak najwięcej “wyciągnąć” z książek, które mi pożyczył i informacji, którymi się ze mną podzielił. Efekt? Żonka była zachwycona, a to przecież najważniejsze. Sam bawiłem się doskonale w trakcie prezentacji. Tego, że dotyczyła PowerShella mówić chyba nie muszę. Nadmienię tylko, że skupiłem się na dodawaniu GUI do skryptów, ze szczególnym uwzględnieniem mojego ulubionego ostatnio narzędzia – ShowUI. Zamieszczam prezentację, ale ponieważ odrobiłem lekcję dotyczącą tego, co w prezentacji znaleźć się nie powinno – to sam plik pptx wiele Wam nie da… Więc jeśli w spotkaniu nie uczestniczyliście? Cóż, pozostaje Wam trzymać kciuki bym konkurs wygrał (wątpię, ale w końcu wszystko się może zdarzyć) i przybyć na  Windows Community Launch  Główna nagroda to właśnie prelekcja w trakcie tego wydarzenia. BTW: ciekaw jestem – ile osób załapało o co chodzi w tym slajdzie (obrazkowi temu na slajdzie w zasadzie nie towarzyszyło nic, poza logo samej akcji i logo grupy):

Druga rzecz, która w ostatnim czasie pochłania sporo mojego czasu to rzecz nowa w moim życiu – i nie ukrywam, bardzo ekscytująca. Zostałem bowiem zaproszony do współpracy z miesięcznikiem “IT Professional”. Jest to dość ciekawa pozycja na rynku wydawniczym w Polsce – jej grupą docelową są bowiem czynni zawodowo specjaliści IT. Moja działka to (czy to nie nudne?) Windows PowerShell. A ponieważ artykuły z założenia mają być praktyczne – to opisuję dla tego czasopisma skrypty, które w ostatnim czasie zdarzyło mi się sklecić. Oczywiście, przed publikacją staram się je najpierw dopieścić, następnie odpowiednio przedstawić i wyjaśnić: co, czemu, gdzie i dlaczego. Właśnie w tym tygodniu, tuż po powrocie z ferii, znalazłem w skrzynce pierwszy numer pisma, w którym można znaleźć moje nazwisko:

Myślę, że będzie co pokazywać wnukom… Mam tylko nadzieję, że pomysły na skrypty nie wyczerpią się przedwcześnie… i że druga strona jest równie zadowolona ze współpracy ze mną, co ja ze współpracy z tym czasopismem. A że samo pismo jest ciekawe, to dla samego choćby egzemplarza autorskiego – warto się było pochylić nad swoimi pisanymi na kolanie skryptami i nieco je podrasować. Choć oczywiście czasu wolnego mi z tego tytułu nie przybyło… Obiecuję jednak w najbliższym czasie wrócić do modułów w PowerShellu. Mam nadzieję, że ktoś dotrwa…

Licencjonowanie SQL Server dla Team Foundation Server

By swilczew on Styczeń 29th, 2012

W ofercie licencyjnej firmy znajduje się produkt “Visual Studio Team Foundation Server 2010 z technologią SQL Server 2008”. Kupując licencje na ten produkt można zainstalować SQL Server 2008 na potrzeby Visual Studio Team Foundation Server” bez potrzeby dokupowania dodatkowych licencji SQL Server i licencji dostępowych do SQL Server. Ograniczenia i możliwości tej wersji SQL Server są  następujące:

  • jest to wersja SQL Server Standard,
  • można uruchomić tylko jedno jej wystąpienie,
  • może ono być wykorzystywane tylko w celu obsługi Team Foundation Server,
  • nie są wymagane dodatkowe CAL do tego SQL Server

Zapis dokumentu “Prawa do używania produktów udzielane przez Microsoft Licensing” (PUR – Product Use Rights), dotyczący tego zagadnienia, brzmi w sposób następujący:

Postanowienia licencyjne dla technologii SQL Server 2008 R2. Jeśli Państwa wersja oprogramowania serwera obejmuje inną technologię SQL Server 2008 R2 (na przykład SQL Server 2008 R2 Standard Edition), mogą Państwo uruchomić jednocześnie jedno wystąpienie tej technologii w jednym fizycznym lub wirtualnym środowisku systemu operacyjnego na jednym serwerze wyłącznie w celu obsługi tego oprogramowania. Nie potrzebują Państwo do tego celu licencji CAL na system SQL Server. Mogą Państwo utworzyć i przechowywać dowolną liczbę wystąpień technologii SQL Server 2008 R2 na dowolnym serwerze lub nośniku magazynowania danych należącym do Państwa wyłącznie w celu wykonywania swojego prawa do uruchamiania wystąpienia technologii SQL Server 2008 R2 zgodnie z niniejszymi postanowieniami licencyjnymi.