SSRS: Błąd podczas uruchamiania data driven subscription

2015-11-27

Podczas uruchamiania zaplanwanej subskrypcji raportu dostałem info:

8 items processed; 8 errors.

Hmmm brak szczegółów co się stało, ale nic dziwnego, bo SSRS loguje błedy do pliku tekstowego Report_Server_Service<tutaj data>.log Zaglądam szukam błedu, a tam:

ERROR: Throwing Microsoft.ReportingServices.FileShareDeliveryProvider.FileShareProvider+NetworkErrorException: An impersonation error occurred using the security context of the current user., Microsoft.ReportingServices.FileShareDeliveryProvider.FileShareProvider+NetworkErrorException: An impersonation error occurred using the security context of the current user. —> System.Runtime.InteropServices.COMException (0x80070569): Logon failure: the user has not been granted the requested logon type at this computer. (Exception from HRESULT: 0x80070569)

Co to znaczy? Hasło użytkownika jest dobre, ale konto nie ma wystarczających uprawnień do logowania lokalnego. Wystarczy dodać dla konto prawo LogOn locally.

By Rafał Kraik in SSRS

Powershell: Kto i kiedy wyłączył serwer

2015-11-25

Jako administrator odpowiadasz za to, żeby usługi były dostępne przez 99,99999…% czasu. A tu nagle okazuje się że ktoś/coś/jakieś licho zrestartowało serwer. Może restart był uzasadniony? Może po prostu wiadomość do Ciebie nie dotarła? Może ktoś próbował się włamać? A może to tzw. hardware failure?

Trzeba najpierw znaleźć kto i kiedy wyłączył komputer. Można w tym celu przeszukiwać logi, albo… skorzystać z gotowego polecenia wyświetlającego wpis z dziennika zdarzeń.  No to zaczynamy!

Informacja o restartcie jest zapisywana w dzienniku System. Jego źródłem jest USER32. To dość charakterystyczne dla zdarzenia wyłączenia serwera. Zaczynamy więc od:

Get-EventLog -LogName System -Source "USER32"

To polecenie wyświetli zdarzenia generowane przez USER32, ale rodzajów zdarzeń może być więcej. Aby wyfiltrować tylko te interesujące dodaj:

Get-EventLog -LogName System -Source "USER32" | ? {$_.EventID -eq 1074}

Pewnie nie interesują Cię wszystkie możliwe zdarzenia, tylko wystarczyłoby kilka ostatnich. I tak mamy:

Get-EventLog -LogName System -Source "USER32" | 
  Where {$_.EventID -eq 1074} | select -First 3

Jeśli treść zdarzenia nie mieści się w pojedynczej linijce można dodać jeszcze Format-Table. I oto ostatnia postać:

Get-EventLog -LogName System -Source "USER32" | 
  Where {$_.EventID -eq 1074} | select -First 3 | 
     Format-Table -wrap

event_1074

 

By Rafał Kraik in Power Shell

Powershell: Pasek postępu

2015-11-24

Chcesz w swoim skrypcie pokazać użytkownikowi, że coś się dzieje. Przydałoby się wyświetlić pasek postępu, podobny do tego jaki powershell wyświetla podczas aktualizacji helpa czy ładowania modułu. Żaden problem. Mamy do tego specjalną komendę Write-Progress.

progress_bar_powershellZałóżmy, że masz listę 15 serwerów na których masz wykonać pewne czynności. Nieco schematycznie można by sobie więc wyobrazić, że budujesz pętlę. Tutaj pokażę pętlę for, która ma się wykonać dokładnie 15 razy:

$NumberOfServers=15
For($i=0; $i -lt $NumberOfServers;$i++)
{
   #do some work on server
   Write-Host "Working on server $i"
   Start-Sleep -Seconds 1
 }

Jak widać – same uproszczenia u nas… zamiast listy serwerów 15 iteracji, zamiast prawdziwej pracy – tylko wyświetlenie komunikatu i jednosekundowy sen. Zaraz dodamy do tego przykładu pasek postępu. Czytaj dalej »

By Rafał Kraik in Power Shell

SSRS: File, Microsoft.ReportingServices.ComponentLibrary.Controls.dll, has a different computed hash than specified in manifest.

2015-11-24

No to chłopaki z Microsoft mieli imprezę, przynajmniej w dziale testów…

Jeśli zainstalowałeś SP3 dla SQL 2008R2 to jednym z objawów jest to, że uruchomienie ReportBuildera ze stronki Report Managera kończy się błędem:

File, Microsoft.ReportingServices.ComponentLibrary.Controls.dll, has a different computed hash than specified in manifest.

Na szczęście chłopaki przeprosili i napisali na ten temat na blogu:

http://blogs.msdn.com/b/sqlreleaseservices/archive/2014/10/16/report-builder-of-sql-server-2008-r2-service-pack-3-does-not-launch.aspx

No cóż przeprosili, ale nie naprawili… Żeby obejść problem należy:

Źródło: Connect

By Rafał Kraik in SQL

Kurs Powershell na Android/iPhone/iPad?

2015-11-23

Tak. Kurs Powershell uruchamiany na komórce jest w zasięgu ręki!

Screenshot_2015-11-23-16-36-39

Odwiedź stronę kursu Powershell dla administratorów – kompletny kurs i aktywuj szkolenie na swoim koncie.

W kolenym kroku zainstaluj aplikację Udemy na swoim urządzeniu. Zaloguj sie do aplikacji wykorzystując ten sam email, który był wykorzystywany podczas aktywowania kursu w przeglądarce. Kiedy przejdziesz do zakładki „My Courses”, możesz zacząć naukę gdziekolwiek zechcesz.

A jeśli ogranicza Cię dostęp do Internetu – ściągnij kurs w postaci offline na komórkę. Teraz możesz posłuchać wykładu gdziekolwiek jesteś:

Screenshot_2015-11-23-16-37-38

Screenshot_2015-11-23-16-37-20

 

By Rafał Kraik in Aktualności

Powershell: Podsumowanie wielości dysków

2015-11-23

Biznes zwraca się z pyaniem „To ile właściwie mamy dysków i o jakim rozmiarze w serwerze XXX?”. Wchodzisz na serwer i widzisz dyski C: D: E: F: G: H: I: J:….., no przecież nie będę tego liczyć na piechotę!

Zaczynamy od

Get-WmiObject win32_logicaldisk

disk01

Wynik już mamy, ale w bajtach i dla każdego dysku oddzielnie.

W takim razie najpierw przeliczmy bajty na gigabajty. W tym celu posłużymy się wyrażeniem Select tworzącym nowe, wyliczane kolumny:

Get-WmiObject win32_logicaldisk | 
Select DeviceID,@{n='SizeGB';e={$_.Size/1GB,2}},
 @{n='FreeGB';e={$_.FreeSpace/1GB}}
disk02

Czytaj dalej »

By Rafał Kraik in Power Shell

Mapowanie dysku sieciowego z cmd.exe

2015-11-17

Przydatna komenda ze starego DOS-a pozwala zamapować dysk z linii komend:

net use Q: \\server001.domain.net\d$ /user:domena\username

W moim przypadku musiałem z zasobu sieciowego uruchomić program „jako administrator”. Niestety jeśli zmapowałem dysk jako normalny użytkowik, to uruchamiając cmd traciłem informację o zamapowanym dysku. Dlatego mapowanie musiałem zrobić po uruchomieniu cmd.exe.