Quantcast
Channel: Robert Kraus – krausens-online.de
Viewing all 71 articles
Browse latest View live

UrBackup: Server Installation unter Windows 1b/7

$
0
0

URBackup ist ein Server/Client-gestütztes Backupsystem, was bedeutet, dass (im Gegensatz zum Backuppc) neben einem Backupserver auch ein Agent/Client installiert werden muss. Agent und Server können aber auf dem gleichen Rechner installiert werden.
UrBackup steht für Windows, Linux und einige NAS-Systeme zur Verfügung.

Die Installation:
UrBackup lässt sich sehr einfach auf einem Windows-Rechner/-Server installieren.
Einfach in den Download-Bereich von UrBackup.org gehen und hier die exe (32/64Bit) oder das msi-Paket (nur64bit) herunterladen und mit einem Doppelklickt installieren.
urbackup_serv_w_01 urbackup_serv_w_02 urbackup_serv_w_03 urbackup_serv_w_04
Das war´s dann auch schon.

Der gravierendste Unterschied zur Linux-Installation liegt darin, dass nicht nach dem Verzeichnis für den Backup-Pfad gefragt wird, was dann auch schon sofort nach dem ersten Aufruf von http://localhost:55414 mit einer Fehlermeldung angezeigt wird.
urbackup_serv_w_05
Das Standart-Verzeichnis C:\urbackup ist nämlich gesperrt, da es sich auf dem Systemverzeichnis befindet.
Jetzt gilt es folgendes zu überlegen:

  • Es muss ein Verzeichnis sein, auf das der Benutzer schreiben kann. In der Regel ist dass das User-Verzeichnis (c:\users\\..)
  • wenn auf dem Rechner, auf dem der UrBackup-Server installiert wurde ebenfalls gesichert werden soll (vor Allem als Image), dann ist die C-Partition eine schlechte Wahl. Da diese ja durch die Backups immer mehr ansteigt und die Backups nochmal mit gesichert werden.
  • Klare Empfehlung ist die Verwendung einer zweiten Festplatte oder zumindest einer zweiten Partition.
    Dies wird unter „Einstellungen“ -> „Server“ -> „Datensicherungspeicherpfad“ eingestellt.
    In meinem Beispiel somit „d:\urbackup“ (das Verzeichnis sollte natürlich existieren).
    urbackup_serv_w_06
    Auf der Status-Seite ist die Fehlermeldung dann auch schon weg.
    urbackup_serv_w_07

    Somit ist der Server bereit, um Backups ausführen zu können, muss jetzt noch ein Client installiert werden. Dieser kann auf einem anderen Rechner, oder aber auch auf den gleichen Rechner installiert werden.


    UrBackup: Client Installation unter Windows 2/7

    $
    0
    0

    Den UrBackup-Windows-Client erhält man direkt auf der Seite von „Urbackup.org“, oder in dessen Download-Bereich. Im Download-Bereich kann man nicht nur zwischen der exe (32/64Bit) und msi-Paket (64bit)wählen, sondern auch ob der Agent mit oder ohne TrayIcon installiert werden soll.
    Über das TrayIcon hat der User die Möglichkeit, Backups selber anzustoßen, das lässt sich aber auch gut einschränken.

    Die Installation:
    Die Installation selber ist wieder sehr einfach: Doppelklick und gut.
    urbackup_serv_wc_01 urbackup_serv_wc_02 urbackup_serv_wc_03

    Nach der Installation taucht der UrBackup-Client im Try-Bereich von Windows auf.
    urbackup_serv_wc_04
    Weitere Einstellungen sind nicht notwendig, wenn sich der Client und der Server im gleichen Netzwerk befinden.
    Die Verbindung wird von alleine gefunden.
    In der Status-Seite des UrBackup-Servers (Webseite https://<ip-des-servers:55414) erscheint dann auch der Client und zeigt an, dass noch keine Backups oder Images erzeugt wurden.
    Auf dem Client selber kann man, mit einem Rechts-Klick auf das TrayIcon, selbstständig Datei- und Abbildsicherungen (Image) als Vollbackup oder als inkrementelles Backup ausführen.
    urbackup_serv_wc_05

    Ohne jetzt tiefer in die Einstellungen eintauchen zu wollen (da diese analog zu den Einstellungen am Server gesetzt werden), hier ein kurzer Überblick.
    Unter “Einstellungen” können die Werte für die Datei- oder Abbildsicherung eingeben, bzw. angepasst werden.
    Im Reiter „Client“ stehen die Einstellungen für die Backupzeit zur Verfügung und man hat die Möglichkeit die Geschwindigkeit des Backups einzustellen.
    UrBackup bietet ebenso die Möglichkeit, ein Backup über das Internet auszuführen.
    Die nötigen Verbindungsoptionen werden im Reiter „Internet“ eingestellt.
    Wer das Backup nur innerhalb seines Netzwerkes nutzt, kann auf diese Einstellung verzichten.
    Unter „Datensicherungspfade hinzufügen/entfernen“ kann man Verzeichnisse angeben, welche gesichert werden sollen (oder diese wieder entfernen).
    urbackup_serv_wc_06

    Da im Standard zwar ein Zeitfenster für die Backups angegebenist, aber keine Verzeichnisse, würde jetzt -ohne weitere Einstellungen- keine Datensicherung ausgeführt werden (bzw. schon ausgeführt, aber ohne zu sichernden Inhalt).
    Lediglich ein Abbild wird nach einiger Zeit automatisch angelegt.

    UrBackup: Serverübersichts-Seite 3/7

    $
    0
    0

    Die Übersichtsseite von UrBackup erreicht man über die Adresse http://:55414.
    Hier erhält man eine Übersicht über die aktuellen Sicherungen und Aktionen.
    Auch die Einstellungen von UrBackup werden über diese Seite vorgenommen.

    Spracheinstellungen:
    UrBackup unterstützt viele Sprachen – auch deutsch …
    urbackup_serv_stat_01

    Status
    Eine Übersicht über alle Clients und deren Sicherungen. Hier erkennt man auch sofort, ob es eine aktuelle Datensicherung oder ein aktuellen Abbild des Clients gibt
    urbackup_serv_stat_02
    Interessant ist auch die unterste Zeile der Status-Seite, denn hier steht die Serveridentität. Es können mehrere Server verwendet werden, die jeweiligen Identitäten sind dann im Client in der Datei „server_idents.txt“ nachzutragen (siehe UrBackup – FAQ)

    Aktivitäten
    Eine Übersicht über alle Sicherungen, welche aktuell aktiv sind
    urbackup_serv_stat_03

    Datensicherungen:
    Eine Übersicht über alle Datensicherungen der jeweiligen Clients.
    urbackup_serv_stat_04

    Protokolle
    Hier sieht man nicht nur eine Übersicht aller Sicherungen und Abbilder der Clients, sondern man hat auch die Möglichkeit, sich das Echtzeitprotokoll von UrBackup anzusehen.
    Dazu lässt sich die Ausgabe noch von „Alle“ auf die Ausgabe eines Clients begrenzen
    urbackup_serv_stat_05 urbackup_serv_stat_05a urbackup_serv_stat_05b
    Unter „Berichte“ hat man noch die Möglichkeit, sich Protokolle per Mail zusenden zu lassen (setzt ein konfiguriertes Mail-Setting in „Einstellungen“ -> „E-Mail“ voraus). Es kann auch ausgewählt werden, welche Informationen gesendet werden sollen.
    urbackup_serv_stat_05c
    Statistiken
    Wenn mehrere Clients gesichert werden, wird hier angezeigt, wie der verwendete Speicherplatz (100%) unter den jeweiligen Clients aufgeteilt ist. Leider sieht man hier nicht, wieviel Speicherplatz auf dem Backuplaufwerk/-partition direkt noch frei ist.
    Oben im Dropdown „Clients“ kann man sich ebenfalls wieder einen Client auswählen und bekommt eine historische Übersicht des Speicherbedarfs.
    urbackup_serv_stat_06
    Einstellungen
    Das wird ein neuer Beitrag :-)

    UrBackup: Backup-Einstellungen im Webinterface 4/7

    $
    0
    0

    Bisher wurde ein UrBackup-Server installiert (Windows oder Linux) sowie ein Windows-Client.
    Eine gute Zeit, sich einmal die Einstellungen des Servers genauer anzusehen. Die Dokumentation von UrBackup ist sehr gut, so dass ich die Einstellungen hier nur oberflächlich vorstellen möchte.

    Anlegen eines Users
    Die erste Einstellung sollte das Anlegen eines Benutzers sein, da aktuell die Serverseite des UrBackup-Servers ohne Login zu erreichen ist.
    „Einstellungen“ -> „Benutzer“ -> „Benutzer erstellen“
    Der erste User ist der User „admin“, zu dem lediglich ein Passwort angegeben werden kann. Name, sowie die Rolle „Administrator“ sind fest vorgegeben. Wer möchte kann jetzt noch weitere Benutzer anlegen. Auch die Rechte des „admin“ lassen sich noch einschränken (siehe UrBackup-Manual 4.1 „Server Webinterface rights management“)
    urbackup_serv_set_01 urbackup_serv_set_01a urbackup_serv_set_01b

    „Einstellungen“ -> „Allgemein“ -> „Server“
    (UrBackup-Manual 8.1 „Global Settings“)
    Hier kann vorgegeben werden, ob Datensicherungen überhaupt automatisiert ausgeführt werden sollen. Im Heimbereich u.U. eine gute Idee, da man hier selber entscheiden kann, wann ein Backup wieder nötig ist und – noch wichtiger – wann ein Client dafür „bereit“ ist.
    urbackup_serv_set_02

    „Einstellungen“ -> „Allgemein“ -> „Datensicherungen“
    (UrBackup-Manual 8.3 „Client specific settings“)
    Neben dem Zeitfenster für die automatisierte Datensicherung, werden hier auch die Definitionen Anzahl der zu erzeugenden und aufzubewahrenden Backups angegeben. Ebenso können Dateien via Wildcards exkludiert oder inkludiert werden, sowie standardmäßig zu sichernde Verzeichnisse angegeben werden. Achtung: dies gilt für jeden Client!
    Zusätzlich gibt es auch die Möglichkeit automatische(!) Dateisicherungen zu deaktivieren. Damit sind nur noch manuelle Datensicherungen möglich.
    urbackup_serv_set_03

    „Einstellungen“ -> „Allgemein“ -> „Abbildsicherungen“
    (UrBackup-Manual 8.3 „Client specific settings“)
    Neben dem Zeitfenster für die automatisierte Abbildsicherung, werden hier auch die Definitionen Anzahl der zu erzeugenden und aufzubewahrenden Abbilder angegeben. Hier wird auch der zu sichernde Datenträger angegeben (siehe Hinweis Sicherungspfad) Achtung: dies gilt für jeden Client!
    Das Abbild-Format ist VHD oder komprimierte VHD. Diese lassen sich z.B.: in Virtualbox direkt einbinden und nutzen. Nutzt man einen Windows-Rechner als UrBackup-Server lassen sich diese VHD-Dateien sogar direkt als virtuelle Festplatte mounten. Mit Tools wie VHD2HDD können aus diesem Abbild auch komplette Festplatten zurückgesichert werden (es gibt auch eine Recovery-Möglichkeit per Agent – aber dazu später)
    Zusätzlich gibt es auch die Möglichkeit automatische(!) Dateisicherungen zu deaktivieren. Damit sind nur noch manuelle Datensicherungen möglich.
    urbackup_serv_set_04

    „Einstellungen“ -> „Allgemein“ -> „Berechtigungen“
    Hier wird angegeben, was ein Client ausführen darf (Rechtklick auf Try-Icon). Im Standard ist alles erlaubt.
    urbackup_serv_set_05 urbackup_serv_set_05a
    So sieht es aus, wenn man alle Funktionen deaktiviert.
    urbackup_serv_set_05b urbackup_serv_set_05c

    „Einstellungen“ -> „Allgemein“ -> „Client“
    Angaben, den Client (Agent) betreffend, wie den Zeitraum der Sicherungen oder der Bandbreitenbeschränkung).
    urbackup_serv_set_06

    „Einstellungen“ -> „Allgemein“ -> „Archivieren“
    (UrBackup-Manual 10.5 „Archiving“)
    Hier kann angegeben wann (und ob) Archiviert werden soll. Archivierte Backups werden nicht über das „Nightly-Cleanup“ gelöscht, außer man entfernt das „archiviert“ wieder vom Backup
    urbackup_serv_set_07

    „Einstellungen“ -> „Allgemein“ -> „Internet“
    (UrBackup-Manual 8.4 „Internetsettings“)
    Angaben für die Sicherungen über das Internet.
    Ich überspringe erstmal dieses Thema, genauso wie den nächsten Reiter:
    urbackup_serv_set_08

    „Einstellungen“ -> „Allgemein“ -> „Erweitert“
    (UrBackup-Manual 8.4 „Advanced settings“)
    urbackup_serv_set_09

    User spezifische Einstellungen:
    Bleibt noch zu erwähnen, dass es neben den Allgemeinen Einstellungen auch User spezifische Einstellungen gibt.
    Dazu wählt man oben im Dropdown „Client“ den gewünschten Client aus
    Und kann jetzt die Option „Separate Einstellungen für diesen Client“ aktivieren. Hier kann man alle Einstellungen vornehmen, jedoch sind diese nur für diesen einen Client gültig.
    urbackup_serv_set_10 urbackup_serv_set_11

    UrBackup: Erstellen eines Backups 5/7

    $
    0
    0

    Ab jetzt führen viele Wege zu einem Backup. Sobald Verzeichnisse deklariert sind, werden diese automatisch gesichert, oder man stößt die Sicherungen manuell an – dabei ist es egal, ob am Client oder am Server.

    Ausführen eines Backups am Client
    Wenn mit der rechten Maustaste auf das TrayIcon geklickt wird, erscheint das Menü.
    urbackup_back_01
    Hier kann man im oberen Bereich auswählen, was gesichert werden soll. Vollständige Dateisicherung steht hierbei für die ausgewählten Verzeichnisse unter „Datensicherungspfade hinzufügen/entfernen“.
    urbackup_back_02

    Ausführen von Backups am Server
    Ebenfalls können die Backups auch am Server ausgeführt werden.
    Dazu öffnet man die Status-Seite und wählt den (oder die) zu sichernden Clients aus, sowie die gewünschte Aktion.
    urbackup_back_03

    Im Fenster „Aktivitäten kann man den Fortschritt der aktuellen Aktion beobachten.
    urbackup_back_04
    Ebenso ist es auf dem Client möglich, seine laufennde Aktion zu beobachten.
    urbackup_back_04a

    Wenn alle Clients eine gültige Dateisicherung und Abbildsicherung haben, wird die auf der Statusseite angezeigt.
    urbackup_back_05
    Und auf der Seite „Protokolle“ kann man den Backupverlauf einsehen (inkl. Warn- und Fehlermeldungen).
    urbackup_back_06
    Oder auch in der „Datensicherungsübersicht“
    urbackup_back_07

    UrBackup: Wiederherstellen von Dateien und Abbildern 6/7

    $
    0
    0

    Wichtig ist, neben dem Backup, auch die Wiederherstellung von Dateien. Dies funktioniert zwar mit UrBackup ohne Probleme, aber das Handling habe ich schon besser gesehen (z.B.: bei BackupPC).
    Allerdings ist die Abbild-Wiederherstellung genial – nicht nur wegen der Recovery-Boot-CD von Urbackup.org

    Dateien wiederherstellen
    In der Datensicherungsübersicht, …
    urbackup_rec_01
    werden durch einen Doppelklick auf den gewünschten Client, die Sicherungen angezeigt.
    urbackup_rec_02
    Nach dem Öffnen der gewünschten Sicherung, hat man die Möglichkeit, einen oder mehrere Ordner auszuwählen und diese als Zip-Datei herunterzuladen.
    urbackup_rec_03
    Alternativ kann man auch ein Datei auswählen und diese direkt öffnen oder abspeichern
    urbackup_rec_04
    Funktioniert, aber ist jetzt in der Bedienung nicht unbedingt überragend.

    Jetzt komme ich aber zum absoluten Argument für UrBackup.
    Das Abbild-Recovery.
    Hierzu kann man sich die „UrBackup Restore CD“ herunterladen und das Iso-Image auf eine CD brennen oder, z.B.: mit „Unetbootin“, einen bootbaren USB-Stick erzeugen.
    Nach dem Start von „UrBackup Restore CD“ …
    urbackup_rec_05
    beginnt UrBackup selbstständig nach Servern im Netz zu suchen.
    urbackup_rec_07 urbackup_rec_06

    Sollte kein Server gefunden werden, so erscheint ein Menü, in dem man z.B.: die Netzwerkeinstellungen anpassen kann
    urbackup_rec_07a

    Wird ein Server gefunden, so wird nach dem Usernamen für den Server gefragt. Wichtig ist hier zu wissen, dass ohne gesetztes Passwort am Server, kein Recovery über die „UrBackup Restore CD“ möglich ist.
    urbackup_rec_10

    Nach der Passworteingabe kann nun der gewünschten Clients ausgewählt werden.
    urbackup_rec_11
    Danach werden alle Abbilder angezeigt, die von diesem Client verfügbar sind.
    urbackup_rec_12
    Ist das Abbild ausgewählt, erhält man eine übersicht, über die Größe…
    urbackup_rec_14
    … und nach einem weiteren “OK” …
    urbackup_rec_15
    … wird die Wiederherstellung ausgeführt.
    urbackup_rec_16
    Nach der Wiederherstellung wird man noch gefragt, ob man den Rechner nun neu starten möchte, oder ob man das Windows auf einer anderen Hardware ausführbar machen möchte.
    urbackup_rec_18 urbackup_rec_17
    Nach der Bestätigung mit „OK“ startet der Rechner neu und das Windows läuft wieder (so Murphy will).

    Damit sind eigentlich alle Funktionen von UrBackup kurz beleuchtet.
    Bleibt noch zu erwähnen, dass das Abbild als VHD oder komprimiertes VHDZ auf dem Server liegt und auch direkt weiter verwendet werden kann.
    urbackup_rec_19
    (siehe auch UrBackup-Manual 9.4 „Mounting (compressed) VHD files on GNU/Linux“, 9.5 „Mounting VHDs as a volume on Windows“, 9.6 „Decompress VHD files“, 9.7 „Assemble multiple volume VHD images into one disk VHD image“)

    UrBackup: Client Installation (Linux) 7/7

    $
    0
    0

    Unter Linux gibt es für den UrBackup-Client, neben der Source, auch Pakete für RedHat/CentOS, ScientificLinux, Fedora und Arch-Linux (als AUR-Paket). Als Debian-User musste ich hier die Source downloaden und selber zusammenbacken – aber es gibt eine gute Anleitung.

    Installation aus den Source-Files unter Debian
    Zuerst müssen ein paar Pakete nachinstalliert werden

    apt-get install build-essential "g++" libwxgtk3.0-dev "libcrypto++-dev"

    und downloaden und den Client

    wget https://hndl.urbackup.org/Client/1.4.11/urbackup-client-1.4.11.tar.gz

    entpacken das Ganze

    tar xzf urbackup-client-1.4.11.tar.gz

    und backen uns das zusammen

    cd urbackup-client-1.4.11
    ./configure
    make
    sudo make install

    Danach kann man den Client auch schon starten

    sudo start_urbackup_client --loglevel info --no_daemon

    und, wenn gewünscht, auch die GUI

    urbackup_client_gui

    Zum Test verbinde ich mich mal mit dem lokal laufenden UrBackup-Server auf einem Debian-System mit XFCE4.
    Wie man sieht ist in der Taskleiste der Client, welcher über den Rechtsklick ein etwas beschnittenes Menü anzeigt.
    urbackup_serv_lc_01 urbackup_serv_lc_02
    Auffällig ist – neben der englischen Sprache-, dass die Abbild-Funktion fehlt.
    Das liegt daran, dass man ein snapshot-fähiges Dateisystem (LVM, btrfs) benötigt, welches ich jetzt nicht habe.
    Ansonsten funktioniert der Client wie gewohnt.
    Es lassen die Dateipfade hinzufügen und ein Backup auslösen.
    urbackup_serv_lc_03 urbackup_serv_lc_04
    urbackup_serv_lc_05 urbackup_serv_lc_06 urbackup_serv_lc_07

    Somit lässt sich UrBackup auch von “einfachen” Usern auf Linux-Systemen einsetzen; zumindest zur Dateisicherung.

    Bleibt das Fazit:

    UrBackup: Mein Fazit

    $
    0
    0

    UrBackup ist für mich ein wenig der Wolf im Schafspelz.
    Wenn man die Oberfläche sieht, dann ist man schnell dazu verleitet, die Software als typische Freeware mit Grundfunktionen abzustempeln.
    Aber unter der Oberfläche schlummert ein mächtiges Werkzeug.

    Freie Betriebssystemwahl für den UrBackup-Server
    Positiv finde ich, dass man den UrBackup-Server auf Windows und Linux installieren kann, so kann man sein bevorzugtes Betriebssystem verwenden.
    Ein besonderes Merkmal von UrBackup ist die Möglichkeit, dass man von Windowsrechnern „out oft he Box“ ein Image seiner Installation erstellen kann. Die Wahl, dieses Image in einer virtuellen Festplatte VHD (oder auch noch komprimierts VHD) abzuspeichern ist großartig.
    Nutzt man Windows als Unterbau für seinen UrBackup-Server, kann man die VHD-Dateien auch gleich einbinden und sie als virtuelle Festplatte zur Datensuche nutzen.
    Kostenlose Tools wie VHD2HDD geben die Möglichkeit, ein Image direkt wieder auf eine Festplatte aufzuspielen.

    Recovery-Boot-CD
    Aber nicht, dass dies nötig wäre, denn UrBackup liefert auch eine Restore-CD mit, welche sich direkt mit dem Server verbinden kann und einen Rechner über das Netzwerk wiederherstellen kann. Als Tüpferl auf dem „i“ hat man auch noch die Möglichkeit das Image auf einer anderen Hardware aufzuspielen und Windows für den Start darauf vorzubereiten.

    Datensicherung
    Die Dateisicherung ist zuverlässig und funktionierte sauber. Lediglich das Wiederherstellen von Dateien hat mich nicht überzeugt. Ich finde es unpraktisch, dass Dateien oder Ordner heruntergeladen und entpackt werden müssen, damit man wieder an deine Daten kommt
    Hier bin ich aber möglicherweise durch die Benutzung von BackpPC etwas verwöhnt. Dieser bietet nicht nur eine Wiederherstellung der Dateien auf dem ursprünglichen Platz an, sondern man kann auch einen alternativen Pfad angeben – oder eben auch als Zip-Datei herunterladen.
    Stellt sich mir die Frage, was passiert, wenn ich einen 50GB großen Ordner wieder herstellen möchte. Hier bin ich auch bei BackupPC mit dem „Timeout-Problem“ des Browsers konfrontiert – allerdings könnte ich dort die Wiederherstellung auch auf der Konsole starten (ohne „Timeout“-Problem).
    Ebenso vermisse ich eine Historienanzeige, in der ich sehe, in welchen Backup sich eine Datei geändert hat. Wenn man nicht genau weiß, wann eine Datei geändert wurde, muss man sich bei UrBackup ein bisschen durch die Backups wuseln.
    Egal, UrBackup ist mächtig, und macht was es soll – es sichert die heiligen Daten des Users und bietet mit der Abbilderstellung und –recovery ein mächtiges Werkzeug.

    Backup über das Internet
    Dass man UrBackup auch über das Internet mit seinem Server kommunizieren lässt um Backups auch von unterwegs ausführen zu können (bei minimaler Datenübertragung durch Indexierung der Datenstände vor dem Sichern) und das –auf Wunsch- auch noch verschlüsselt – Genial.

    Wer sich mal die Einstellungen im Reiter „Erweitert“ angesehen hat, wird bemerken, dass die Übertragung über das Internet von „roh“ und „gehasht“ auch auf „Blockunterschiede gehasht“ umgestellt werden kann – Respekt.
    Und wir reden hier immer noch von Freeware(!!).

    Ein verdienter oberer Platz in meiner persönlichen Freeware-Bestenliste.


    UrBackup: Sicherung über das Internet

    $
    0
    0

    In den vorherigen Beiträgen zum UrBackup hatte ich die Möglichkeit des Backups über das Internet schon angesprochen. Zeit das Ganze auch mal auszuprobieren. In Folgendem gehe ich davon aus, dass der zu sichernde Client noch keine Verbindung zum UrBackup-Server hat.

    1. Ausgangssituation
    Ich habe einen UrBackup-Server, welcher über das Internet erreichbar ist.
    Dies kann man z.B.: mit einem DynDNS-Dienst realisieren.
    Mein Server ist unter der Webadresse „backup.rob.dyn“ erreichbar und (für diesen Beitrag) jungfräulich.

    2. Vorbereitung Backupserver
    Zuerst melde ich mich am UrBackup-Server an und wechsle in „Einstellungen“ und hier in das Untermenü „Internet“
    Hier aktiviere ich die Funktion „Internetmodus aktivieren“. Danach ist ein Serverstart notwendig. Es reicht, wenn man den Dienst neu startet, aber man kann auch den ganzen Rechner/Server neu starten.
    Ebenso muss hier die (über das Internet erreichbare) Adresse des Servers, sowie den Port angeben. Des Weiteren kann man hier noch weitere Parameter vorgeben, wie die Art des möglichen Backups, Nutzung von Verschlüsselung oder eine Bandbreiten Beschränkung.
    In Meinem Beispiel lasse ich die „Abbildsicherung“ deaktiviert.
    UrBack-inet-02

    3. Sicherung serverseitig einrichten
    Jetzt muss noch der Client am Server bekannt gemacht werden.
    Dazu auf der Seite „Status“ bis zu dem Bereich „Internet-Clients“ scrollen. Hier den Rechnernamen des Clients eingeben und auf „Hinzufügen“ klicken.
    UrBack-inet-03
    Interessant ist jetzt ein Parameter, den man im Menü „Einstellungen“ sehen kann, wenn den eben gewählten Client auswählt und auf den Reiter „Internet“ klickt.
    Hier gibt es den Parameter „Internet-Authentifizierungsschlüssel“, der jetzt einen eindeutigen Schlüssel für den Client enthält.
    UrBack-inet-04

    4. Client vorbereiten.
    Die einfachste Art, den Client für das Backup zu aktivieren ist, wenn man sich über einen Browser auf den UrBackup-Server einloggt und hier die Client-Software (den Agent) herunterlädt.
    Zu finden ist der Download auf der „Status“-Seite unterhalb der Clientauflistung
    UrBack-inet-05 UrBack-inet-06

    Der Vorteil dieser Methode liegt darin, dass der Client bereits alle nötigen Parameter voreingestellt hat. Man kann aber auch einen bereits bestehenden Client für die Sicherung über das Internet aktivieren.
    Wichtig sind hier die Angaben der Adresse, den Port und das Client-Passwort (das für jeden Client neu und zufällig generiert wird).
    UrBack-inet-07

    5. Sicherung clientseitig ausführen
    Die Anmeldung über das Internet kann etwas dauern (je nach Verbindungsgeschwindigkeit).
    Jetzt kann, wie gewohnt, von Client oder vom Server aus eine Datensicherung angestoßen werden. Sollten von Server aus noch keine Sicherungspfade angegeben worden sein (global oder Clientspezifisch), muss man dies am Client noch nachholen.
    In meinem Beispiel habe ich nur das Bilder-Verzeichnis des Users eingebunden.
    Stoßen wir eine Sicherung an:
    UrBack-inet-08 UrBack-inet-09 UrBack-inet-10

    Nach 16 Minuten wurden also 5,5 MB gesichert. Ist jetzt nicht die Wucht, liegt aber nicht nur daran, dass die Internetverbindung so langsam ist, sondern auch an der Indexierung der Dateien, welche auch eine gewisse Zeit benötigt.
    UrBack-inet-11

    Würde man jetzt ein inkrementelles Backup durchführen, wäre dieses wesentlich schneller, da die Indexierung vor der Datenübertragung prüft, ob überhaupt Dateien neu erzeugt/geändert wurden, oder nicht.
    in meinem Fall dauerte ein, in Anschluß sofort erneut durchgeführtes, inkrementelles Backup nur 1 Minute.

    Jetzt kopiere ich alle Beispielbilder aus dem Ordner, füge sie als Kopie in den gleichen Ordner wieder ein …
    UrBack-inet-12 UrBack-inet-14
    …und führe ein neues Inkrementelles Backup aus.

    Wie man sieht, dauert zwar das Backup selber wieder etwas länger (durch die Indexierung), aber es wurden 0Bytes übertragen.
    UrBack-inet-15
    Dies beweist, was im Handbuch von UrBackup steht: (frei wiedergegeben) Doppelte Dateien werden nicht kopiert, sondern als bereist gesichert erkannt und dann verlinkt.
    UrBackup erkannte, dass er diese Bilder schon einmal hat, und hat diese dann nur noch mit dem neuen Namen verknüpft, ohne die Bilder nochmal übertragen zu haben. Angeblich funktioniert das auch Verzeichnisübergreifend (daher auch die Indexierung am Anfang eines Backups)

    Ich muss hier einfach nochmal erwähnen: es handelt sich um FREEWARE.
    Ich find´s genial.

    Druckserver 1/7: Netzwerkdrucker mit Powershell auflisten (+Ausgabe in Excelliste)

    $
    0
    0

    Wir haben in unserer Firma 3 Windows-Printserver. Wie in den meisten IT-Landschaften sind die Strukturen mit der Zeit gewachsen und somit lassen auch die Bezeichnungen der Drucker keine Rückschlüsse auf den verwendeten Printserver zu. Da heißt es Suchen – z.B.: mit Powershell.

    In diesem Beitrag geht es nur um den Powershell-Befehl selber, mit dem man die installierten Drucker auslesen kann. Dass daraus dann noch ein kleiner Skripting-Spaß wurde, lest Ihr in den folgenden Beiträgen:
    Zum „Endprodukt“ gehören dann noch diese Beiträge

  • Auslesen automatisieren (cmd)
  • Auslesen automatisieren (powershell)
  • Ausgabe über Webserver (Xampp)
  • Ausgabe mit Suche und Anzahl Drucker pro Server erweitern
  • Für Puristen: Ausgabe in HTML ohne Webserver
  • Puristen-Ausgabe mit Suche und Anzahl Drucker pro Server erweitern
  • Der Powershell-Befehl zum Auslesen der installierten Drucker lautet

    Get-WmiObject -class Win32_Printer

    Und erzeugt die Ausgabe:

    Location      : 122 - Werk 1
    Name          : HP533-Raum2
    PrinterState  : 0
    PrinterStatus : 3
    ShareName     : HP533-Raum2
    SystemName    : Printserver01

    Was mir hier fehlt ist der Drucker Port – also die IP-Adresse des Netzwerkdruckers.
    Für mich sind zur Suche folgende Angaben wichtig:

  • Name des Druckers
  • die IP-Adresse (Port)
  • der Freigabename
  • der Aufstellungsort
  • Name des Printservers
  • Das ergibt dann folgenden Befehl

    Get-WmiObject -class Win32_Printer | select Name, PortName, Sharename, Location, Systemname

    Mit der Ausgabe

    name       : HP533-Raum2
    portname   : 172.0.35.23
    sharename  : HP533-Raum2
    location   : Gebaeude2
    systemname : Printserver01

    Suche ich nun z.B.: nach einer IP-Adresse, kann ich die Ausgabe wie folgt filtern.

    Get-WmiObject -class Win32_Printer | select Name, PortName, Sharename, Location, Systemname | where portname –contains xxx.xxx.xxx.xxx

    Analog kann die Suche natürlich auch auf die anderen Werte ausgeführt werden.

    Mit dem Parameter „-Computer“ kann man nun andere Printserver im (Domänen-)Netzwerk angeben und man muss sich nicht auf jeden einzelnen Druckserver anmelden.
    Der Befehl wäre

    Get-WmiObject -class Win32_Printer | -Computer Printserver02.firma.lan | select Name, PortName, Sharename, Location, Systemname

    Im kokreten Fall war die Idee, das Ganze in eine Excelliste zusammenzuführen und diese auf einer Freigabe als “Nachschlagewerk” zu nutzen.
    (Gleich vorweg – eine blöde Idee. Aber dazu später.)

    So habe ich von jedem Printserver eine CSV–Datei der Abfrage generiert.
    Als Beispiel „Printserver02“

    Get-WmiObject -class Win32_Printer | -Computer Printserver02.firma.lan | select Name, PortName, Sharename, Location, Systemname | Export-Csv -NoTypeInformation C:\Users\testuser\Desktop\PS02.csv

    So hatte ich danach 3 CSV-Dateien (PS01.csv, PS02.csv, PS03.csv) welche ich in einer Excelliste zusammengeführt habe.
    Dann noch den Filter aktiviert und man kann einfach und schnell nach Druckern suchen.
    Schön ….
    aber ….

    Das Hauptproblem war nun die Aktualität der Daten (Drucker ändern sich nun mal).
    So musste dann der Datenbestand manuell nachgepfelgt, oder eben wieder neu ausgelesen, werden.
    Irgendwie war es noch zu händisch. Es sollte einfacher …. automatischer funktionieren.

    Weiter gehts im Teil 2

    Druckserver 2/7: Netzwerkdrucker automatisiert abfragen (cmd)

    $
    0
    0

    Um das Auslesen der Drucker auf den Druckservers zu automatisieren, war der erste Gedanke eine Batch-Datei zu schreiben – ich komm halt aus der Dos-Zeit. Mein erstes Probelem war der Aufruf eines Powershell-Befehls aus einer „CMD“. Eigentlich blöd, aber es dauerte etwas, bis mir das auffiel….

    Mein erstes Problem war das Aufrufen eines Powershell-Befehls aus einer CMD-Datei.
    Es war dann aber doch einfacher als gedacht.

    powershell -command "& {&'Get-WmiObject' -class Win32_Printer -Computer Printserver01.firma.lan | select Name, PortName, Sharename, Location, Systemname | Export-Csv C:\Printserver01.csv }"

    Bzw für alle 3 Druckserver der Aufruf als Schleife:

    For %%a in (Printserver01 Printserver02 Printserver03) do (
    powershell -command "& {&'Get-WmiObject' -class Win32_Printer -Computer %%a.firma.lan | select Name, PortName, Sharename, Location, Systemname | Export-Csv C:\___skript\%%a.csv }"
    )

    So mit hatte ich schonmal 3 CSV-Dateien. Jetzt sollte daraus nur noch eine Datei werden.
    Da die CSV-Dateien 2 Kopfzeilen haben (1. Zeile Typenbezeichnung und dann die Spaltenbeschriftung), kann ich diese nicht einfach aneinanderfügen.
    Der Befehl Export-CSV kann zwar die Typenangaben unterdrücken (Export-CSV -NoTypeInformation) , aber die Spaltenbeschriftungen würden beibehalten. Also verzichte ich darauf und schneide beide Kopfzeilen selber ab.

    set /a i=0
    set datei=C:\___skript\Printserver01.csv
    for /f "tokens=1,* delims=" %%a in (%datei%) do call :zeile %%a
    goto :ende
    
    :zeile
    set /a i+= 1
    if %i% gtr 2 echo %* >> C:\___skript\komplett_temp.csv
    goto :eof
    
    :ende
    exit 0

    Das Ganze natürlich für alle 3 CSV-Dateien.

    Da diese Datei nun aber auch den Microsoft XPS-Drucker, sowie den Freepdf- und einen Fineprint-Drucker installiert haben , und diese nicht in der Liste auftauchen sollten, muss die Gesamt-CSV-Datei noch „bereinigt“ werden.

    findstr /v "XPS FreePDF FinePrint" C:\___skript\komplett_temp.csv > C:\___skript\komplett.csv

    Im Grund wars das. Das komplette Skript sieht dann so aus

    @echo off
    setlocal
    
    rem #################################################################
    rem   Prüfen, ob Datei komplett.csv schon exitiert
    rem #################################################################
    
    if exist C:\___skript\komplett.csv (
        echo Bereinige alte Files
        del C:\___skript\komplett.csv
    )
       Printserver02.firma.lan
    rem #################################################################
    rem   Auslesen der existierenden Drucker von jedem Printserver
    rem   via Powershell-Abfrage
    rem #################################################################
    
    For %%a in (Printserver01 Printserver02 Printserver03) do (
    powershell -command "& {&'Get-WmiObject' -class Win32_Printer -Computer %%a.firma.lan | select Name, PortName, Sharename, Location, Systemname | Export-Csv C:\___skript\%%a.csv }"
    )
    
    rem #################################################################
    rem   Die einzelnen CSV-Dateien zusammen führen und dabei die
    rem   ersten beiden Kopfzeilen entfernen
    rem #################################################################
    echo kombiniere Daten in komplett.csv
    setlocal
    set /a i=0
    set datei=C:\___skript\Printserver01.csv
    for /f "tokens=1,* delims=" %%a in (%datei%) do call :zeile %%a
    
    set /a i=0
    set datei=C:\___skript\Printserver02.csv
    for /f "tokens=1,* delims=" %%a in (%datei%) do call :zeile %%a
    
    set /a i=0
    set datei=C:\___skript\Printserver03.csv
    for /f "tokens=1,* delims=" %%a in (%datei%) do call :zeile %%a
    goto :ende
    
    rem #################################################################
    rem   Routine zum abtrennen der ersten beiden Zeilen
    rem #################################################################
    
    :zeile
    set /a i+= 1
    if %i% gtr 2 echo %* >> C:\___skript\komplett_temp.csv
    goto :eof
    
    rem #################################################################
    rem   Beginn abschließender Befehle
    rem #################################################################
    :ende
    echo bereinige CSV-Datei
    findstr /v "XPS FreePDF FinePrint" C:\___skript\komplett_temp.csv > C:\___skript\komplett.csv
    
    echo loesche nicht mehr benoetigte Files
    del C:\___skript\Printserver01.csv
    del C:\___skript\Printserver02.csv
    del C:\___skript\Printserver03.csv
    del C:\___skript\komplett_temp.csv
    
    endlocal
    
    exit 0

    Das Skript funktioniert und wird nun Werktags stündlich zwischen 7:00 bis 17:00 Uhr aufgerufen.
    Läuft!
    OK OK.
    Das Zusammenfügen der einzelnen Dateien hätte ich auch in die Schleife integrieren können, aber da kam mir der Feierabend dazwischen …

    … und ein Geistesblitz:
    Warum verarbeite ich einen Powershellbefehl in einer Batch-Datei und nicht gleich in Powershell.

    Gut – liegt vermutlich darin, dass ich mich mit Powershell nicht so wirklich befasst habe und somit ein leichtes Wissensdefizit habe.

    Ein Grund, aber kein Hinderniss.
    Weiter gehts im Teil 3

    Druckserver 3/7: Netzwerkdrucker automatisiert abfragen (powershell)

    $
    0
    0

    Nachdem das Batch-Skript eigentlich läuft und ich dann gleich noch den Geistesblitz hatte, die Abfrage in Powershell umzusetzen, ging es wieder von Vorne los – die Abfrage der Drucker.

    Zuerst wieder die Abfrage der Drucker, und das ganze ebenfalls in einer Schleife.

    $Servername = @("Printserver01","Printserver02","Printserver03")
    For ($i=0; $i -lt $Servername.Length; $i++) {
        $Server=$Servername[$i]
        $File=$Servername[$i]+".csv"
        Get-WmiObject -class Win32_Printer -Computer "$Server.firma.lan" | select Name, PortName, Sharename, Location, Systemname  |Export-Csv C:\___skript\"$File"
    }

    Ebenso bleibt die Aufgabe, die ersten beiden Zeilen abzuschneiden.
    Also erweitere ich die Schleife um folgende Zeile

    (Get-content $File | Select-Object -Skip 2) | Set-Content $File

    Bleibt so nur noch die Bereinigung der Datei von dem Microsoft XPS-Drucker, sowie den FreePdf- und Fineprint-Drucker.
    Da dies der letzte Schritt ist, kann man das Ergebnis gleich in endgültige (Gesamt-)Datei schreiben und die Druckserver-Datei löschen.
    Die Schleife wird um 2 Zeilen erweitert:

    Get-content $File | Select-String -pattern "\s.*XPS\s.*|\s.*PDF\s.*|FinePrint" -notmatch |add-content C:\___skript\komplett.csv
        Remove-item $File

    Und das wars auch schon.
    Das komplette Powershell-Skript, inkl. Bereinigung der Dateien, sieht demnach so aus:

    Get-ChildItem -path c:\___skript  -Filter *.csv | Remove-Item #-Whatif
    
    $Servername = @("Printserver01","Printserver02","Printserver03")
    
    For ($i=0; $i -lt $Servername.Length; $i++) {
        $Server=$Servername[$i]
        $File=$Servername[$i]+".csv"
        Get-WmiObject -class Win32_Printer -Computer "$Server.firma.lan" | select Name, PortName, Sharename, Location, Systemname  |Export-Csv C:\___skript\"$File"
        (Get-content $File | Select-Object -Skip 2) | Set-Content $File
        Get-content $File | Select-String -pattern "\s.*XPS\s.*|\s.*PDF\s.*|FinePrint" -notmatch |add-content C:\___skript\komplett.csv
        Remove-item $File
        }

    Wer jetzt noch das erste Skript (CMD) im Kopf hat, der wird hier einen krassen Unterschied in der Länge des Skriptes feststellen.

    Ein kleiner weiterer Stolperstein war dann das Erzeugen eines geplanten Tasks.
    Hier kann nämlich nicht einfach das Powershell-Skript aufgerufen werden, sondern es wird Powershell selber mit einem Parameter aufgerufen – dem auszuführenden Skript.
    geplanter_task_powershell

    Läuft!

    Nächste Aufgabe: Anzeigen der Liste im Browser.
    Auch hier habe ich zuerst einen Webserver verwendet, bis ich festellen musste: es geht noch simpler- aber dazu später mehr.
    Nächster Schritt: Anzeigen einer CSV-Datei im Browser.

    Druckserver 4/7: Liste von Netzwerkdruckern im Browser anzeigen (Xampp)

    $
    0
    0

    Da ich inzwischen automatisiert eine CSV-Datei aller Netzwerkdrucker erzeuge, bleibt noch die Anzeige dieser Liste. Der erste Schritt dies in Excel zu realisieren liegt zwar nahe, ist aber eher … suboptimal.
    Da ich eh einen Apache-Server am laufen habe, soll dieser genutzt werden. In diesem Beitrag gehe ich aber von einem lokalen XAMPP aus.

    Warum XAMPP?
    Weil ich mich mit IIS nicht auskenne und der XAMPP auch als Portable-Version ausgeführt werden kann. Reicht auch für eine kleine Intranetseite.
    Dass es aber noch einfacher geht, erkannte ich erst später. Dazu aber mehr in diesem Beitrag.
    Wie man die Liste auf einem dedizierten Webserver zu Verfügung stellen kann, zeige ich hier.

    Aber zurück zum eigentlichen Problem: Das Anzeigen einer CSV-Datei als HTML-Tabelle.
    Dazu erzeuge ich die Datei „index.php“ im Webserver-/Xampp-Verzeichnis und nutze ein PHP-Skript:

    <table border=1 cellspacing=0 cellpadding=3>
       <tr><th>Druckername</th><th>Druckerport</th><th>Freigabename</th><th>Ort</th><th>Servername</th></tr>
       <?php
          $filename = 'C:\___skript\komplett.csv';
          $f = fopen($filename, "r");
          while (($line = fgetcsv($f)) !== false)
             {
                echo "<tr>";
                foreach ($line as $cell)
                   {
                      echo "<td>" . htmlspecialchars($cell) . "</td>";
                   }
                echo "</tr>\n";
             }
          fclose($f);
       ?>
    </table>

    Das wars auch schon.
    Möchte man jetzt noch anzeigen, welchen Stand die Liste hat, kann man noch den Zeitstempel der Datei auslesen und ausgeben.
    Um Fehler zu vermeiden, mach ich das mit einer Prüfung ob die Datei auch wirklich existiert.

    <?php
    if (file_exists($filename)) {
        echo "Liste wurde zuletzt aktualisiert am " . date ("d.m.Y ", filemtime($filename)) . " um " . date ("H:i.", filemtime($filename));
      //  echo "<br><br>";
    }
    ?>

    Mit einer kleinen Überschrift könnte das fertige PHP-Skript so aussehen:

    <html>
    <body>
    <h1>Drucker&uuml;bersicht</h1>
    
    <?php
    $filename = 'C:\___skript\komplett.csv';
    if (file_exists($filename)) {
        echo "Liste wurde zuletzt aktualisiert am " . date ("d.m.Y ", filemtime($filename)) . " um " . date ("H:i.", filemtime($filename));
      //  echo "<br><br>";
    }
    ?>
    <!--
    ########################################
      Erzeugen der HTML-Tabelle aus
      CSV-Datei
    ########################################
     -->
    
    <table border=1 cellspacing=0 cellpadding=3>
       <tr><th>Druckername</th><th>Druckerport</th><th>Freigabename</th><th>Ort</th><th>Servername</th></tr>
       <?php
    
          $f = fopen($filename, "r");
          while (($line = fgetcsv($f)) !== false)
             {
                echo "<tr>";
                foreach ($line as $cell)
                   {
                      echo "<td>" . htmlspecialchars($cell) . "</td>";
                   }
                echo "</tr>\n";
             }
          fclose($f);
       ?>
    </table>
    </body>
    </html>

    Schon mal ein Anfang.
    Die Drucker werden aufgelistet und man kann über die Browser-Suche die Liste durchsuchen.
    Eigentlich das, was ich wollte: Einfach, Übersichtlich, Hilfreich.

    Aber ein bisschen mehr darfs dann doch sein – z.B.: eine Suchfunktion.

    Pimp meine Liste – im Teil 5

    Druckserver 5/7: Liste von Netzwerkdruckern mit Suche und Anzahl pro Server erweitern

    $
    0
    0

    Die Liste wird nun im Browser angezeigt und ich kann über die Suchfunktion des Browsers auch nach Druckern suchen.
    Funktionell, aber unschön. Suchfelder wären schöner.
    Im Netz bin dann auf ein Javaskript gestoßen, welches HTML-Tabellen durchsuchbar macht.
    Aussderdem wurde die Ausgabe noch um die Anzahl der Drucker pro Server erweitert und die IP-Adressen in Links umgewandelt.

    Das Skript kann man hier herunter laden und legt es einfach im Ordner der Intranetseite am Webserver ab.
    Man muss das Javaskrpit natürlich noch einbinden.

    <script language="javascript" type="text/javascript" src="tablefilter.js" >
    </script>

    Den eigentlichen Aufruf setzt man dann an des Ende der HTML-Tabelle.
    Allerdings muss man die HTML-Tabelle noch mit dem Parameter „id“ erweitern (oder „labeln“ – wenn man es so nennen möchte).
    Ersetzen der Zeile „<table>“ durch

    <table id=table1 border=1 cellspacing=0 cellpadding=3>

    und nach „</table>“ kommt der Aufruf des Java-Skriptes

    <script language="javascript" type="text/javascript" >
            setFilterGrid("table1");
    </script>

    Und schon hat man über der HTML-Tabelle Suchfelder.

    Es gibt noch weitere Parameter, wie das Definieren der durchsuchbaren Spalten, oder der Erzeugung von Drop-Down-Feldern, anstatt von Suchfeldern.
    Die komplette Parameter und Beispiele findet Ihr hier

    Weiter geht’s:
    Eine große Hilfe ware es, wenn man die IP-Adressen der Drucker anklicken könnte und man so auf das Webinterface des Druckers kommt.
    Ich ändere die Abfrage wie folgt ab:

    while (($line = fgetcsv($f)) !== false) {
            echo "<tr>";
            foreach ($line as $cell) {
            $ip = explode('.',$cell);
            if (
              $ip[0]<=255 && $ip[1]<=255 && $ip[2]<=255 && $ip[3]<=255 && preg_match("!^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$!",$cell)) {
                  echo "<td> <a href=http://$cell target=_blank >" . htmlspecialchars($cell) . "</a></td>";
            } else {
                  echo "<td>" . htmlspecialchars($cell) . "</td>";
            }
    
            }
            echo "</tr>\n";
    }

    Das wars.

    Ein weiteres Hilfsmittel, wäre die Angabe der Drucker pro Server, um evtl. entscheiden zu können, wo neue Drucker installiert werden sollten.
    Dies löse ich ebenfalls durch ein PHP-Skript, das ich allerdings so im Netz gefunden habe (leider weiß ich das Forum nicht mehr).
    Das Skript durchsucht die CSV-Datei und legt ein 3 dimensionales Array mit jedem Suchtreffer pro Spalte an. Wird ein Begriff eingelesen, der noch nicht exisiert, wird er im Array angelegt und erhält die Anzahl 1. Existiert der Eintrag schon, wird die Trefferzahl um 1 erhöht.

    Somit könnte das komplette Skript – mit allen Funktionen – wie folgt aussehen:

    <html>
    <head>
    <script language="javascript" type="text/javascript" src="tablefilter.js" >
    </script>
    
    </head>
    <body>
    <h1>Drucker&uuml;bersicht</h1>
    <!--
    ########################################
      Auflisten der Anzahl der Drucker
      pro Server
    ########################################
     -->
    <?php
    $filename = 'C:\___skript\komplett.csv';
    $datei = file($filename);
    foreach ($datei as $zeile) {
      $entry = explode(",", $zeile);
      foreach ($entry as $key => $actual_value) {
        if (isset($value_array[$key][$actual_value])) {
          $value_array[$key][$actual_value]++;
        } else {
          $value_array[$key][$actual_value] = 1;
        }
        if (isset($value_array_complete[$actual_value])) {
          $value_array_complete[$actual_value]++;
        } else {
          $value_array_complete[$actual_value] = 1;
        }
      }
    }
    
    echo "Anzahl Drucker pro Server.<br>";
    echo "| ";
    $column = 4;
    foreach ($value_array[$column] as $key => $value) {
      echo str_replace('"', '', $key)." = ".$value." | ";
    }
    echo "<br><br>";
    ?>
    <!--
    ########################################
      Auslesen des Zeitstempels der
      CSV-Datei
    ########################################
     -->
    <?php
    if (file_exists($filename)) {
        echo "Liste wurde zuletzt aktualisiert am " . date ("d.m.Y ", filemtime($filename)) . " um " . date ("H:i.", filemtime($filename));
      //  echo "<br><br>";
    }
    ?>
    <!--
    ########################################
      Erzeugen der HTML-Tabelle aus
      CSV-Datei
    ########################################
     -->
    
    <table id=table1 border=1 cellspacing=0 cellpadding=3>
       <tr><th>Druckername</th><th>Druckerport</th><th>Freigabename</th><th>Ort</th><th>Servername</th></tr>
       <?php
    
          $f = fopen($filename, "r");
          while (($line = fgetcsv($f)) !== false) {
            echo "<tr>";
            foreach ($line as $cell) {
               $ip = explode('.',$cell);
               if (
              $ip[0]<=255 && $ip[1]<=255 && $ip[2]<=255 && $ip[3]<=255 && preg_match("!^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$!",$cell)) {
                  echo "<td> <a href=http://$cell target=_blank >" . htmlspecialchars($cell) . "</a></td>";
                  } else {
                  echo "<td>" . htmlspecialchars($cell) . "</td>";
                  }
              }
              echo "</tr>\n";
           }
          fclose($f);
       ?>
    </table>
    <script language="javascript" type="text/javascript" >
            setFilterGrid("table1");
    </script>
    </body>
    </html>

    Passt, wackel, hat Luft.
    Ist jetzt nicht die schönste Intranetseite, aber sie ist funktioniell und bietet alle „wichtigen“ Informationen und eine Suchfunktion.

    Möchte man die Intranetseite demnach lokal auf einem Druckserver publizieren, so kann man natürlich auch den windowseigenen Webserver verwenden, den IIS, oder wie in diesem Beispiel den Xampp.
    Es gibt aber noch eine weitere Lösung: erzeugen einer html-Datei mit Powershell und diese z.B.: auf einer „ReadOnly“-Freigabe bereitstellen.
    Wie das geht, lest Ihr im nächsten Beitrag.

    Druckserver 6/7: Liste von Netzwerkdruckern als HTML-Datei aus Powershell erzeugen (für Puristen)

    $
    0
    0

    Bei meinen ersten Gehversuchen in Powershell bin ich auf den Befehl „ConvertTo-Html“ gestoßen. Daraus reifte die Idee, die Druckerübersicht gleich in eine HTML-Datei zu exportieren.
    Der Vorteil: man kann diese Datei z.B.: in einer Read-Only-Freigabe bereitstellen, ohne dass weitere Dienste -wie z.B.: ein Webserver- installiert/aktiviert werden muss. Sozusagen eine Lösung für Puristen 😉

    Der Vorteil, keinen Webserver zu benötigen, liegt darin, dass keine weiteren angreifbaren Dienste gestartet werden.
    Hat seinen Charme.

    Grundsätzlich ist der Befehl einfach anzuwenden; anstelle von „ExportTo-CSV“ verwendet man „ConvertTo-Html“.
    Was erstmal so einfach klingt, ergibt dann jedoch ein weiteres Problem: ich habe ja 3 Server abzurufen.
    Der Befehl „ConvertTo-Hmtl“ erzeugt eine komplette Webseite mit Head-, Body- und Table-Bereichen.
    Selbst wenn man den Parameter „-Fragment“ verwendet, wird immer noch eine HTML-Tabelle mit <table> und </table> erzeugt.
    Aus diesem Grund bleibe ich bei meiner vorherigen Routine mit der „komplett.csv“ und wandle diese in ein HTML um.

    Die bisherige Routine:

    Get-ChildItem -path c:\___skript  -Filter *.csv | Remove-Item #-Whatif
    
    $Servername = @("Printserver01","Printserver02","Printserver03")
    
    For ($i=0; $i -lt $Servername.Length; $i++) {
        $Server=$Servername[$i]
        $File=$Servername[$i]+".csv"
        Get-WmiObject -class Win32_Printer -Computer "$Server.firma.lan" | select Name, PortName, Sharename, Location, Systemname  |Export-Csv C:\___skript\"$File"
        (Get-content $File | Select-Object -Skip 2) | Set-Content $File
        Get-content $File | Select-String -pattern "\s.*XPS\s.*|\s.*PDF\s.*|FinePrint" -notmatch |add-content C:\___skript\komplett.csv
        Remove-item $File
        }

    Jetzt gilt es die CSV-Datei in eine HTML zu verwandeln.

    Dazu rufe ich die erzeugte CSV auf, aber es gibt einen kleinen Haken: ich habe alle Kopfzeilen abgeschnitten.
    Somit weiß der ConvertTo-Befehl nicht, was er zu machen hat. Ich muss also die Kopfzeilen manuell übergeben.

    Get-Content C:\___skript\komplett.csv |ConvertFrom-Csv -header "Druckername","Druckerport","Freigabename","Ort","Servername" |ConvertTo-Html | Out-File C:\___skript\html\komplett.html

    Das war´s auch schon.
    Jetzt habe ich eine HTML-Datei – nicht schön, aber sie funktioniert.

    Jetzt gebe ich dem Ganzen noch etwas mehr Form: Einen Rahmen und Hintergrundfarbe der Überschriftspalten.
    Um den Befehl übersichtlich zu halten, schreibe ich die Parameter in eine Variable für den Head-Content „$heac“

    $heac = "`r`n"
        $heac = $heac + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}`r`n"
        $heac = $heac + "TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:lightgrey}`r`n"
        $heac = $heac + "TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black; padding: 3px;}`r`n"
        $heac = $heac + "`r`n"

    und erweitere den Befehl „ConvertTo-Html“ mit dem Parameter „-head $heac“

    Get-Content C:\___skript\komplett.csv |ConvertFrom-Csv -header "Druckername","Druckerport","Freigabename","Ort","Servername" |ConvertTo-Html -head $heac | Out-File C:\___skript\html\komplett.html

    Sieht schon schöner aus.

    Kann man aber immer noch pimpen: z.B: mit einer Überschirft.
    Diese kommt in den „Body“ und kann mit dem gleichnamigen Parameter gesetzt werden:

    Get-Content C:\___skript\komplett.csv |ConvertFrom-Csv -header "Druckername","Druckerport","Freigabename","Ort","Servername" |ConvertTo-Html -head $heac -body "

    Druckerübersicht

    " | Out-File C:\___skript\html\komplett.html

    Diese Datei kann nun, wie oben erwähnt, über eine Freigabe (z.B.: Read-Only) zur Verfügung gestellt werden oder auch auf den lokalen Rechner kopiert und genutzt werden – ohne Netzwerkverbindung.
    Also „Offline“.

    Aber irgendwie fehlen noch die „gewohnten“ zusätzlichen Angaben und die Suchfunktion, wie im PHP-Skript in den vorherigen Beiträgen.

    Weiter geht’s im nächsten Teil


    Druckserver 7/7: Powershell HTML-Datei mit den bekannten Angaben erweitern

    $
    0
    0

    Bis jetzt habe ich eine Offline-HTML-Intranetseite erzeugt. Jetzt fehlen noch so Angaben, wie Anzahl der Drucker pro Server, der Zeitpunkt der Erzeugung der Liste, die Ip-Adressen der Drucker als Link einbinden und natürlich die Suchfunktion. Sozusagen eine Offline-HTML-Intranetseite für verwöhnte Puristen ……..
    Packen wir es an.

    Um weitere Angaben in die ConvertTo-Html-Ausgabe zu bekommen, gibt es die Parameter PreContent und PostContent.
    PreContent wird vor der HTML-Tabelle ausgegeben, der PostContent danach.
    Da die Anzahl der Drucker pro Server oberhalb stehen soll, erzeuge ich jetzt eine Variable „$prec“ mit dem gewünschten Inhalt.
    Die Anzahl der Drucker bestimme ich mit „Measure-Object“
    Der erste Teil der Routine:

    $prec = "Anzahl Drucker pro Server.
    `r`n" $prec = $prec + "| " For ($i=0; $i -lt $Servername.Length; $i++) { $Server=$Servername[$i] $File=$Servername[$i]+".csv" Get-WmiObject -class Win32_Printer -Computer "$Server.witron.wiroot.local" | select Name, PortName, Sharename, Location, Systemname |Export-Csv C:\___skript\"$File" (Get-content $File | Select-Object -Skip 2) | Set-Content $File (Get-content $File | Select-String -pattern "\s.*XPS\s.*|\s.*PDF\s.*|FinePrint" -notmatch) | Set-Content $File Get-content $File |add-content C:\___skript\komplett.csv $measure = ((Get-Content $File) |Measure-Object) $lines = $measure.Count $prec = $prec + $Server.ToUpper() + " = " + $lines + " | " Remove-item $File }

    Was hier auffällt ist die Abänderung der Abfrage, denn bisher habe ich die „komplett.csv“ von den ungewünschten Druckern bereinigt. dies passiert jetzt sofort bei der Abfrage, damit ich die richtige Anzahl der Drucker bekomme.

    Fehlt noch die restliche Angabe: Der Zeitpunkt der Listengenerierung:

    $prec = $prec + "
    `r`n" $fti = (Get-Item C:\___skript\komplett.csv) $prec = $prec + "Liste wurde zuletzt aktualisiert am "+ $fti.LastWriteTime.ToString('dd.MM.yyyy') + " um " + $fti.LastWriteTime.ToString('HH:mm') $prec = $prec + "

    `r`n"

    und das Einfügen der Variable in die Ausgabe mit „PreContent“

    Get-Content C:\___skript\komplett.csv |ConvertFrom-Csv -header "Druckername","Druckerport","Freigabename","Ort","Servername" |ConvertTo-Html -head $heac  -body "<H1>Druckerübersicht</H1>" -PreContent $prec| Out-File C:\___skript\html\komplett.html

    Sehr schön…
    Fehlt noch die Suchfunktion.
    Dazu kopiere ich die Funktion „tablefilter.js“ in den Ordner der HTML-Datei (man kann auch einen anderen wählen, aber es soll ja einfach bleiben).
    Jetzt muss nur noch die Funktion geladen werden. Dazu erweitere ich die Header-Variable um folgende Zeilen:

    $heac = $heac + '<script language="javascript" type="text/javascript" src="tablefilter.js" >'+"`r`n"
        $heac = $heac + '</script>'+"`r`n"

    Um das Skript dann anzustoßen muss der Aufruf dazu nach der Tabelle eingefügt werden. Nach der Tabelle heißt „PostContent“.
    Ich erzeuge eine neue Variable „$posc“ mit dem nötigen Inhalt

    $posc = '<script language="javascript" type="text/javascript" >'+"`r`n"
        $posc = $posc + '        setFilterGrid("table1");'+"`r`n"
        $posc = $posc + '</script>'

    Der ConvertTo-Befehl lautet demnach:

    Get-Content C:\___skript\komplett.csv |ConvertFrom-Csv -header "Druckername","Druckerport","Freigabename","Ort","Servername" |ConvertTo-Html -head $heac  -body "<H1>Druckerübersicht</H1>" -PreContent $prec -PostContent $posc | Out-File C:\___skript\html\komplett.html

    Allerdings funktioniert es jetzt noch nicht, dann der Tabelle fehlt der zusatz „id=table1“

    Bedeutet: Suchen und Ersetzen

    (Get-Content C:\___skript\html\komplett.html) -replace '<table>', '<table id=table1>'   | set-content C:\___skript\html\komplett.html

    Funktioniert; und ich bin fast fertig.

    Fehlt noch die Annehmlichkeit, die IP-Adressen der Drucker als Link einzubinden.
    Hierfür einen herzlichen Dank an „highload“ von „Administrator.de“, der mir hierfür die Lösung präsentierte.
    Ich ändere den „replace“-Befehl entsprechend ab:

    (Get-Content C:\___skript\html\komplett.html) -replace '<table>', '<table id=table1>'  -replace '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]))','<a href="http://$1" target="_blank">$1</a>'  | set-content C:\___skript\html\komplett.html

    Jetzt aber: fertig.

    Wenn man beide Dateien, die HTML-Datei und tablefilter.js, lokal kopiert, kann die Übersichtssliste mit allen Funktionen auch Offline verwendet werden.

    Hier das komplette Skript:

    Get-ChildItem -path c:\___skript  -Filter *.csv | Remove-Item #-Whatif
    Get-ChildItem -path c:\___skript\html  -Filter *.html | Remove-Item #-Whatif
    
    $prec = "Anzahl Drucker pro Server.<br>`r`n"
    $prec = $prec + "| "
    
    $Servername = @("ps12ps01","ps2k8ps01","ps2k8ps02")
    For ($i=0; $i -lt $Servername.Length; $i++) {
        $Server=$Servername[$i]
        $File=$Servername[$i]+".csv"
        Get-WmiObject -class Win32_Printer -Computer "$Server.witron.wiroot.local" | select Name, PortName, Sharename, Location, Systemname  |Export-Csv C:\___skript\"$File"
        (Get-content $File | Select-Object -Skip 2) | Set-Content $File
        (Get-content $File | Select-String -pattern "\s.*XPS\s.*|\s.*PDF\s.*|FinePrint" -notmatch) | Set-Content $File
        Get-content $File |add-content C:\___skript\komplett.csv
        $measure = ((Get-Content $File) |Measure-Object)
        $lines = $measure.Count
        $prec = $prec + $Server.ToUpper() + " = " + $lines + " | "
        Remove-item $File
        }
    
    
        $prec = $prec + "<br>`r`n"
        $fti = (Get-Item C:\___skript\komplett.csv)
        $prec = $prec + "Liste wurde zuletzt aktualisiert am "+ $fti.LastWriteTime.ToString('dd.MM.yyyy') + " um " + $fti.LastWriteTime.ToString('HH:mm')
        $prec = $prec + "<br><br>`r`n"
    
        $heac = "<style>`r`n"
        $heac = $heac + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}`r`n"
        $heac = $heac + "TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:lightgrey}`r`n"
        $heac = $heac + "TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black; padding: 3px;}`r`n"
        $heac = $heac + "</style>`r`n"
        $heac = $heac + '<script language="javascript" type="text/javascript" src="tablefilter.js" >'+"`r`n"
        $heac = $heac + '</script>'+"`r`n"
    
        $posc = '<script language="javascript" type="text/javascript" >'+"`r`n"
        $posc = $posc + '        setFilterGrid("table1");'+"`r`n"
        $posc = $posc + '</script>'
    
    
    Get-Content C:\___skript\komplett.csv |ConvertFrom-Csv -header "Druckername","Druckerport","Freigabename","Ort","Servername" |ConvertTo-Html -head $heac  -body "<H1>Drucker&uuml;bersicht</H1>" -PreContent $prec -PostContent $posc | Out-File C:\___skript\html\komplett.html
    (Get-Content C:\___skript\html\komplett.html) -replace '<table>', '<table id=table1>'  -replace '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]))','<a href="http://$1" target="_blank">$1</a>'  | set-content C:\___skript\html\komplett.html

    Ich hoffe, dass diese Beiträge dem Einen oder Anderen hilfreich sein können.

    Windows (10): Setzen der MTU aller Netzwerkkarten (außer Loopback)

    $
    0
    0

    Im aktuellen Fall sollten alle Netzwerkkarten auf eine bestimmte MTU gesetzt werden, da die Standard MTU-Einstellungen vom Windows 10 bei der gerforderten Anwendung nicht funktionierten. Grundsätzlich sollte dies aber auch unter anderen Windows-Versionen funktionieren.

    Das Setzen der MTU funktioniert auf der Konsole recht einfach.
    Zuerst listet man alle Netzwerkkarten auf

    Netsh interface ipv4 show interfaces

    Nun kann man den MTU-Wert durch Angabe der ID (Idx)

    netsh interface ipv4 set subinterface "11" mtu=1458 store=persistent

    oder der Bezeichnung (NAme)

    netsh interface ipv4 set subinterface "Local Area Connection" mtu=1458 store=persistent

    setzen.

    Problematischer wird es, wenn man auf allen Netzwerkkarten die MTU anpassen möchte, denn es gibt hier keinen „all“-Parameter (zumindest nicht meines Wissens).
    Ich muss demnach alle vorhandenen Netzwerkkarten erkennen und möchte diese dann per netsh-Befehl anpassen. Ich entscheide mich für die Verwendung der Namen der Netzwerkadapter.
    Der Abruf selber erfolgt in einer simplen Schleife:

    For /f " tokens=*" %a in ('Netsh Interface IPV4 Show interfaces') do @echo %a

    Da ich die Überschrift und die Trennzeile nicht benötige, erweitere ich den Befehl mit „skip=3“

    For /f  "skip=3  tokens=*" %a in ('Netsh Interface IPV4 Show interfaces') do @echo %a

    Besser
    Um die Namen zu erhalten trickse ich jetzt ein bisschen. Ich möchte alle Inhalte ab der 4. Spalte und den Rest als Gesamt-String.
    Ich ändere also den Befehl auf tokens=4* und rufe nun nicht die erste (4.) Spalte auf, sondern den Inhalt dahinter – mit %b

    For /f " skip=3 tokens=4*" %a in ('Netsh Interface IPV4 Show interfaces') do @echo %b

    Jetzt sollte noch das Loopback-Interface unbeachtet bleiben. Dazu nutze ich findstr.

    For /f "skip=3 tokens=4*" %a in ('Netsh Interface IPV4 Show interfaces ^| findstr /v "Loop"') do @echo %b

    Jetzt kommt der eigentliche Befehl. Anstelle des echo-Befehls kommt nun die netsh-Anweisung

    For /f "skip=3 tokens=4*" %a in ('Netsh Interface IPV4 Show interfaces ^| findstr /v "Loop"') do (netsh interface ipv4 set subinterface "%b" mtu=1302 store=persistent)

    Jetzt wurden alle Netzwerkadapter (ausgenommen das Loopback) auf die angegebene MTU eingestellt.
    Wer das Ganze in einer Batch-Datei nutzen möchte, muss lediglich beachten, dass die Variablen mit zwei Prozentzeichen angegeben werden müssen.
    Dafür kann man aber die MTU dann auch schön als Variable angeben.
    Als Beispiel

    @Echo Off
    set "mtu=1200"
    For /f  "skip=3 tokens=4*" %%a In (‘NetSh Interface IPv4 Show Interfaces ^| findstr /v "Loop"’) Do (netsh interface ipv4 set subinterface "%%b" mtu=%mtu% store=persistent)
    Exit /B

    Diese Batch-Datei kann nun auch von einem User ausgeführt werden, ohne dass er sich in einer Konsolenschlacht wiederfindet.
    Sollte die Anwendung sein, dass ein User dies selber einsetzen kann (um z.B.: flexibel die MTU anpassen zu können), kann man es auch noch etwas schöner verpacken:
    z.B.: in eine GUI zu diesem Befehl …. mit AutoIT (im nächsten Artikel)

    AutoIT: DIY-GUI mit AutoIT zum Setzen der MTU aller Netzwerkkarten

    $
    0
    0

    Im vorherigen Beitrag habe ich mit einer FOR-Schleife die MTU aller Netzwerkkarten (außer dem Loopback) gesetzt. Im aktuellen Fall sollten Die Mitarbeiter die MTU eigenständig anpassen können. Dazu verpacke ich den Befehl in eine ausführbare exe-Datei mit dem Tool „AutoIT“

    Ich möchte an dieser Stelle gar nicht so tief in AutoIT eingehen, da ich selber nur leicht an der Oberfläche dieses Tools kratze. Ich erhebe auch keinerlei Anspruch auf perfektes oder optimiertes Programmieren und hoffe, dass richtige Programmierer beim Betrachten meines Skriptes vom Augenkrebs verschont bleiben mögen. Es soll nur ein Beispiel sein, wie man Vorgänge, Befehle oder Skripte in eine ausführbare exe-Datei packen kann.
    Das größte Problem war hier (für mich) das Absetzen des Dos-Befehls aus AutoIT heraus
    Neben dem „RunWait“ gibt es auch „_RunDos“. Letzten Endes habe ich mich für den „RunWait“-Befehl entschieden.

    RunWait(@ComSpec & " /c " & 'For /f  "usebackq skip=3 tokens=4*" %a In (`NetSh Interface IPv4 Show Interfaces ^| findstr /v "Loop"`) Do (netsh interface ipv4 set subinterface "%b" 1300 store=persistent)' ,"",@SW_hide )

    Der “ComSpec” ist das Äquivalent zum “CMD”. Der Parameter /c übergibt danach den Consolen-Befehl.
    Da beim AutoIT-Befehl bereits Anführungszeichen und Hochkommata eingesetzt werden, habe ich den eigentlichen CMD-Befehl noch um den Parameter „usebackq“ ergänzt und den kompletten den Befehl „netsh Interface…“ mit rückwärtsgeneigte Hochkomma (die Backquotes) abgrenzen kann.
    Um den Befehl mit den benötigten Adminrechten auszufürhern, weise ich AutoIT an, mit Administrator-Rechten zu starten (und diese ggf. bestätigen lassen).

    „#RequireAdmin“

    So würde es schon funktionieren, aber es geht noch eleganter
    So habe ich das Skript noch durch eine Abfrage des MTU-Wertes erweitert, welcher in einem Eingabefenster (mit gesetzten Standardwert) abgefragt wird.

    $Mtuval= InputBox("MTU setzen  (v0.1 - 26/09/2016)","Hier den gewünschten MTU-Wert eingeben oder Vorgabe übernehmen." & @CRLF &@CRLF &"Wert darf zwischen " & $mtumin & " und " & $mtumax & " liegen", "1300")

    Die Variablen „$mtumin“ und „$mtumax“ geben hier den minimalen und den maximalen MTU-Wert an (wer hätte das gedacht) und $mtuval ist dann der eingegebene Wert.
    Um Fehleingaben zu vermeiden wird der eingegebene wert geprüft und bei Fehleingabe erneut abgefragt werden (realisiert mit einem Loop)
    Um das Programm auch beenden zu können habe ich den „Cancel“-Button mit „ @error = 1“ abgefragt.
    Ich denke, das ist grob erklärt, was das nun folgende, komplette, Skript so macht.

    ;;Benötigt Adminrechte
    #RequireAdmin
    #include <MsgBoxConstants.au3>
    
    ;;Vorgabe Min/Max-Variable für MTU
    $mtumin = 1000
    $mtumax = 1500
    ;;Varianble für loop vorsetzen
    $iloop=1
    
    ;;Abfrage der Eingabe
    	While $iloop = 1
    		$mtuval = InputBox("MTU setzen  (v0.1 - 26/09/2016)","Hier den gewünschten MTU-Wert eingeben oder Vorgabe übernehmen." & @CRLF &@CRLF &"Wert darf zwischen " & $mtumin & " und " & $mtumax & " liegen" & @CRLF &@CRLF & "Alternativ:" & @CRLF & "Auf Commandline mit Parameter " & @CRLF & "'/MTU xxxx'" & @CRLF & " aufrufen", "1300","",250,250)
    			if @error = 1 Then
    				Exit
    				ElseIf $mtuval < $mtumin Then
    					MsgBox(64,"Fehler","Der eingegebene Wert ist zu klein")
    				ElseIf $mtuval > $mtumax then
    					MsgBox(64,"Fehler","Der eingegebene Wert ist zu groß")
    				Else
    					$iloop = 0
    			EndIf
    	Wend
    ;;wenn Loop positive verlassen
    ;;(die Abfrage ist hier unnötig, aber ich geht halt gern auf Nummer sicher)
    if $iloop = 0 Then
    	RunWait(@ComSpec & " /c " & 'For /f  "usebackq skip=3 tokens=4*" %a In (`NetSh Interface IPv4 Show Interfaces ^| findstr /v "Loop"`) Do (netsh interface ipv4 set subinterface "%b" ' & $mtuval & ' store=persistent)' ,"",@SW_hide )
    	MsgBox($mb_systemmodal, "Hinweis", "MTU aller Netzwerkkarten auf "& $mtuval & " gesetzt.")
    EndIf
    Exit

    Jetzt kann das Skript kompiliert (Menüleiste -> Tools -> Compile) und als exe-Datei abgespeichert werden.
    Schon hat man sein eigenes, kleines, Tools geschrieben.
    Ich hoffe, ich habe hier das Interesse an AutoIT etwas geweckt. Es ist ein einfaches Tool, mit dem man schnell eigene Erfolge erzielen kann.
    Je tiefer man in AutoIT einsteigt, umso mehr erkennt man, wie mächtig dieses Tool sein kann.

    Step7: Verschwundenes „Suchen/Ersetzen“-Fenster wieder herstellen

    $
    0
    0

    Es gibt Situationen, in denen plötzlich bestimmte Fenster in einer Anwendung nicht mehr geöffnet werden – zumindest nicht sichtbar. Ein besonderer „Kandidat“ für das Öffnen von Fenstern außerhalb des sichtbaren Bereichs ist die Programmiersoftware Step7 von Siemens.

    Woher dieses Phänomen (öffnen eines Fensters außerhalb des sichtbaren Desktopbereiches) kommt ist schwer zu sagen. Grundsätzlich würde ich die Ursache in der Verwendung von mehreren Monitoren suchen. Hier kann es sein, dass ein Fenster auf den zweiten Bildschirm platziert wird, welches später, bei Verwendung von nur einem Monitor (oder nur des Laptop-Displays), eben außerhalb des Desktops liegt.
    Komischerweise tritt dieses Problem auch hin und wieder auf unseren Laptops auf, welche nie im Multimonitor-Modus betrieben werden/wurden.

    Bei dem Problem scheinen wir aber nicht die Einzigen zu sein, denn in Foren trifft man immer wieder auf dieses Phänomen – vorwiegen bei Step7-Foren, und komischerweise immer bei dem Fenster „Suchen/Ersetzen“.

    Lösungen:

    Es gibt einige Lösungsansätze. Ein radikaler Ansatz für Step7 ist das Löschen des Registrykeys für die Einstellungen von Step7
    HKEY_CURRENT_USER\Software\Siemens\STEP7\ 2.0

    Bei vielen Fenstern kann man, wenn sie aktiv sind, durch Drücken der Tasten <ALT>+<Leertaste> das Kontextmenü öffnen. Ein Drücken der Taste <M> aktiviert die „Move“-Funktion und man kann nun das Fenster mit den Cursortasten verschieben.
    Beim „Suchen/Ersetzen“-Fenster in Step7 gibt es dieses Kontextmenü jedoch nicht.

    funktionierende Lösungen:

    Es gibt Software, welche das Anordnen von Fenstern übernimmt.
    Zwei davon möchte ich hier heute Vorstellen:

  • DualMonitorTools
  • Ftools (mein Favorit)

  • DualMonitorTools
    Dieses Tool kann man bei Sourceforge herunterladen und ist eine Art Schweizertaschenmesser für etliche Belange bei der Nutzung von mehreren Monitoren.
    Für „unser“ Problem ist aber nur die Funktion „Move active Window to next screen“ unter der Option „Swap Screen“ -> „Active Window“

    Mit einer frei gewählten Tastenkombination kann man das aktive Fenster von einem Monitor auf den anderen verschieben. Der Nachteil ist, dass man bei einem Fenster, welches außerhalb des sichtbaren Bereichs geöffnet wird, nicht sieht ob es aktiv ist. Man muss sich darauf verlassen, dass, z.B.: nach dem Öffnen des „Suchen/Ersetzen“-Fensters in Step7, das Fenster aktiv ist und nun mit der gewählten Tastenkombination platziert werden kann.

    Ftool
    Das Tool „Ftool“ von Ralf Kauschus wird in vielen Foren genannt, jedoch kann man das Tool oftmals erst nach einer Registrierung herunterladen. Dabei wird das Tool ganz offen von Herrn Kauschus auf seiner Homepage http://www.sps-prog.de angeboten (Direktlink zum Tool).
    Ein großer Plus-Punkt: Ftool muss nicht installiert werden – TOP!!
    Dieses Tool verfolgt einen anderen Ansatz als „MultiMonitorTools.
    Es hat nur eine Aufgabe – das Positionieren von ausgwählten Fenstern.

    Durch einen Klick auf den Button „NEW“ lassen sich (über einen Auswahldialog) die Fenster festlegen, welche auf ihre Position überwacht werden sollen.
    Alle ausgewählten Fenster werden in einer einstellbaren Zeit immer wieder auf die vorgegebene Position gesetzt, was vor einem unbeabsichtigten Verschieben der Fenster schützt.
    Das Tool selber positioniert sich „platzsparend“ in der Taskleiste.

    Backup von geöffneten Dateien.

    $
    0
    0

    Möchte man mit copy/xcopy/robocopy Verzeichnisse mit geöffneten Dateien kopieren (z.B.: das Systemverzeichnis) bekommt man immer die Meldung, dass Dateien nicht kopiert werden konnten, da sie gerade verwendet werden.
    Die Lösung heißt hier: Volume Shadow Copy (oder Schattenkopie).

    Der Testaufbau

    Für diesen Test existiert auf einer Festplatte „E:“ ein Verzeichnis „1_Quelle“ und „2_Ziel“.
    Im Quellverzeichnis befinden sich 2 Text-Dateien und eine Access-Datenbank (welche die geöffnete Datei simulieren soll).

    Führt man nun ein robocopy aus, welches die die Dateien von „1_Quelle“ Nach „2_Ziel“ kopieren soll, erhält man die Fehlermeldung
    …. ERROR 32 (0x00000020) Copying File e:\1_Quelle\Test-Datenbank.accdb
    The process cannot access the file because it is being used by another process.


    Es wurden also nur die beiden, ungeöffneten, Text-Dateien kopiert.

    Schattenkopie erzeugen

    Nun erzeuge ich eine Schattenkopie für das Laufwerk „E:\“.

    #Für Win7
    vssadmin create shadow /for=e:

    #Für Win10
    wmic shadowcopy call create Volume='E:\'



    Mit

    Vssadmin list shadows

    Kann man jetzt die Schattenkopie auflisten lassen

    Hier können auch mehrere Schattenkopien angezeigt werden, wenn diese vorhanden sind. Hier gilt es die richtige Schattenkopie zu finden 😉

    Schattenkopie einbinden

    Nun kann man diese Schattenkopie einbinden. Wichtig ist hier für uns die Angabe „Schadow Copy Volume: \\?\GLOBALROOT\DEVICE\HarddiskVolumeShadowCopy10“

    Der Befehl zum verlinken lautet:

    mklink /D e:\backup \\?\GLOBALROOT\DEVICE\HarddiskVolumeShadowCopy10\

    (Den Backshlash am Ende nicht vergessen !!!!!)
    .
    Navigiert man nun in dem erzeugen Link „e:\backup“, findet man nun die gleiche Verzeichnisstruktur wieder, wie auf dem Laufwerk „e:\“

    Man kann nun im „live“ Verzeichnis weitere Dateien erzeugen, die Schattenkopie bleibt davon unbehelligt.

    Dateien kopieren

    Führt man jetzt erneut ein robocopy aus (diesmal als Quelle den Link-Pfad angeben !!),

    wird die Datei „Test-Datenbank.accdb“ mit kopiert, obwohl sie noch geöffnet ist. Die Datei „zz_neue Datei.txt“ wurde nicht kopiert, die sie in der Schattenkopie noch nicht verfügbar ist.

    Gegenprobe:
    Wenn ich nun den robocopy-Befehl erneut mit der original-Pfadangabe „e:\1_Quelle“ ausführe, sollte zwar die neue Datei „zz_neue Datei.txt“, nicht aber die geöffnete Datenbank „Test-Datenbank.accdb“ kopiert weden können.

    Link zur Schattenkopie entfernen

    Um den Link zur Schattenkopie wieder zu entfernen, reicht ein einfaches Löschen des Links

    rd e:\backup


    Schattenkopie löschen

    Um die Schattenkopie selber zu löschen, gibt es den Befehl

    vssadmin delete shadows /all


    Das Löschen muss bestätigt werden.

    Möchte man keine Rückfrage erhalten, kann man noch den Parameter „/Quiet“ anfügen.
    Ebenso gibt es den Parameter „/oldest“, der nur die älteste Schattenkopie löscht.
    Man kann Schattenkopieen auch gezielt, z.B.: über deren ID, löschen

    vssadmin Delete Shadows /Shadow=ShadowId  [/quiet]

    oder/und auf ein Laufwerk begrenzen (z.B.: Laufwerk e:\)

    vssadmin Delete Shadows /For=e:\  [/oldest] [/quiet]

    Viewing all 71 articles
    Browse latest View live