obsługa błędów w PS
obsługa błędów jest niezmiernie istotna – nie tylko ze względu za komunikaty na ekranie [choć i to jest często ważne] ale bardziej na zastosowanie konkretnej akcji zależnie od tego co się dzieje. najczęściej oczywiście stosuje się try/catch, z pewnymi niuansami, o których trzeba pamiętać i o czym już pisałem. są niemniej przypadki, w których obsługa błędów nie jest taka trywialna zwłaszcza, jeśli korzysta się wewnątrz skryptu z zewnętrznych narzędzi/aplikacji. dla tego też zawsze bronię się rękami i nogami przed niekoszernymi rozwiązaniami, czasem nadpisując wiele linii kodu, byle tylko nie korzystać z zewnętrznych aplikacji. bywa jednak, że nie ma wyjścia.
takim przypadkiem jest scenariusz, w którym trzeba podmapować rejestr użytkownika aby wykonać jakieś operacje. gdzieś tam udało mi się dogrzebać do artu, w którym ktoś wykonywał ciężkie akrobacje programistyczne, aby obsłużyć to 'natywnie’ – czyli bez 'reg.exe’, to już jednak za dużo. nie ma więc wyjścia – trzeba skorzystać z 'reg load’. problem polega na tym, że reg load nie zwraca konkretnego błędu/informacji. próbowałem przypisywać jako zmienną, przekierowywać do pliq… pustka.
#$ntuserdatPath wskazuje na położenie ntuser.dat np. \\comp\c$\users\user\ntuser.dat $err=reg load "HKLM\__temp" "$ntuserdatPath" echo $err #pustka reg load "HKLM\__temp" "$ntuserdatPath"|out-file err.log gc err.log #pustka
chwilkę mi zajęło, zanim przypomniałem sobie jak to się robiło za króla świeczka – i ta metoda działa tak samo obecnie. a chodzi konkretnie o to, że 'reg’ wrzuca wszystko na standardowy strumień błędów, więc żeby go przechwycić, trzeba go przekierować na standardowy strumień wyjścia:
#$ntuserdatPath wskazuje na położenie ntuser.dat np. \\comp\c$\users\user\ntuser.dat $err=reg load "HKLM\__temp" "$ntuserdatPath" 2>&1 echo $err.exception #w PS2.o jest to źle obsługiwane i trzeba robić tak: [string]$err=reg load "HKLM\__temp" "$ntuserdatPath" 2>&1 echo $err
jak widać cała tajemnica tkwi w „2>&1”. więcej szczegółów a propos oznaczeń strumieni można przeczytać w about_redirection.
eN.
Lepsze wrogiem dobrego
Na dobre nastał Ms Office 2013. Funkcjonalność nowych wersji zgubiłem gdzieś w okolicach 2007, ale z tym da się żyć. Rozumiem też, że nowe wersje są konieczne z wielu powodów, głównie finansowych. Nie zmienia się jedynie procent wykorzystania możliwości kolejnych Officów przez „standardowego użytkownika”, który od wersji 95 oscyluje w granicach 1.
Nie o tym jednak jest ten wpis.
Cały czas staram się wskazywać klientom, że rozwiązania IT takie jak Ms Office to nie tylko edytor do napisania listu motywacyjnego, ale cały ekosystem, który odpowiednio użyty potrafi drastycznie zwiększyć wydajność każdej instytucji. Cały czas też spotykam się z tzw. „barierą Crtl-C/Crtl-V” – która jasno pokazuje, że te dwa skróty klawiszowe są maksymalnym pułapem wykorzystania funkcjonalności najlepszego programu biurowego poprzez „zwykłego użytkownika”. Fakt, że w roku 2014 wykorzystanie śledzenia zmian przy pracy nad dokumentem wciąż jest ewenementem wywołuje myśli samobójcze w działach IT i nie tylko ale też nie jest tematem tego wpisu.
Do rzeczy zatem. Na nic moje starania, gdy odbijam się od wściekłego użytkownika, który nie może pracować, bo „pan informatyk zainstalował nowe i zepsuł” Potwierdzone, co prawda jedynie moim przeczuciem statystyki awaryjności Offic’a 2013 a ZWŁASZCZA Outlooka z ostatniego pół roku, które dotknęły wszystkich – od domowych użytkowników wersji „zgodny z oryginalną” po korporacje z domeną i tych z Officem 365 mówią jedno – coś poszło nie tak.
Zwiechy przy ładowaniu, przycinanie się, aż po całkowitą niemożność załadowania profilu wszystko po zainstalowaniu Office’a 2013. Dotyczy nie tylko Outlooka, ale także pozostałych programów.
Zanim dotrą łatki, rozwiązanie które działało w ok 95% przypadków.
Disable hardware acceleration
1. Run regedit (Win + R ; „regedit”)
2. Browse to HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Common
3. Create a New Key and name it „Graphics”
4. Select Graphics, right-click on the right panel and create a New DWORD (32-bit) Value and name it DisableHardwareAcceleration.
5. Enter Value data as 1
Nie mam bladego pojęcia, co robi ten wpis w rejestrze, ale działa.