2016-11-25
W HyperV można zdefiniować wirtualną sieć dla wirtualnych komputerów. Te sieci można definiować jako external, internal i private. Jakie było moje zdziwienie kiedy po zdefiniowaniu nowej sieci typu external zobaczyłem komunikat, że spowodowałem… katastrofę. Na dodatek żadne restarty, usuwanie innych istniejących sieci nie pomagały. Co było przyczyną?
Otóż kilka dni wcześniej też definiowałem sieci i stworzyłem sieć internal. Sieć internal posiada własną wewnętrzną adresację, ale jeden z adresów staje się wewnętrzną bramą za pomocą której można z wewnętrznej sieci sięgnąć do internetu. Podczas definiowania sieci internal na komputerze hoście jeden z interfejsów sieciowych ma włączaną opcję współdzielenia łącza internetowego. W moim przypadku po pewnym czasie usunąłem sieć internal jednak połączenie na komputerze hoście nadal było oznaczone jako współdzielone. I to właśnie było przyczyną… katastrofy.

Wystarczyło odszukać interfejs z zaznaczoną opcją współdzielenia sieci i ręcznie odznaczyć pole, a potem powtórzyć proces definiowania sieci w HyperV. Więcej na ten temat:
http://www.hurryupandwait.io/blog/understanding-networking-options-with-a-wireless-hyper-v-host-and-solving-catastrophic-failure-0x8000ffff
2016-11-23
IIS Application pool pozwala między innymi zdefiniować konto na jakim będzie pracować aplikacja na systemie windows. W IIS managerze nie jest to wcale trudne: kliknij prawym przyciskiem myszy na wybranej ApplicationPool >> Wybierz Opcje zaawansowane >> kliknij Identity i wpisz nazwę konta i jego hasło. Kilka OK i gotowe!
A co jeśli to samo należy wykonać z poziomu PowerShell i modułu WebAdministration?
Zacznijmy od wyświetlenia właściwości ApplicationPool:
Get-ItemProperty 'IIS:\AppPools\TigerAppPool' | FL *
Wynik widać na obrazku poniżej. Domyślnie zaprezentowane są właściwości z sekcji General a inne właściwości są „ukryte” w grupach. Bezpośrednie właściwości w okienku IIS managera i w wyniku komendy powershell zaznaczone są poniżej na żółto. Grupy kryjące w sobie dodatkowe właściwości są zaznaczone na czerwono:
Czytaj dalej »
2016-11-18
Obsługę błędów można realizować w powershell korzystając z intrukcji try/catch/finally. Często do obsługi błędu wystarczy konstrukcja:
try
{
GWMI Win32_bios -ComputerName 'blablacomp'-ea Stop
}
catch
{
echo "general exception"
}
Ale zdarza się, że z jakiegoś powodu w bloku try znajduje się kilka instrukcji, które mogły spowodować błąd i w zależności od tego jaki błąd został napotkany będzie należało wykonać inną czynność w bloku catch.
Oto przykład takiej konstrukcji:
try
{
del c:\temp\blablabla.txt -ea stop
GWMI Win32_bios -ComputerName 'blablacomp'-ea Stop
}
catch [System.Runtime.InteropServices.COMException]
{
echo "com exception"
}
catch [System.Management.Automation.ItemNotFoundException]
{
echo "file not found exception"
}
catch
{
echo "general exception"
}
Tym razem, jeśli dojdzie do błędu, to w zależności od tego jaki to błąd, zostanie uruchomiona inna sekcja catch. Nazwy w nawiasach kwadratowych są nazwami typów różncyh rodzajów wyjątków zgłaszanych przez uruchamiane w bloku try polecenia. Jeśli doszło by do niewymienionego tutaj błedu to wykonany zostanie standardowy blok catch Czytaj dalej »
2016-11-16
Hmm… A required privilege is not held by the client… Jak ci czegoś brakuje, to powiedz co to jest! Niestety Integration Services Deployment Wizard nie chciał powiedieć co go boli…
Skoro brakuje jakiegoś prawa (Local Settings >> Local Policies >> User Rights Assigment) to naprawa SQL powinna pomóc. Ponieważ serwer był testowy, to naprawa była możliwa. Po naprawie serwera (Panel sterowania >> Programy i funkcje >> SQL Server > Repair), ale bez restartu deployment się udał. Super! Ale co jest przyczyną?
Sprawdziłem ponownie jakie prawa miało przypisane konto SQL Server po naprawie. Potem uruchomilem ponownie SQL serwer i IS Deployment Wizard przestał działać. Sprawdziłem więc znowu jakie prawa miało konto SQL server i… kilka ubyło! Podejrzani to:
„Replace a process level token”,”NT SERVICE\MSSQLSERVER”,”SeAssignPrimaryTokenPrivilege”
„Adjust memory quotas for a process”,”NT SERVICE\MSSQLSERVER”,”SeIncreaseQuotaPrivilege”
„Bypass traverse checking”,”NT SERVICE\MSSQLSERVER”,”SeChangeNotifyPrivilege”
W tym przypadku prawa są definiowane na pozioie zasad grupy, więc w kolejnym kroku była potrzebna pomoc chłopaków z AD.
Rzeczywiście te prawa są wymienione na liście wymaganych przez SQL (https://msdn.microsoft.com/en-us/library/ms143504(v=sql.110).aspx#Windows), więc nie powinno być problemu z ich uzyskaniem. Czytaj dalej »
2016-11-14
Co 500+ może mieć wspólnego z IT? Ano moe mieć…
Podobno faceci znają kolory biały, czarny, ładny i … brzydki. A ile jest kolorów podstawowych zdaniem kobiet? Chyba właśnie tytułowe 500+. Na dodatek te 500+ kolorów ma swoje nazwy!
Zajrzyj tutaj: http://cloford.com/resources/colours/500col.htm
A wszystko to odkryłem przy okazji zabawy z ISE i ustawiania kolorków tła. Np poniższa komenda zmienia kolor panelu skryptu np na palegoldenrod, który wygląda o tak:

A czy Ty lubisz kolor palegoldenrod?
2016-11-10

Wprawdzie konferencja PASS Summit 2016 już się zakończyła i trwają już zapisy na PASS Summit 2017, to jednak jeśli chcesz zobaczyć o czym mówiło się na konferencji, masz do dyspozycji PASS TV:
http://www.sqlpass.org/summit/2016/PASStv.aspx
Konferencja trwa 3 dni i jednocześnie odbywa się około 8 sesji. Wszystkie sesje są nagrywane i można je kupić na PASS Summit-owym pendrive. PASS TV prezentuje kilka wybranych sesji całkiem za darmo.
2016-11-06
Oczywiście po to jest baza danych aby przechowywać w niej rekordy. Oto jak można dodawać, wyświetlać, modyfikować i usuwać rekordy:
Dodawanie rekordów
Zaczynamy od zwykłego polecenia SQL – INSERT. Treść tego polecenia umieszczamy w zmiennej tekstowej. Następnie jak zwykle tworzymy obiekt serwera i bazy danych. Obiekt bazy danych posiada metodę ExecuteNonQuery, która takie polecenie INSERT wykona na serwerze zwracając tylko informację, czy polecenie się udało czy nie.
$sql = "INSERT INTO Test2 VALUES ('First'),('Second'),('Third')"
$SqlServer = New-Object Microsoft.SqlServer.Management.SMO.Server 'SQL01'
$db = $SqlServer.Databases["tempdb"]
$db.ExecuteNonQuery($sql)
Wyświetlanie rekordów – SELECT
Aby sprawdzić zawartość tabeli rozpocznij od stworzenia odpowiedniego polecenia SELECT. Mając je (i mając obiekt serwera i bazy, które zostały już utworzone w poprzednim przykładzie), można skorzystać z metody ExecuteWithResults, które przesyła zapytanie na serwer i zwraca wynik. Wynik ten to tzw. DataSet. DataSet składa się z tabel. Ponieważ nasze zapytanie zwraca tylko jedną tabelę, to wynik znajduje się w zerowej tabeli zwróconego wyniku (numeracja w PowerShell zaczyna się od zera) Czytaj dalej »