Mittwoch, 24. Mai 2017

Powershell: Viele Files einzeln löschen

Um so länger man sich nicht um seinen Server kümmert, umso mehr arbeit steht einem bei einem Upgrade oder bei Problemen bevor.

Vorgeschichte: Seit mehreren Jahren betreibe ich unterschiedliche Server mit mehr oder minderen Erfolg....

Nun wird aber immer mehr der Speicherplatz belegt. Aber was mir jetzt bei einem Server untergekommen ist, habe ich noch nie gesehen.

Bei der Suche nach löschbaren Files ist mir der Datenträgerbereinigungsassisten immer hängen geblieben. Nach Durchsicht, welche Schritte er durchführt bin ich über das Löschen des TEMP-Verzeichnisses auf C:\Windows\Temp gestoßen.

Lt. Explorer, welcher es nicht einmal schaffte, alles fertig zu laden, zeigte in etwa mehr als 3 Mio. Files an.



Wie kann man also ein Verzeichnis leer räumen, welches schon nicht mal im Explorer zum Ansehen geht.

Naja ganz einfach per Powershell...

$i=0
Get-ChildItem -path "C:\Windows\Temp" -OutBuffer 1 | foreach ($_) {del $_.FullName;Write-Host "Deleting $_";$i++;write-host $i}


Wichtig ist hier der Parameter "-OutBuffer". Dieser gibt an, wie viele Objekte zuerst von Get-ChildItem eingelesen werden, bevor sie an die Pipe weitergegeben werden.

Da das warten bis über 3 Mio. Files eingelesen sein würden zu lange dauert, habe ich mich dafür entschieden, jede Datei einzeln dem Del-Befehl zu übergeben. Dies mag vlt. nicht effizient sein, aber es werden somit wenigstens die Dateien gelöscht (alle anderen möglichkeiten haben im nichts geendet).

Die Ausgabe sieht (inkl. des stylischem Zählwerkes) so aus...



So nun brauche ich nur noch zu warten bis meine 3 Mio Files gelöscht sind...


1. Versuch OHNE Zählwerk


Sonntag, 23. April 2017

Office: Inhaltsverzeichnis auch im exportierten PDF anklickbar




Während der Arbeit muss ich manchmal div. Anleitungen verfassen.

Da diese auch mehrere Punkte und Seiten umfassen habe ich mich auf die Suche gemacht eine Möglichkeit zu finden ein Inhaltsverzeichnis auch im PDF anklickbar zu machen. Fündig bin ich unter:

https://tutorialcenter.tv/office/word/word-inhaltsverzeichnis-im-pdf-anklickbar-machen/

geworden. Diese Seite erklärt einfach und präzise wie man so etwas verwirklichen kann. Dies erfolgt über 3 Einfache Schritte.



  1. Benutzerdefiniertes Inhaltsverzeichnis einfügen:
    Unter Verweise -> Inhaltsverzeichnis -> Benutzerdefiniertes Inhaltsverzeichnis
  2. Hyperlinks aktivieren:
    Im Inhaltsverzeichnis die Funktion "Hyperlinks anstelle von Seitenzahlen" aktivieren
  3. Einfügen und Exportieren:
    Das Verzeichnis einfügen und dann kann das ganze Dokument auch schon per PDF exportiert werden.
Genau werden diese Schritte auf der Original Seite beschrieben:


https://tutorialcenter.tv/office/word/word-inhaltsverzeichnis-im-pdf-anklickbar-machen/

Dienstag, 14. März 2017

Unifi: Firmware Upgrade durchführen - TFTP Recovery Mode für UAP


Wie es halt so ist habe ich heute versucht meine UAP-Access-Points der Firma Ubiquiti auf die Firmware 3.7.47 durchzuführen.

Dazu bin ich wie folgt vorgegangen:
Wie üblich habe ich per WebGui auf meine Controller eingeloggt. Dort hat man (sofern Ihr es noch nicht wisst) ja die Möglichkeit über
Settings --> Maintenance --> Check Firmware Update


Danach erscheint bei der Device-List, neben den entsprechenden Geräten ein zusätzliches Icon welches die Bezeichnung Upgrade trägt.


Funktioniert alles einwandfrei, wird die Firmware heruntergeladen, auf den AP geladen und dieser startet dann mit der neuen Versionsnummer.

Wie gesagt, wenn alles korrekt funktioniert ist dies eine super Sache. Dies war heute natürlich nicht der Fall und ich habe mir meine AP's gebrickt. Erkennbar daran, dass zuerst der AP in einer Reboot-Loop hängen geblieben ist und später dann in den Initialization Error A12:



Damit man nun wieder seinen AP reparieren kann, hat UBNT einen TFTP Download Modus integriert. Diesen erreicht man wie folgt:

Diese Anleitung gilt nur für Windows, der Link für den Original Post ist unten angehängt:

  1. Download einer alten funktionierenden Firmware von https://www.ubnt.com/download/unifi/unifi-ap
    Dies ist einfacher, als die Firmware vom Controller herunterzuladen.
  2. Abstecken des Netzwerkkabels vom Unifi AP
  3. Mittels einer Büroklammer drücken und halten des Reset-Buttons
  4. Gleichzeitig (während der Reset-Button noch gedrückt ist) das Netzwerkkabel wieder anschließen.
  5. Den Button so lange gedrückt lassen, bis der AP im "Upgrade Mode" ist, dies ist bei meinen AP's über folgende LED-Blink-Kombination ersichtlich. Dies kann bis zu 25 Sekunden dauern. Sobald ihr die Blink-Kombination seht, könnt ihr den Reset-Button loslassen.
     
  6. Bevor nun die LAN-IP geändert wird, ladet ihr noch eine TFTP-Software herunter. UBNT verweißt im Schritt 8 auf Pumpkin TFTP.
  7. Nun stellt ihr bei eurem PC folgende fixe IP-Adresse ein. IP: 192.168.1.25, Subnetzmaske: 255.255.255.0, Gateway: 192.168.1.20
  8. Verbindet nun das PoE-Injector-LAN-Kabel mit den eigenen PC.
  9. Innerhalb von Pumpkin TFTP drückt ihr auf "Put File"


  10. und dort wählt ihr die vorher heruntergeladene Firmware aus und tragt als Remote host das vorherig eingestellte Gateway aus


  11. Mit Klick auf OK wird der Dateitransfer gestartet.
  12. Ist der Transfer abgeschlossen, dann sollte der AP rebooten UND innerhalb des Controllers wieder als adoptierbar auftauche.
Ich hoffe ich konnte euch den Recovery-Mode ein bisschen erklären. Der Vollständigkeit ist hier noch der Link zum Original Post von UBNT.

Wünsche euch viel Spaß und alles Gute beim Recovern :-)

Sonntag, 12. Februar 2017

Unifi: Unifi Controller - Auto Backup auf ein nfs-Share

Wie in einem alten Post von mir (https://allesit.blogspot.co.at/2016/07/unifi-controller-auf-raspberry-pi.html) lässt sich der UniFi-Controller auf einem Raspberry Pi relativ einfach installieren.

Ab mind. Version 5.4 ist man mit dem Controller auch in der Lage automatisiert Backups durchzuführen.

Um dies zu erreichen muss man nur folgende Einstellungen durchführen: In der GUI des Controllers:

Klick auf Settings:


Danach den Punkt "Auto Backup" auswählen:
Nun können die gewünschten Einstellungen getroffen werden.

Nach "APPLY CHANGES" wird um Datenverzeichnis des Controllers (/var/lib/unifi) der Ordner backup angelegt. Darunter befindet sich dann der Ordner autobackup. Wie der Name verrät, werden hier die AutoBackups angelegt.

Tipp: Da der Speicherplatz am Raspberry sehr begrenzt ist und es bei mir des öfteren schon einmal die Speicherkarte kaputt geworden ist, ist es vorteilhaft das AutoBackup auf einen Netzwerkspeicher durchzuführen.

Ich habe dies wie folgt erreicht:
  1. Als erstes MUSS ein NFS-Share eingerichtet werden. Dies entnehmt ihr am besten den Anleitungen eures NAS.
  2. Optional: Nun richte ich im Ordner MNT ein neues Verzeichnis ein. Dieses Verzeichnis ist für mich für alle Backups zuständig.
    sudo mkdir /mnt/Backup
    
    
  3. Als nächstes mountet man einfach das NFS-Share in das Backup-Verzeichnis des Controllers. Dies funktioniert am einfachsten mittels folgenden Befehls (die zweite Zeile mountet das /mnt/Backup Verzeichnis):
    sudo mount -t nfs -o soft ServerAdresse:Pfad/zum/Share /var/lib/unifi/backup -o nolock
    sudo mount -t nfs -o soft ServerAdresse:Pfad/zum/Share /mnt/Backup -o nolock
So ab sofort läuft das Backup direkt aufs NAS.

Richtet ihr das Verzeichnis DIREKT nach einer Neuinstallation des Controllers ein, so können beim Wizard auch schon diese Backups zum Restore ausgewählt werden.

Viel Spaß beim Nachbauen...

Montag, 2. Januar 2017

Softwaretipp: Das eigene DMS



Im Heft 23 der Zeitschrift c't vom Jahr 2016 (November 2016) bin ich über die Software ecoDMS gestoßen.

Eigentlich war ich nicht auf der Suche nach einem Dokumentenmanagementsystem. Ich hätte nur eine Möglichkeit der Volltextsuche für meine digitalen Dokumente/Rechnungen gesucht.

Hier nun ein kleines Fazit.

Allgemeines:
Es handelt sich hierbei um eine Client/Server Lösung. Dies bedeutet, dass man Server auf unterschiedlichen Betriebsystemen (Windows/Linux/NASDocker) installieren kann. Dementsprechend gibt es für die jeweiligen OS auch einen Client.

Möglichkeiten:
Neben dem einscannen und ablegen von Dokumenten bietet EcoDMS einige feine Features.
So gibt es:

  • eine Texterkennung für die Volltextsuche
  • Vorlagen für wiederkehrende Dokumenttypen, welche nach Möglichkeit auch automatisiert werden können
  • Verlinkung der Dokumente
  • Revisionen
  • integrierte Vorschau
  • Mehrfachklassifizierung (zB Gemeindeabrechnung wäre lfd. Kosten, sowie für Rechnungen)
  • Plugins für MS Office
  • etc.


Lizenz:
Lädt man die Software nun von der Herstellerseite herunter, wird diese automatisch mit einer 30 Tage gültigen Volllizenz installiert. Mit dieser Lizenz ist es möglich alle Facetten der Software kennen zu lernen.

Das besondere kommt jedoch nach dieser Testperiode. Entscheidet man sich NICHT die Software zu kaufen, so passiert den bisher verarbeiteten Dokumenten nämlich nichts. Diese bleiben weiterhin erhalten. Die Software wechselt nach der Testperiode in das sog. Free4Three. Dies bedeutet, dass es für 3 Benutzer immer noch Möglich gibt sich gleichzeitig mit dem Server zu verbinden und Dokumente zu archivieren.

Dies klingt zu Verlockend um wahr zu sein. Leider muss ich euch da recht geben. Natürlich gibt es Einschränkungen diesbezüglich. So ist es bei der Free4Three-Version nicht mehr Möglich Vorlagen zu verwenden, Office Plugins und die Dokumentenvorschau funktionieren auch nicht mehr.

Eine Lizenz (= 1 Datenbankverbindung) kostet zZ. 69 EUR. OK dies ist auch nicht gerade wenig, aber diese ist eigentlich dauerhaft gültig. Alle Updates innerhalb des Major-Releases sind kostenlos. Sollte ein Major-Release zur Verfügung stehen, dann muss man sich entscheiden ob man Upgraded (zB wegen neuen Zusatzfunktionen) oder man verweilt bei der bestehenden Version.
Entscheidet man sich für ein Upgrade, dann muss man eine neue Lizenz erwerben. Diese erhält man aber (auch wenn sich zwischenzeitlich der Preis der Software geändert hat) zum Preis der ursprünglichen Software (Lebenslange Lizenzpreis Garantie).

Fazit:
Nach einer kleinen Eingewöhnung ist die Verwendung der Software einfach angenehm. Der Preis von 69,00 EUR lässt einen erschrecken, aber es gibt immer wieder auf der Seite von EcoDMS Rabatte, welche es erlauben doch noch den einen oder anderen Euro zu sparen. Die ordentliche Dokumentation erlaubt es auch Anfängern sich schnell zurecht zu finden.

Weitere Informationen:
Genauere Infos bezüglich der Lizenz unter http://www.ecodms.de/index.php/de/ecodms-archiv/lizenzmodell

Newsbeitrag ecoDMS.de (http://www.ecodms.de/index.php/de/presse-news/artikel-softwaretests/c-t/117-presse-und-news/zeitungsartikel-softwaretests/c-t/840-ecodms-im-c-t-softwaretest-ordnung-im-archiv)

Powershell: Einfaches Menü

Mittels Powershell lassen sich so einige Sachen erledigen. So kann man zB. Windows Betriebssysteme so beeinflussen, dass man Software de-/installieren oder Registry-Einstellungen ändern kann. Nun ist es auch so einfach ein interaktives Menü auszubilden. Wir bilden eine eigene Funktion aus wie zB:
function MyCustomMenue
{
     param (
           [string]$Title = 'Select Options'
     )
     cls
     Write-Host "================ $Title ================"
     
     Write-Host "1: Press '1' for this option."
     Write-Host "2: Press '2' for this option."
     Write-Host "3: Press '3' for this option."
     Write-Host "Q: Press 'Q' to quit."
}
Danach kann diese Funktion einfach mittels
     MyCustomMenue
"geladen" werden. Da aber nun noch nicht die Eingabe des Users abgefragt wird, werden noch zusätzlich folgende zeilen angefügt.
     Write-Host
     Write-Host "================================"
     $input = Read-Host "Please make a selection"

     cls
     Write-Host "================================"
     Write-Host
Bei der Zeile $input = Read-Host "Please make a selection" bleibt somit das Powershell-Script stehen und es wird auf eine Eingabe des Users gewartet, welche wiederum in der Variable $input gespeichert wird.

Da nun eigentlich das Script weiterlaufen würde fehlt noch die Logik, welche entscheidet ob die Eingabe des Users korrekt ist. Dies lässt sich am einfachsten mit einem sog. SWITCH erreichen.
switch ($input)
    {
        '1' {
    Write-Host "Selected Option 1"
    #Add Code here
   }
  '2' {
    Write-Host "Selected Option 2"
    #Add Code here
   }
  '3' {
    Write-Host "Selected Option 3"
    #Add Code here
   }
  '4' {
    Write-Host "Selected Option 4"
    #Add Code here
   }
  '5' {
    Write-Host "Selected Option 5"
    #Add Code here
   }
  'q' {
    exit
   }
  default {
     #Add CODE witch is run if the user enters a wrong number
     exit
    }
    }
Wichtig ist hierbei nicht auf den Punkt default zu vergessen, welcher sorge trägt, dass bei einer falschen Eingabe zumindest (in unserem Beispiel) das Powershell-Script beendet wird. Hier kann natürlich auch zB wieder das Menü gezeigt werden oder ein Standardfall angenommen werden.

Zum Abschluss nun das komplette Script:
function MyCustomMenue
{
     param (
           [string]$Title = 'Select Options'
     )
     cls
     Write-Host "================ $Title ================"
     
     Write-Host "1: Press '1' for this option."
     Write-Host "2: Press '2' for this option."
     Write-Host "3: Press '3' for this option."
     Write-Host "Q: Press 'Q' to quit."
}

MyCustomMenue

Write-Host
Write-Host "================================"
$input = Read-Host "Please make a selection"

cls
Write-Host "================================"
Write-Host

switch ($input)
    {
        '1' {
    Write-Host "Selected Option 1"
    #Add Code here
   }
  '2' {
    Write-Host "Selected Option 2"
    #Add Code here
   }
  '3' {
    Write-Host "Selected Option 3"
    #Add Code here
   }
  '4' {
    Write-Host "Selected Option 4"
    #Add Code here
   }
  '5' {
    Write-Host "Selected Option 5"
    #Add Code here
   }
  'q' {
    exit
   }
  default {
                    #Add CODE witch is run if the user enters a wrong number
     exit
    }
    }
Die Ausgabe sieht in etwa so aus:
================ Select Options ================
1: Press '1' for this option.
2: Press '2' for this option.
3: Press '3' for this option.
Q: Press 'Q' to quit.

================================
Please make a selection: 
und nach zB. der Auswahl der Option 1:
================================

Selected Option 1

Donnerstag, 7. Juli 2016

Office: Benutzername in Office

Wer kennt es nicht, da startet man Microsoft Office Word zum ersten Mal und es erscheint folgende Meldung:


Für den Privatanwender ist dies alles vielleicht kein Problem, aber im Unternehmensbereich, wenn zB eine Virtual Desktop Infrastruktur mit dynamischen Pools verwendet wird, kann schon mal die Anfrage kommen, warum muss dieses Feld immer ausgefüllt werden.

Hier ist ein kleiner, aber feiner weg, wie dies zB über Gruppenrichtlinien erledigt werden kann.

Zuerst muss in der Gruppenrichtlinie unter
User Configuration --> Preferences --> Windows Settings --> Environment 
eine neue Benutzer-Variable erstellt werden.



Wie sie heißt ist eigentlich egal (diesen Namen nur für später merken), wichtig ist im Erweiterten Bereich das Item Level Targeting. Dieses muss eine LDAP-Abfrage mit folgender Zeile sein:
LDAP-Query
Filter: (&(objectClass=user)(objectCategory=User)(samAccountName=%LogonUser%))
Binding: LDAP:
Attribute: DisplayName
Environment variable name: FullName
Dann noch die Option Run in logged-on user's security context aktivieren und schon sollte bei der nächsten Anmeldung die User-Umgebungsvariable FullName den AD-Displayname des aktuell angemeldeten Benutzers haben.

Aber wie stellen wir diesen User automatisch beim Office ein?
Ganz Einfach per Registy. Dafür muss in der gleichen GPO (oder bei einer anderen) noch unter
User Configuration --> Preferences --> Windows Settings --> Registry
ein neuer Eintrag erzeugt werden.

Action: Update - Ist der Eintrag nicht vorhanden, so wird er erstellt. Sonst halt aktualisiert
Hive: HKEY_CURRENT_USER
Key Path: Software\Microsoft\Office\Common\UserInfo\
Value Name: UserName
Value Type: REG_SZ
Value Data: %FullName% oder der Name eurer Umgebungsvariable

Auch hier noch die Option Run in logged-on user's security context aktivieren und wenn gewünscht noch Apply once and do not reapply einschalten und schon wird einmalig bei der Erstanmeldung am PC die gewünschte Einstellung durchgeführt.