VB.NET 2015 - iTextSharp Seiten aus PDF Datei entnehmen (extract)

PDF Seiten aus einer PDF Datei mithilfe der Library iTextSharp in eine neue Datei exportieren.

Public Function ExtractPdfPages(ByVal SourceFile As String, ByVal TargetFile As String, ByVal IntStr As Integer, ByVal IntEnd As Integer)
        Try
            Dim impPage As PdfImportedPage = Nothing
            Dim Reader As New PdfReader(SourceFile)
            Dim srcDoc As New Document(Reader.GetPageSizeWithRotation(IntStr))
            Dim PdfCopyProvider As New PdfCopy(srcDoc, New System.IO.FileStream(TargetPath & "\" & TargetFile, System.IO.FileMode.Create))
            PdfCopyProvider.SetFullCompression()
            srcDoc.Open()
            For X = IntStr To IntEnd
                impPage = PdfCopyProvider.GetImportedPage(Reader, X)
                ' ----- Ermitteln der Seitenauflösung und setzen für die neue Seite
                PdfCopyProvider.SetPageSize(New Rectangle(0.0F, 0.0F, impPage.Width, impPage.Height))
                ' ----- PDF Seite in das neue Dokument einfügen
                PdfCopyProvider.AddPage(impPage)
            Next
            ' ----- neues PDF Dokument und den Reader schließen
            srcDoc.Close()
            Reader.Close()
        Catch ex As Exception
            Throw ex
        End Try
    End Function


Benötigt :

Imports iTextSharp.text.pdf
Imports iTextSharp.text
Imports System.Runtime.CompilerServices


Quellen :
iTextSharp - Library
http://developers.itextpdf.com/itextsharp-net
https://github.com/itext/itextsharp/releases

Exchange 2010 - Zustelloptionen (GrantSendOnBehalfTo) können nicht gesetzt werden

Problem :

Unter Microsoft Exchange 2010 wird versucht unter USERPOSTFACH -> Nachrichtenübermittlungseinstellungen -> Zustelloptionen einen neuen Benutzer hinzuzufügen.

Dies schlägt mit einer Meldung fehl

Fehler Zustelloptionen

Lösung :

Der Grund liegt hier vermutlich daran das ein Benutzer, der dieses Recht auf das betroffene Postfach hatte, gelöscht wurde.
Ein Vergleich zwischen der Exchange 2010 GUI und der Powershell hat ergeben das der gelöschte Benutzer noch das Recht hatte aber nicht in der GUI angezeigt wurde. In der GUI wurden 2 Benutzer angezeigt über die Powershell Abfrage 3.

Powershell Befehl um Zustelloptionen anzuzeigen :
Get-Mailbox -Identity "E-MAIL Adresse des Betroffenen Postfaches"  | Select GrantSendOnBehalf

Diesen Output mit den Einträgen in der GUI vergleichen. In meinem Fall waren diese Unterschiedlich, ich habe mir die vorhanden Zustelloptionen gemerkt und dann komplett geleert. Nach dem leeren konnte ich alle vorhanden incl. des neuen Benutzers wieder über die GUI eintragen.

Powershell Befehl um Zustelloptionen komplett zu leeren :
Set-Mailbox -Identity "E-MAIL Adresse des Betroffenen Postfaches" -GrantSendOnBehalfTo $null


Oracle - Datentyp NUMBER(m,n) wird in Access als DECIMAL(m,n) mit Problemen in den Nachkommastallen eingebunden.

Problem:
Um in Microsoft Access Tabellen von „echten“ Datenbanken einzubinden wird i.d.R der datenbankeigene ODBC-Treiber verwendet, um u.a. Datentypen in die jeweils bekannten Formate umzusetzen.
Dieses ist bei Oracle nicht optimal gelöst. Seit ein paar Versionen wird der Oracle Datentyp NUMBER(m,n) in Microsoft Access als Decimal umgesetzt (vorher DOUBLE). Hierbei gehen die Nachkommstellen verloren.

Lösung:
Dem ODBC Treiber etwas vorgaukeln. Der ODBC Treiber liest seine Informationen aus der Systemtabelle sys.all_tab_columns, spricht diese View allerdings über den PUBLIC SYNONYM all_tab_columns an. Gleichnamige eigene Objekte werden aber vor den PUBLIC SYNONYM gelesen.

Diese View im Schema des USERS der die Einbíndung ausführt erstellen:
CREATE VIEW all_tab_columns AS
SELECT owner, table_name, column_name, data_type, data_type_mod, data_type_owner,
       data_length,
       CASE WHEN data_type = 'NUMBER' AND data_scale > 0 THEN NULL ELSE data_precision END  data_precision,
       CASE WHEN data_type = 'NUMBER' AND data_scale > 0 THEN NULL ELSE data_scale END  data_scale,
       nullable, column_id, default_length,
       data_default, num_distinct, low_value, high_value, density, num_nulls,
       num_buckets, last_analyzed, sample_size, character_set_name, char_col_decl_length,
       global_stats, user_stats, avg_col_len, char_length, char_used, v80_fmt_image,
       data_upgraded
FROM sys.all_tab_columns

Mit dieser Änderung werden nur die NUMBER(m,0) als Decimal eingebunden, alle NUMBER(m,n) mit n > 0 werden als Double eingebunden.

Dieses ist getestet mit Oracle Sever 9.2.0.7.0 und 11.2.0.3.0.jeweils mit den ODBC Client 11.01.00.07. Die Struktur dieser „lokalen Systemtabelle“ muss der sys.all_tab_columns entsprechen (versionsabhängig)
Nicht die View im SYS-Schema anpassen !!


Raspberry Pi3 & OMD - Open Monitoring Distribution

Servermonitorring wird immer wichtiger je größer die zu überwachende Umgebung wird. Es gibt verschiedene Ansätze um dies zu realisieren. Die Jungs von Check_MK haben eine freie Alternative zu ihrem Produkt (CEE) geschaffen das für kleinere Umgebungen durchaus genügt.
Allerdings ist in der freien Version CRE oder OMD etwas mehr Handarbeit nötig, vor allem bei den Agents.

Da ich einen Raspberry Pi3 verwende habe ich mich für OMD entschieden da es hier schon fertige Packete für armv8 gibt.

Erstmal besorgt man sich ein aktuelles raspbian-lite und schreibt das Image auf eine Micro-SD, ich würde hier mind. 8 GB empfehlen.
Da dieser Schritt zu genüge im Internet erklärt ist gehe ich hier nicht weiter darauf ein.

Sobald das System läuft kann man sich über die IP anmelden. Ich habe dafür einfach auf meinem DHCP Server nachgeschaut.

1.) Anmelden über SSH auf dem RaspBerry Pi3
ssh pi@IP-Adresse
oder, für die Windows Benutzer, über Putty / Kitty. Default Zugangsdaten sind Benutzer : pi Passwort : raspberry

2.) Ändern der Passwörter
Bleibt nicht auf den Defaults das ist ein unnötiges Risiko.

Einmal das user Passwort ändern mit passwd und dann das root Passwort mit sudo passwd

3.) Mit root anmelden
su - root
man könnte auch alle Schritte mit sudo erledigen aber gerade für die Grundkonfiguration geht mir pers. das auf die Nerven

4.) Nachdem man mit root angemeldet ist das System auf den aktuellsten Stand bringen
apt-get update && apt-get -y upgrade


5.) ändern des Computernamen
raspi-config

Hostname Konfiguration raspbianHostname Konfiguration raspbian

6.) Einstellen der Länderspezifischen Sachen & Expand Filesystem

Für Deutschland empfehle ich diese Einstellungen
I1 = de_DE.UTF-8 UTF-8
I2 = Europe/Berlin
I4 = DE Germany

5 Internationalisation Options
Expand Filesystem

7.) System neu starten
Müsste von raspi-config sowieso verlangt werden, sollte dies nicht der Fall
reboot
oder
shutdown -r now


8.) Erneut am System via SSH anmelden (siehe 1. und 3.)

9.) Einbinden des OMD Repository & Cache erneuern

Erstmal installieren wir uns den GPG Key für das Repo
cd ~
wget -q "https://labs.consol.de/repo/stable/RPM-GPG-KEY" -O - | sudo apt-key add -

Jetzt fügen wir das Repository hinzu
echo "deb http://labs.consol.de/repo/stable/debian $(lsb_release -cs) main" > /etc/apt/sources.list.d/labs-consol-stable.list

Dann müssen wir den Packet Cache erneuern
apt-get update


10.) Jetzt können wir omd installieren
Das META Packet installiert die aktuellste Version incl. der Abhängigkeiten
apt-get install omd-labs-edition


11.) Während der Installation muss ein MySQL Passwort für den Benutzer root vergeben werden.

12.) Sicherstellen das das System für OMD vorbereitet ist.
omd setup

13.) eine Seite für die Überwachung in OMD anlegen
omd create demo
wobei demo euer Sitename ist

14.) Konfigurieren der Seite
omd config demo
ich zeige euch meine Konfiguration es gibt aber viele andere Möglichkeiten OMD zu konfigurieren !

CONFIG OMD

solltet ihr meine Konfiguration übernehmen müsst ihr noch eine Datei editieren. Es kann vorkommen das dieser Schritt nach jedem Update gemacht werden muss jedoch hatte ich noch keine Probleme damit.
nano /omd/sites/demo/etc/apache/conf.d/auth.conf
dort kommentiert ihr Auth* und require valid-user aus.
#  AuthName "OMD Monitoring Site demo"
#  AuthType Basic
#  AuthUserFile /omd/sites/demo/etc/htpasswd
#  require valid-user

wenn ihr das nicht macht bekommt ihr immer 2 Anmeldemasken , die 1. ist von Thruk die 2. von Check_MK/OMD

15.) Starten der OMD Seite
omd start demo


16.) Server selbst überwachen - OPTIONAL
Wenn ihr den Server selbst überwachen möchtet müsst ihr euch noch den passenden Agent installieren.
dpkg -i /omd/sites/demo/share/check_mk/agents/check-mk-agent_1.2.6p12-1_all.deb 
auch das überwachen auf neue Updates würde ich gleich mit auf dem lokalen Server nach dieser Anleitung einrichten


Weiterführende Links :
Raspberry - Temperatur in Prompt
SSH Login ohne Passwort
OMD/CHECK_MK Plugin - Quotas überwachen Windows 2008 R2
OMD/CHECK_MK Plugin - Aufgaben überwachen (inzw. incl.)
OMD/CHECK_MK Plugin - Debian auf Updates überwachen
Viele weitere Plugins für OMD/CHECK_MK

Quellen :
https://labs.consol.de/repo/stable/
http://omdistro.org/start
https://www.raspberrypi.org/downloads/raspbian/

Temperatur auf der Admin Seite von Pihole anzeigen

Wie ihr hier auf dem Screenshot sehen könnt wird bei mir die Temperatur direkt in der Admin Webseite mit angezeigt.
Es liegt hier eine Farbskala zugrunde.

Alles bis 60 °C = grün
Zwischen 61 °C und 79 °C = gelb
Alles über 80 °C = rot



Ich wurde schon mehrmals deswegen angeschrieben wie ich das realisiert habe, ist ganz einfach ;-)

1.) Anmelden über ssh auf dem Pihole System
2.) folgenden Befehl ausführen
nano /var/www/html/admin/header.html

3.) Dort sucht ihr nach diesem Block
 "0") {
            echo ' Active
'; } else { echo ' Offline
'; }

4.) Darunter fügt ihr die Temperatur ein indem ihr diesem Block direkt darunter kopiert (bei mir Zeile 114)
// Temperatur auslesen und darstellen
$datei = "/sys/class/thermal/thermal_zone0/temp";
// Datei zeilenweise auslesen
$zeile = file($datei);
$temp = $zeile[0];
$temp0 = substr($temp,0,2);
$temp1 = number_format($temp / 1000,2, '.', '');
// bis 60 Grad ok
if ($temp0 <= 60) {
echo '  ' . $temp1 . ' C';
}
// ab 61 Grad warning
if ($temp0 >= 61 AND $temp <= 79) {
echo '  ' . $temp1 . ' C';
}
// ab 80 Grad Critical
if ($temp0 >= 80) {
echo '  ' . $temp1 . ' C';
}

Prompt für Raspberry

Wer die Temperatur des System immer im Auge behalten möchte und viel in der Shell arbeitet kann dies direkt mit der Prompt erledigen.

Öffnen der Datei ~/.bashrc dies kann man mit diesem Befehl erledigen
nano ~/.bashrc

Anlegen einer speziellen Prompt für den Benutzer, indem man den folgenden Text ganz unten in die Datei ~/.bashrc kopiert.
# Prompt
export PS1='\[\033[1;33m\]\u\[\033[1;30m\]@\[\033[1;31m\]\H \[\033[1;30m\]- \A - $(vcgencmd measure_temp) \[\033[0m\] #> '



“Das einzig sichere System müsste ausgeschaltet, in einem versiegelten und von Stahlbeton ummantelten Raum und von bewaffneten Schutztruppen umstellt sein.”
Gene Spafford (Sicherheitsexperte)