środa, 13 lutego 2019

Aktywacja Windows w wersji Trial

Często zdarza się, że instalujemy system operacyjny Windows w wersji Trial (częściej wersje serwerowe aniżeli desktopowe). Jest to wygodne, bo można rozpocząć prace wdrożeniowe na długo przed procedowaniem licencji (czasami trwa to długo). Gdy przychodzi jednak czas aktywacji systemu, wtedy napotykamy problem i błędy z aktywacją (spotkałem kilka takich komunikatów). Fragment błędu może wyglądać tak:

Error: 0xC004F069 On a computer running Microsoft Windows non-core edition (...)

Aby poradzić sobie z tym problemem musimy niejako przeładować naszego Trial'a we właściwą wersję. Do tego wystarczą dwie komendy i dostęp do internetu:

DISM.exe /Online /Get-TargetEditions
DISM /online /Set-Edition:ServerStandard /ProductKey:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX /AcceptEula

Po tym restart i jesteśmy w domku :)

Temat dotyczy tak wersji serwerowych jak i Windows 10.

Uprawnienia do serwisu

Dość częstym problemem jest nadawanie uprawnień do włączania lub wyłączania (tudzież restartowania) określonych serwisów systemu Windows przez użytkownika nie będącym administratorem. Zdawałoby się, że "po co użytkownikowi takie uprawnienie?". A chociażby do restartu tzw. spoolera.
Sam Windows posiada na pokładzie narzędzie, przy pomocy którego można zmienić te ustawienia uprawnień do serwisu, ale jego zawiła składnia skutecznie zniechęca do podjęcia nawet prób zmiany tychże uprawnień (mowa o sc.exe). Stąd warto sięgnąć po narzędzia, które są proste, przystępne i zrouzumiałe w swojej składni. Mam tu na myśli darmowe narzędzie ze stajni Sysinternals: SubInAcl Tool  (https://www.microsoft.com/en-us/download/details.aspx?id=23510).
Jest to narzędzia linii komend, ale nie ma co się bać. Jego składnia jest przystępna i łatwa w zrozumieniu. Jedyne co musimy pamietać to to, że na serwis można nałożyć aż 14 uprawnień, które reprezentowane są przez odpowiednie literki:
  • F : Full Control 
  • R : Generic Read 
  • W : Generic Write 
  • X : Generic eXecute 
  • L : Read controL 
  • Q : Query Service Configuration 
  • S : Query Service Status 
  • E : Enumerate Dependent Services 
  • C : Service Change Configuration 
  • T : Start Service 
  • O : Stop Service 
  • P : Pause/Continue Service 
  • I : Interrogate Service 
  • U : Service User-Defined Control Commands

W przypadku nadawania pełnych uprawnień do serwisu spoolera komenda będzie wyglądała tak:

subinacl /SERVICE \\lon-prnt1\spooler /grant=nazwa_domeny\użytkownik=F

Dla tych, co nie bardzo lubią linię poleceń, można polecić inne narzędzie z tej samej stajni: Process  Explorer. Tu można wyświetlić właściwości serwisu a jedna z zakładek będzie pozwalała na wizualne ustawienie uprawnień do procesu.

czwartek, 16 listopada 2017

Jak wyłączyć naklejki połączeń głosowych?

Wyjątkowo denerwująca aktualizacja do S8 (ale nie tylko!) sprzed kilku miesięcy dodała funkcjonalność, która z biznesem (do którego są adresowane telefony premium) nie wiele ma wspólnego. Animowane naklejki przyklejane do połączeń głosowych wyglądają infantylnie, jak dziecinada wielu wczesno-przedszkolnego. Każdy, kto się z tym spotkał z pewnością wie o czym mowa. Dla przypomnienia jednak przedstawiam jak to wygląda podczas wybierania połączenia:


Wybranie jednego z tych dziwnych tworów zastępuje zdjęcie kontaktu i animuje się, przesyłając tę animkę także do drugiego telefonu - żenada! Oto instrukcja pozbycia się tego badziewia:


  1. Otwieramy kontakty.
  2. Wybieramy opcje.
  3. Wyłączamy "udostępnienie profilu". 
I gotowe! Nigdy więcej kwasu!

środa, 23 sierpnia 2017

Import NK2 do MS Outlook 2013/2016

Podpowiadacz adresów w Outlooku (mylony czasami z kontaktami sugerowanymi) jest narzędziem niezwykle ważnym dla użytkownika. Jego istotność jest tak wielka, że brak tego podpowiadacza dla użytkownika oznacza "brak kontaktów". Dane podpowiadania są przechowywane w pliku NK2 (nie dotyczy już wersji Outlook 2016) w jednym katalogów (w zależności od wersji systemu operacyjnego i MS Office):

  • \Documents and Settings\Nazwa użytkownika\Dane aplikacji\Microsoft\Outlook
  • \Users\Username\AppData\Roaming\Microsoft\Outlook


Migracja do nowszego Office lub przenosiny (reinstalacja) na nowy komputer, zawsze będzie się więc wiązać z brakiem podpowiedzi (NK2) w nowej instalacji. Jak więc zaimportować plik podpowiedzi do nowego profilu Outlook? Są conajmniej dwa rozwiązania:

  • narzędzie NK2View lub NK2Edit lub
  • uruchomienie MS Outlook z odpowiednim przełącznikiem. 

Narzędzia NK2view przedstawiać raczej nie trzeba - bogate w możliwości manipulacji pliku podpowiedzi, daje wiele opcji zarządzania NK2. O tym jednak możecie poczytać na stronie producenta. Dużo ciekawsze jednak jest to drugie rozwiązanie - tym bardziej, że udostępnione przez sam Microsoft.

Aby zaimportować poprzedni plik NK2 do nowego profilu MS Outlook musimy wykonać następujące zadania:

  1. Sprawdź nazwę profilu Outlook, na którym pracuje obecny użytkownik (panel sterowania -> Poczta (Microsoft Outlook...) -> przycisk Pokaż Profile (np. "PLIK").
  2. Poprzedni plik NK2 nazywamy tak jak nazywa się obecny profil Outlook (np. "PLIK.NK2").
  3. Umieszczamy ten plik w katalogu %appdata%\Microsoft\Outlook.
  4. Z polecenia "Uruchom" (w Windows 10 za pomocą skrótu klawiszowego WIN+R) uruchamiamy MS Outlook z odpowiednim przełącznikiem: outlook /importnk2.
  5. Wybieramy "Nowa Wiadomość" i w wpisujemy pierwszą literkę adresu email - podpowiedzi powinny już zawierać dane z naszego poprzedniego pliku NK2.

środa, 2 sierpnia 2017

MS Security Essentials na WindowsServer 2012

Ostatnie działania hakerskie sprawiają wiele problemów i przykrości wielu użytkownikom i firmom, gdzie szyfrowane dane często są do odzyskania tylko poprzez odzysk z backupu. Wielu administratorów nie instaluje oprogramowania AV na serwerach - powodów jest wiele. Część z nich to obawa o stabilność serwera, dla części koszt takiej licencji jest wygórowany. Jeśli jednak już zostaniemy zaatakowani i trzeba sprawdzić serwer, to okazuje się, że darmowego i skutecznego oprogramowania (nawet w wersji Trial) jest jak na lekarstwo. Jak wtedy szybko się ratować?
Rozwiązaniem będzie instalacja Microsoft Security Essentials. Generalnie oprogramowanie to nie zostało przeznaczone na serwer, więc tak wprost nie da się tego zainstalować. Jest jednak metoda, aby to ominąć. Wystarczy zainstalować program z opcją "disableoslimit". Oto instrukcja:

  1. Pobierz MSE ze strony MS: http://windows.microsoft.com/en-us/windows/security-essentials-all-versions
  2. Prawym przyciskiem na pobrany plik wybierzmy Properties
  3. Na zakładce Compatibility wybierzmy kompatybilność z Windows 7 i zapiszmy nowe ustawienia.
  4. Następnie otwórzmy linię poleceń i przejdźmy do katalogu, gdzie pobraliśmy nasz plik instalacji.
  5. Wpiszmy komendę "mseinstall /disableoslimit" i zatwierdźmy enterem. 
Instalacja przebiega bezproblemowo. Skanowanie także działa bez zarzutu. Trzeba jednak pamiętać, że MSE nie został przewidziany na pracę serwerową, więc po zagaszeniu pożaru warto się go pozbyć. Deinstalacja tego programu jednak też jest nieco tricky - wymaga zmiany ścieżek do komendy deinstalacyjnej w rejestrze w drzewie Uninstall


poniedziałek, 27 czerwca 2016

Resetowanie licencji Terminal Server 2000/2003

Licencje terminalowe w wersji 2000/2003 są już kompletnie nie dostępne. Nie można więc dokupić, aby zwiększyć ich liczbę. Jeśli na co dzień nie przekraczamy zakupionej liczby, to może się okazać, że reset licencji od czasu do czasu nie powinien nas zbytnio przytłaczać, zwłaszcza, że procedura ta jest dość prosta.

Dlaczego jednak może być konieczność resetowania licencji? Gdy mamy wykupione licencje per device to każdy nowy komputer, który zaloguje się na nasz serwer terminali zajmie jedną licencję. Operacja ta powtarza się z każdym nowym komputer aż do wypełnienia licencji. Gdy wszystkie licencje zostaną rozdysponowane – wtedy nikt z nowym komputer nie dostanie się do serwera terminali (mowa o usługach terminalowych oczywiście!). W tej sytuacji reset licencji bywa niezwykle pomocny, aby proces
przypisywania licencji zacząć od początku.

Oto instrukcja resetu licencji:

  1. Zatrzymujemy serwis odpowiedzialny za licencje terminalowe (net stop TermServLicensing). 
  2. Zmieniamy nazwę %windir%\system32\LServer na %windir%\system32\LServer.old 
  3. Tworzymy nowy katalog %windir%\system32\LServer.
  4. Uruchamiamy ponownie serwis licencyjny (net start TermServLicensing).
  5. Następnie wsprowadź ponownie licencje do serwera.

wtorek, 12 stycznia 2016

Outlook 2010 (problemy)

Tym razem bardzo krótka notka, która ma Wam dać do ręki szybkie rozwiązanie (bez owijania w bawełnę). Chodzi o kolejną nieudaną łatkę do Office, która skutecznie uprzykrza życie z Outlookiem i tym razem mowa o wersji 2010.

Objawy, które odnotowaliśmy:
  • nie trzymanie ustawień, np. okno podglądu po każdym uruchomieniu znika (trzeba je włączyć), lub resetowane są ustawienia podglądu wiadomości do tych domyślnych (co mnie osobiście od razu złości),
  • Outlook lubi uruchamiać się w trybie awaryjnym (nawet bez powiadamiania).

Tym razem winowajcą jest poprawka KB3114409. Jest jak zwykle do odinstalowania z Dodaj Usuń Programy, więc jest łatwo jej się pozbyć. Po odinstalowaniu trzeba będzie zrestartować komputer.

piątek, 18 grudnia 2015

Odzyskiwanie AD w Windows 2008 Server

Odzyskiwanie AD w Windows 2008 Server – czyli Recovery System State. Zadanie to nie jest już takie proste jak to miało miejsce w poprzednich systemach operacyjnych (Windows 2003 Server i starsze). Największa trudność tego zadania polega na uruchomieniu serwera w trybie DSRM (Directory Service Restore Mode). Wynika ona z tego faktu, że standardowo serwer nie jest przygotowany do wejścia w ten tryb – serwer musi być przygotowany.

Przygotowanie serwera do uruchomienia w trybie DSRM polega na dodaniu odpowiedniej opcji startu systemu za pomocą narzędzi BCDEDIT. Wiele źródeł podaje aby modyfikować domyślną opcję bootloadera, ale jest to zabieg co-nieco niebezpieczny i może przynieść nam w niedalekiej przyszłości bardzo wiele niepotrzebnych problemów. Podam więc sposób pozwalający w razie wpadki bez problemu wrócić do standardowego trybu pracy serwera bez dodatkowych, sztucznych zabiegów.

Cały zabieg zaczynamy od uruchomienia polecenia CMD jako administrator. Następnie wykonujemy skopiowanie domyślnej pozycji bootloadera, nadając mu jednak już odpowiednią nazwę:
C:\bcdedit /copy {default} /d "Directory Service Repair Mode"
W wyniku tej operacji otrzymamy komunikat mówiący o powodzeniu wykonania komendy i stworzeniu nowej pozycji bootloadera z nowym, określonym GUID:
The entry was successfully copied to {GUID_wygenerowany_przez_serwer}

Następnie musimy zmodyfikować tę pozycję, aby uruchamiała nam serwer w trybie DSRM:
C:\bcdedit /set { GUID_wygenerowany_przez_serwer} safeboot dsrepair

Teraz mamy podczas startu do wyboru już dwie opcje (pod warunkiem zaznaczenia opcji, aby system czekał na nasz wybór):


Teraz mamy już z górki.
Uruchamiamy serwer w trybie DSRM i po zalogowaniu (będzie potrzebne hasła odzyskiwania AD) z linii komend uruchomionej jako administrator uruchamiamy komendę sprawdzającą jakie mamy dostępne backupy (należy pamiętać, aby je wcześniej dołączyć do serwera!):
C:\wbadmin get versions
W wyniku tego polecenia dostaniemy coś na wzór:


Wybieramy właściwy backup, z którego chcemy odzyskać System State (AD) i wpisujemy polecenie:
C:\wbadmin start systemstaterecovery –version:12/13/2016-17:00
I teraz uzbrajamy się w cierpliwość, jako że odzyskiwanie potrafi trwać ponad godzinę przy bardzo małej AD.

Ten sposób wyzwala tzw. nieautorytatywne odzyskanie AD, więc jest przydatne, gdy mamy tylko jeden kontroler domeny, lub uszkodzony mamy tylko jeden kontroler domeny i chcemy tylko naprawić uszkodzenia zaciągając najświeższe dane z innego kontrolera domeny. Jeśli chcemy odzyskać System State (wraz z AD) w trybie autorytatywnym należy nieco zmodyfikować polecenie odzyskiwania:
C:\wbadmin start systemstaterecovery –version:12/13/2016-17:00 -authsysvol

poniedziałek, 1 czerwca 2015

Problem z dodaniem/usunięciem roli/funkcji w Windows 2008

W serwerze Windows 2008 (także w SBS, R2) zdarzają się bardzo często problemy z dodawaniem lub usuwaniem ról/funkcji. Gdy odpalamy Server Manager to w miejscu informacji dotyczących zainstalowanych ról i funkcji wyświetla się błąd. W pasku stanu można natomiast kliknąć "Pokaż szczegóły błędu". Tam odnajdujemy błąd:
hresult 0x80070543
Przeszukałem wiele zasobów internetowych i większość prowadziła do dwóch rozwiązań:

  • problem z aktualizacjami, który rozwiązuje się z pomocą Microsoft Update Readiness Tool,
  • problem z ustawieniem usług składowych
W moim przypadku ten pierwszy sposób to był niecelny strzał (u mnie aktualizacje chodziły bez zastrzeżeń a narzędzie nie pokazało żadnych problemów). Ten drugi sposób dotyczył mojego przypadku . Problem polega na tym, że Internet donosi o różnych ustawieniach domyślnych usług składowych, dla których będzie to działać poprawnie. 
W moim przypadku zadziałało:
  • uruchamiamy dcomcnfg.exe i przechodzimy do Usługi Składowe -> Komputery -> Mój Komputer,
  • tu wybieramy prawym przyciskiem i Właściwości,
  • przechodzimy do zakładki Właściwości domyślne
  • a tu wybieramy Połącz w Domyślnym poziomie uwierzytelnienia oraz Identyfikuj w Domyślnym poziomie personifikacji.
Powinno zacząć działać bez restartu. 
Warto tu jeszcze wspomnieć o tym, że zmiana tych ustawień, może mieć pewien wpływ na inne zainstalowane na serwerze aplikacje. Po zmianie należy więc przeprowadzić pełne procedury testowe. 

piątek, 19 grudnia 2014

Defragmentacja indeksów MS SQL

Fragmentacja indeksów w MS SQL jest dość ważnym problemem wydajnościowym baz danych. Utrzymanie tychże indeksów w dobrej kondycji staje się więc bardzo ważnym zadaniem administratora baz danych.
Kto powinien i kiedy defragmentować indeksy? Warto zacząć od sprawdzenia fragmentacji indeksów. Poniżej jest kod pozwalający na weryfikację fragmentacji zewnętrznej i wewnętrznej:

SELECT OBJECT_NAME(dt.object_id), si.name, dt.avg_fragmentation_in_percent, dt.avg_page_space_used_in_percent
FROM (SELECT OBJECT_ID, index_id, avg_fragmentation_in_percent, avg_page_space_used_in_percent FROM sys.dm_db_index_physical_stats (DB_ID(N'BAZA_DANYCH'), NULL, NULL, NULL, 'DETAILED') WHERE index_id <> 0) as dt
INNER JOIN sys.indexes si
ON si.object_id = dt.object_id
AND si.index_id = dt.index_id

Kolumna avg_fragmentation_in_percent mówi nam o fragmentacji zewnętrznej. Wartości powyżej 10 procent wskazuje na fragmentację (warto już coś zadziałać). Kolumna avg_page_space_used_in_percent mówi natomiast o fragmentacji wewnętrznej indeksu. Wartość poniżej 75% wskazuje na problem.

Jeżeli powyższe zapytanie kończy się błędem:
Incorrect syntax near '('

To oznacza, że nasza baza danych pracuje w "compatibility level 80 (SQL Server 2000)". Należy podnieść ten poziom i wtedy zapytanie działa jak należy.Jeżeli natomiast nie ma możliwości (z różnych powodów) podniesienia poziomu funkcjonalności należy zacząć od zdefiniowania zmiennych. Oto przykład takiego zapytania:
USE BAZA_DANYCH
GO
DECLARE
    @database_id INT = DB_ID(),
    @object_id INT = OBJECT_ID(N'BAZA_DANYCH')
SELECT a.index_id, name, avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats (@database_id ,@object_id , NULL, NULL, NULL) AS a JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id
GO

Do fragmentacji indeksów otrzymujemy dwa polecenia: ALTER INDEX...REORGANIZE oraz ALTER INDEX...REBUILD. Pierwszą z nich używamy, gdy problem fragmentacji jest nie wielki. REORGANIZE dodatkowo zużywa mniej zasobów i może zostać wykonana on-line. 
Mocno pofragmentowane indeksy powinno się przebudować (REBUILD). Należy pamiętać, że domyślnie powinno się to wykonywać, gdy baza danych nie jest wykorzystywana. Jest tu także opcja uruchomienia tego zadania w "locie" przy pomocy określenia dodatkowej opcji ONLINE, jednak REBUILD przebudowuje indeksy od samego początku, więc jest to zadanie dość czasochłonne i zasobożerne. 

Polecenia stosuje się bardzo prosto. Aby przebudować wszystkie indeksy w danej tabeli wpisujemy polecenie: 
ALTER INDEX ALL ON nazwa_tabeli REBUILD
ALTER INDEX ALL ON nazwa_tabeli REORGANIZE 

Aby przebudować wszystkie indeksy we wszystkich tabelach danej bazy danych kod mamy już nieco dłuższy:
USE  [Baza_danych]
GO
DECLARE @TableName VARCHAR(255)
DECLARE @sql NVARCHAR(500)
DECLARE TableCursor CURSOR FOR
SELECT OBJECT_SCHEMA_NAME([object_id])+'.'+name AS TableName
FROM sys.tables
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'ALTER INDEX ALL ON ' + @TableName + ' REBUILD'
EXEC (@sql)
FETCH NEXT FROM TableCursor INTO @TableName
END
CLOSE TableCursor
DEALLOCATE TableCursor
GO

Skrypt ten przebuduje wszystkie indeksy nie zmieniając wskaźnika wypełnienia stron indeksu (fill factor). Aby przebudować z nowym wskaźnikiem wypełnienia dodajemy do kodu małe zmiany:
USE [Baza_danych]
DECLARE @TableName VARCHAR(255)
DECLARE @sql NVARCHAR(500)
DECLARE @fillfactor INT
SET @fillfactor = 90
DECLARE TableCursor CURSOR FOR
SELECT OBJECT_SCHEMA_NAME([object_id])+'.'+name AS TableName
FROM sys.tables
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'ALTER INDEX ALL ON ' + @TableName + ' REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillfactor) + ')'
EXEC (@sql)
FETCH NEXT FROM TableCursor INTO @TableName
END
CLOSE TableCursor
DEALLOCATE TableCursor
GO

Idąc już tą drogą pozostaje podać jeszcze skrypt reorganizacji wszystkich indeksów bazy danych:
USE [Baza_danych]
DECLARE @TableName VARCHAR(255)
DECLARE @sql NVARCHAR(500)
DECLARE TableCursor CURSOR FOR
SELECT OBJECT_SCHEMA_NAME([object_id])+'.'+name AS TableName
FROM sys.tables
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'ALTER INDEX ALL ON ' + @TableName + ' REORGANIZE'
EXEC (@sql)
FETCH NEXT FROM TableCursor INTO @TableName
END
CLOSE TableCursor
DEALLOCATE TableCursor
GO
To wszystko może wyglądać dość skomplikowanie. Przypomnę więc dla tych bardziej początkujących, że defragmentacje można przeprowadzić również poprzez MaintenancePlan, używając klocków Reorganize Index Task lub Rebuild Index Task